У меня есть CentOs 6.5, работающий на хосте VPS на 32 бита. Это работает только php-fpm, nginx, и mysql.
У меня есть сайт, который получает в среднем 20 посетителей в день, но я недавно получаю это сообщение от своего поставщика хоста.
Это - автоматизированное уведомление, чтобы сообщить Вам, что Ваш VPS, названный 'name.here', был сильно замедлен в прошлый час из-за свопинга.
Свопинг является результатом отсутствия памяти. Если память VPS абсолютно заполнена, части памяти записаны в жесткий диск, чтобы препятствовать тому, чтобы сервер отказал. Поскольку жесткие диски много раз медленнее, чем память, Ваша производительность сервера сильно уменьшается.
Я пытаюсь иметь смысл этого. Как может, сайт с маленьким содержанием, получая 20 посещений использует так много памяти?
Я не уверен, ли это от php, песни... или другой. Но у меня есть некоторые выводы здесь, что кто-то может определить ядро проблемы.
[root@site.name~]# free -m
total used free shared buffers cached
Mem: 498 489 9 0 1 19
-/+ buffers/cache: 469 29
Swap: 1022 180 842
top - 18:33:36 up 65 days, 1 min, 1 user, load average: 0.00, 0.02, 0.00
Tasks: 109 total, 1 running, 108 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.0%us, 0.3%sy, 0.0%ni, 98.3%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 510868k total, 503092k used, 7776k free, 1904k buffers
Swap: 1047544k total, 185096k used, 862448k free, 20956k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7435 mysql 20 0 352m 7752 2852 S 1.0 1.5 56:23.52 mysqld
17806 nginx 20 0 50088 12m 2640 S 0.7 2.5 18:13.65 php-fpm
984 root 20 0 8940 372 272 S 0.3 0.1 0:29.68 sshd
3148 root 20 0 2692 1128 880 R 0.3 0.2 0:00.15 top
1 root 20 0 2900 416 292 S 0.0 0.1 0:07.29 init
Какова могла быть проблема здесь? Есть ли, кто-либо прикрепляет к нему?
@Michael Hampton
Вывод для top
> Shift M
top - 14:34:29 up 66 days, 20:02, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 110 total, 1 running, 109 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 510868k total, 504528k used, 6340k free, 3084k buffers
Swap: 1047544k total, 179784k used, 867760k free, 19532k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19041 nginx 20 0 58672 22m 2660 S 0.0 4.5 24:00.18 php-fpm
17805 nginx 20 0 58672 22m 2688 S 0.0 4.5 16:46.40 php-fpm
19040 nginx 20 0 58776 17m 2684 S 0.0 3.6 24:27.53 php-fpm
19046 nginx 20 0 53412 17m 2692 S 0.0 3.5 22:51.54 php-fpm
17796 nginx 20 0 53604 16m 2648 S 0.0 3.3 15:14.62 php-fpm
19042 nginx 20 0 52144 15m 2660 S 0.0 3.0 22:16.40 php-fpm
17186 nginx 20 0 52208 15m 2656 S 0.0 3.0 25:22.13 php-fpm
24580 nginx 20 0 50600 14m 2660 S 0.0 3.0 13:23.23 php-fpm
19014 nginx 20 0 52084 14m 2692 S 0.0 3.0 22:16.57 php-fpm
19007 nginx 20 0 58724 14m 2724 S 0.0 3.0 25:09.20 php-fpm
19032 nginx 20 0 50156 14m 2692 S 0.0 3.0 24:25.53 php-fpm
17830 nginx 20 0 50088 14m 2696 S 0.0 2.9 16:37.53 php-fpm
17816 nginx 20 0 49996 14m 2768 S 0.0 2.9 18:57.37 php-fpm
19043 nginx 20 0 50140 14m 2648 S 0.0 2.9 23:30.66 php-fpm
17806 nginx 20 0 50088 14m 2656 S 0.0 2.9 19:38.99 php-fpm
17188 nginx 20 0 50100 14m 2656 S 0.0 2.9 22:46.46 php-fpm
17817 nginx 20 0 49836 14m 2660 S 0.0 2.9 18:29.45 php-fpm
17820 nginx 20 0 48892 13m 2972 S 0.0 2.8 18:01.07 php-fpm
19030 nginx 20 0 58824 13m 2652 S 0.0 2.8 23:40.90 php-fpm
17798 nginx 20 0 48780 13m 2696 S 0.0 2.7 17:09.82 php-fpm
17187 nginx 20 0 58672 13m 2716 S 0.0 2.7 23:04.46 php-fpm
17807 nginx 20 0 52076 13m 2660 S 0.0 2.6 16:45.52 php-fpm
19029 nginx 20 0 58924 12m 2688 S 0.0 2.6 24:00.66 php-fpm
17808 nginx 20 0 58676 12m 2688 S 0.0 2.6 17:31.33 php-fpm
17799 nginx 20 0 50088 12m 2660 S 0.0 2.6 17:41.13 php-fpm
19015 nginx 20 0 58680 12m 2656 S 0.0 2.6 21:59.83 php-fpm
18295 nginx 20 0 48512 12m 2692 S 0.0 2.6 16:57.08 php-fpm
19027 nginx 20 0 48368 12m 2656 S 0.0 2.6 24:40.65 php-fpm
17819 nginx 20 0 48208 12m 2656 S 0.0 2.5 16:43.87 php-fpm
19031 nginx 20 0 49960 12m 2648 S 0.0 2.5 23:28.34 php-fpm
17832 nginx 20 0 47884 12m 2660 S 0.0 2.5 16:04.87 php-fpm
17818 nginx 20 0 47884 12m 2660 S 0.0 2.5 16:03.53 php-fpm
17831 nginx 20 0 47864 12m 2696 S 0.0 2.5 16:43.48 php-fpm
18249 nginx 20 0 47884 12m 2664 S 0.0 2.5 16:27.29 php-fpm
7435 mysql 20 0 352m 7780 2872 S 0.3 1.5 62:00.00 mysqld
19033 nginx 20 0 42540 7368 2676 S 0.0 1.4 24:04.93 php-fpm
31015 root 20 0 12028 3708 2940 S 0.0 0.7 0:00.17 sshd
30826 postfix 20 0 13628 2260 1640 S 0.0 0.4 0:00.00 pickup
30995 root 20 0 5252 1704 1412 S 0.0 0.3 0:00.03 bash
31020 root 20 0 5256 1704 1416 S 0.0 0.3 0:00.03 bash
19028 nginx 20 0 58668 1648 1528 S 0.0 0.3 9:11.84 php-fpm
Из вашего обновленного вывода видно, что у вас работают 34 PHP-работника (не считая главного процесса), все они занимают память и полностью простаивают. Это означает, что вы настроили php-fpm на работу на машине с гораздо большей производительностью, чем трафик, который вы получаете на самом деле. Или, возможно, вообще не настраивали.
На данный момент эти процессы занимают более 3/4 оперативной памяти вашей ВМ и не приносят никакой пользы.
Итак, проверьте настройку в конфигурации пула php-fpm, например, по умолчанию /etc/php-fpm.d/wwww.conf
. Для такого маленького VPS я, вероятно, начну с:
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 5
Судя по всему, вам нужно настроить MYSQL для небольшой установки VPS. По умолчанию, он будет съедать как можно больше оперативной памяти.
Скопировано с этого сайта, так что он останется доступным, my.cnf
:
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
# For low memory, InnoDB should not be used so keep skip-innodb uncommented unless required
skip-innodb
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql/
#innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M
[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M
[mysqlhotcopy]
interactive-timeout
Настройте под себя, но это должно хорошо работать на VPS 512MB. Если вы используете InnoDB, вам нужно включить его.
.