Высокий io с php-fpm

Недавно у меня были некоторые проблемы с php-fpm, и я замечаю, что IO очень высок для всего php-fpm (99,9%), и это что, заставляя загрузку ЦП пронзить.

Главная команда

top - 06:28:53 up 8 days, 21:05,  2 users,  load average: 179.61, 82.23, 70.63
Tasks: 913 total,  11 running, 901 sleeping,   0 stopped,   1 zombie
Cpu(s):  9.7%us,  1.7%sy,  0.0%ni, 31.4%id, 56.0%wa,  0.0%hi,  1.1%si,  0.0%st
Mem:  16296824k total,  9676012k used,  6620812k free,   242004k buffers
Swap:  8159228k total,       16k used,  8159212k free,  6596628k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
50283 nginx     20   0  439m  11m 6108 S 22.8  0.1   0:01.10 php-fpm
37536 nginx     20   0  440m  12m 6432 S  5.9  0.1   0:05.32 php-fpm
44007 nginx     20   0  439m  12m 6428 D  5.9  0.1   0:02.50 php-fpm
47827 nginx     20   0  442m  13m 6320 R  5.6  0.1   0:01.28 php-fpm
49263 nginx     20   0  439m  11m 6176 S  5.3  0.1   0:00.53 php-fpm
40709 nginx     20   0  440m  12m 6400 S  5.0  0.1   0:03.34 php-fpm
42967 nginx     20   0  439m  12m 6324 S  5.0  0.1   0:02.43 php-fpm
48703 nginx     20   0  439m  11m 5992 S  4.6  0.1   0:00.56 php-fpm
21532 nginx     20   0  121m  19m 2936 S  4.0  0.1   0:59.10 nginx
50684 nginx     20   0  439m  12m 6184 S  4.0  0.1   0:00.30 php-fpm
44081 nginx     20   0  439m  11m 6284 S  3.6  0.1   0:02.29 php-fpm
48760 nginx     20   0  440m  12m 6372 S  3.6  0.1   0:01.34 php-fpm
38657 nginx     20   0  440m  12m 6848 D  3.3  0.1   0:03.48 php-fpm
49899 nginx     20   0  439m  11m 6040 S  3.3  0.1   0:00.63 php-fpm

команда iotop

488 be/4 nginx       0.00 B/s    0.00 B/s  0.00 % 99.99 % php-fpm: pool www
47360 be/4 nginx       0.00 B/s    3.66 K/s  0.00 % 99.99 % php-fpm: pool www
51005 be/4 nginx       0.00 B/s    3.66 K/s  0.00 % 99.99 % php-fpm: pool www
56126 be/4 nginx       0.00 B/s    3.66 K/s  0.00 % 82.48 % php-fpm: pool www
48028 be/4 nginx       0.00 B/s    3.66 K/s  0.00 % 54.14 % php-fpm: pool www
54876 be/4 nginx       0.00 B/s    0.00 B/s  0.00 % 48.00 % php-fpm: pool www
47651 be/4 nginx       0.00 B/s    3.66 K/s  0.00 % 37.67 % php-fpm: pool www
  839 be/4 root        0.00 B/s    0.00 B/s  0.00 % 37.30 % [kmirrord]
47811 be/4 nginx       0.00 B/s    7.31 K/s  0.00 % 36.73 % php-fpm: pool www
48014 be/4 nginx       0.00 B/s    3.66 K/s  0.00 % 35.81 % php-fpm: pool www
48050 be/4 nginx       0.00 B/s    0.00 B/s  0.00 % 34.42 % php-fpm: pool www
47987 be/4 nginx       0.00 B/s    3.66 K/s  0.00 % 32.06 % php-fpm: pool www
47468 be/4 nginx       0.00 B/s    3.66 K/s  0.00 % 27.39 % php-fpm: pool www

/etc/sysctl.conf настройки

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1
kernel.exec-shield = 1
kernel.randomize_va_space = 1
fs.file-max = 65535
kernel.pid_max = 65536
net.ipv4.ip_local_port_range = 2000 65000

/etc/php-fpm.conf

