У меня CentOs 6.5 работает на 32-битном хосте VPS. Он работает только с php-fpm, nginx и mysql.
У меня есть сайт, который посещают в среднем 20 человек в день, но я недавно получил это сообщение от своего хост-провайдера.
Это автоматическое уведомление, информирующее вас о том, что ваш VPS с именем «name.here» сильно замедлился за последний час из-за подкачки.
Своппинг - это результат нехватки памяти. Если память VPS полностью заполнена, части памяти записываются на жесткий диск, чтобы предотвратить сбой сервера. Поскольку жесткие диски во много раз медленнее памяти, производительность вашего сервера значительно снижается.
Я пытаюсь понять это. Как может сайт с небольшим содержанием, получающий 20 посещений, потреблять столько памяти?
Я не уверен, что это из php, centos ... или другого. Но у меня есть некоторые выводы, что кто-то может определить суть проблемы.
[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/www.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 512 МБ. Если вы используете InnoDB, вам необходимо включить его.