include=/etc/php-fpm.d/*.conf
[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
log_level = warning
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10
daemonize = yes

/etc/php.d/www.conf

[www]
listen = /tmp/php5-fpm.sock
listen.allowed_clients = 127.0.0.1
listen.mode = 0666
user = nginx
group = nginx
pm = static
pm.max_children = 800
pm.start_servers = 225
pm.min_spare_servers = 150
pm.max_spare_servers = 800
pm.max_requests = 5000
request_terminate_timeout = 300
request_slowlog_timeout = 120s
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache

Я играл много со следующей установкой в попытке решить проблему, но она не работала

pm = static //was dynamic before
pm.max_children = 800
pm.start_servers = 225
pm.min_spare_servers = 150
pm.max_spare_servers = 800
pm.max_requests = 5000 // was 500 before

Каждый php-fpm использует о 10-15MB из поршня, и у меня есть поршень на 16 ГБ.I, использовал следующую команду для проверки сколько памяти каждое использование процесса

 ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

Мой сайт работает на выделенном сервере и использует только Nginx+PHP-FPM.According для поиска с помощью Google аналитики сайт обходит 90K просмотры страниц в день. Я отключаю nginx журналы доступа и измененный log_level от notice кому: warning.

Править

iostat-p-xdmnh 5

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               2.20  2044.20   86.60  118.40     3.31     8.45   117.42     4.11   20.03   1.70  34.76
sdb               0.00  2032.40    0.00  130.20     0.00     8.45   132.87     2.39   18.32   0.92  12.02
dm-0              0.00     0.00   88.80 2162.60     3.31     8.45    10.69   282.23  125.36   0.17  37.16
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00   88.80 2162.60     3.31     8.45    10.69   282.23  125.36   0.17  37.26
dm-3              0.00     0.00   88.80 2162.40     3.31     8.45    10.69   282.24  125.37   0.17  37.28
dm-4              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-5              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Filesystem:               rMB_nor/s    wMB_nor/s    rMB_dir/s    wMB_dir/s    rMB_svr/s    wMB_svr/s     ops/s    rops/s    wops/s

ОТРЕДАКТИРУЙТЕ 2 команды lsblk Благодаря Xavier Lucas для попытки выручить меня с этим

  NAME                                                               MAJ:MIN RM   SIZE RO TYPE   MOUNTPOINT
    sda                                                                  8:0    0 931.5G  0 disk
    └─ddf1_4c534920202020201000007910009260471147116cfe0677 (dm-0)     253:0    0   931G  0 dmraid
      ├─ddf1_4c534920202020201000007910009260471147116cfe0677p1 (dm-1) 253:1    0   500M  0 part   /boot
      └─ddf1_4c534920202020201000007910009260471147116cfe0677p2 (dm-2) 253:2    0 930.5G  0 part
        ├─vg_485067-lv_root (dm-3)                                     253:3    0    50G  0 lvm    /
        ├─vg_485067-lv_swap (dm-4)                                     253:4    0   7.8G  0 lvm    [SWAP]
        └─vg_485067-lv_home (dm-5)                                     253:5    0 872.7G  0 lvm    /home
    sdb                                                                  8:16   0 931.5G  0 disk
    └─ddf1_4c534920202020201000007910009260471147116cfe0677 (dm-0)     253:0    0   931G  0 dmraid
      ├─ddf1_4c534920202020201000007910009260471147116cfe0677p1 (dm-1) 253:1    0   500M  0 part   /boot
      └─ddf1_4c534920202020201000007910009260471147116cfe0677p2 (dm-2) 253:2    0 930.5G  0 part
        ├─vg_485067-lv_root (dm-3)                                     253:3    0    50G  0 lvm    /
        ├─vg_485067-lv_swap (dm-4)                                     253:4    0   7.8G  0 lvm    [SWAP]
        └─vg_485067-lv_home (dm-5)                                     253:5    0 872.7G  0 lvm    /home

Однако, когда я попробовал следующий, я не получаю вывода вообще (никакое сообщение об ошибке вообще.

diff <(lsof +D /home) <(sleep 60 ; lsof +D /home)

ОТРЕДАКТИРУЙТЕ 3 (Благодаря Xavier Lucas снова)

 diff <(lsof +D /) <(sleep 60 ; lsof +D /)

Вот результаты

http://pastebin.com/vhCtQynu

Да мой сайт использует инструмент командной строки, но я обновляю CPU и врезаюсь просто, чтобы он смог поддерживать это. Также инструмент командной строки ничего не загружает так, что я не вижу, почему IO высок

Я использую a Dual Xeon E5-2620 с 16 ГБ поршня на выделенном порте на 1 Гбит/с.

1
задан 29 September 2014 в 15:34
2 ответа

Как вы просили, вот способ, которым вы можете различать активность файлов для указанного точка монтирования.

Сначала получите точку монтирования для устройств, идентифицированных с помощью iostat, с помощью команды lsblk .

Результат будет выглядеть так:

NAME                       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                          8:0    0   16G  0 disk 
├─sda1                       8:1    0  200M  0 part /boot
└─sda2                       8:2    0 15.8G  0 part 
  ├─vg00-root (dm-0)       253:0    0    1G  0 lvm  /
  ├─vg00-swap (dm-1)       253:1    0    1G  0 lvm  [SWAP]
  ├─vg00-usr (dm-2)        253:2    0    5G  0 lvm  /usr
  ├─vg00-var (dm-3)        253:3    0    2G  0 lvm  /var
  ├─vg00-log (dm-4)        253:4    0    1G  0 lvm  /var/log
  ├─vg00-tmp (dm-5)        253:5    0    2G  0 lvm  /tmp
  ├─vg00-home (dm-6)       253:6    0    1G  0 lvm  /home
  ├─vg00-rpm (dm-7)        253:7    0    1G  0 lvm  /var/lib/rpm

Затем при высокой активности ввода-вывода выполните:

diff <(lsof +D <mountpoint>) <(sleep <delay_seconds> ; lsof +D <mountpoint>)

Например для моей точки монтирования dm-2 с интервалом 60 секунд:

diff <(lsof +D /usr) <(sleep 60 ; lsof +D /usr)

Затем он выведет различия между списком файлов, проверьте столбец размера / смещения, чтобы увидеть, какой из них увеличивается.

1
ответ дан 4 December 2019 в 10:54

Ваша проблема может быть вызвана высокой частотой запросов на php5-fpm.sock Вы можете проверить это, изменив способ подключения nginx к php-fpm. Сначала в вашем www.conf комментарий

listen = /tmp/php5-fpm.sock

и добавьте

listen = 127.0.0.1:9000

В nginx поместите

fastcgi_pass 127.0.0.1:9000;

, а не

unix:/tmp/php5-fpm.sock

. Надеюсь, что это поможет

-2
ответ дан 4 December 2019 в 10:54

Теги

Похожие вопросы