Со временем PHP сервера забивается - 502 bad gateway (без нагрузки)

12
D
На сайте с 05.06.2007
Offline
155
#11

да, я так и подумал, там очень сложная система, с shm/sem/flock (mysql нет)

возможно все процессы ждут один процесс который блокирует общую ячейку памяти (читает или пишет), что самое странное, это бывает редко (

вообщем буду наблюдать и тестить )

Написал не мало шедевров ;)
D
На сайте с 05.06.2007
Offline
155
#12

Удалось отловить процесс php-cgi потреблющий 99%CPU (при нормальной работе их нет) и в тот момент когда он что-то делает (после чего частенько все php процессы не принимают новые соединения) выполнить strace и lsof

Вот такие результаты, но мне они не очём не говорят 🙅

наверное интересный strace должен быть до этого момента (

несколько секунд ничего не выводится кроме первой строки, потом это начиная с SIGPROF:

strace -p 3460
Process 3460 attached - interrupt to quit
--- SIGPROF (Profiling timer expired) @ 0 (0) ---
setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={30, 0}}, NULL) = 0
rt_sigaction(SIGPROF, {0x82b3ad0, [PROF], SA_RESTART}, {0x82b3ad0, [PROF], SA_RE START}, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0
close(6) = 0
fcntl64(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1}) = 0
fcntl64(3, F_SETLKW, {type=F_UNLCK, whence=SEEK_SET, start=0, len=1}) = 0
write(5, "\1\6\0\1\0\r\3\0   \0\0\0", 24) = -1 EPIPE (Broken pipe)
--- SIGPIPE (Broken pipe) @ 0 (0) ---
munmap(0xb373c000, 266240) = 0
munmap(0xb377d000, 266240) = 0
munmap(0xb37be000, 528384) = 0
munmap(0xb78e9000, 266240) = 0
mmap2(NULL, 266240, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x b78e9000
setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
write(5, "\1\6\0\1\0\r\3\0   \0\0\0\1\3\0\1\0\10\0\0"..., 40) = -1 EPI PE (Broken pipe)
--- SIGPIPE (Broken pipe) @ 0 (0) ---
shutdown(5, 1 /* send */) = 0
recv(5, "\1\5\0\1\0\0\0\0", 8, 0) = 8
recv(5, "", 8, 0) = 0
close(5) = 0
accept(4, <unfinished ...>

и lsof для подобного процесса

lsof -p 3458
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
php-cgi 3458 wwwrun cwd DIR 8,1 110592 7110665 /home/web/html
php-cgi 3458 wwwrun rtd DIR 8,1 4096 2 /
php-cgi 3458 wwwrun txt REG 8,1 14141558 2475330 /usr/local/bin/php-cgi
php-cgi 3458 wwwrun mem REG 0,0 0 [heap] (stat: No such file or directory)
php-cgi 3458 wwwrun mem REG 8,1 17840 38682949 /lib/tls/i686/cmov/libnss_dns-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 549984 2458197 /usr/lib/locale/locale-archive
php-cgi 3458 wwwrun DEL REG 0,8 414112460 /dev/zero
php-cgi 3458 wwwrun mem REG 8,1 38372 38682950 /lib/tls/i686/cmov/libnss_files-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 339330 46072457 /root/conf/php/xcache.so
php-cgi 3458 wwwrun mem REG 8,1 14504 2458347 /usr/lib/libkrb5support.so.0.0
php-cgi 3458 wwwrun mem REG 8,1 89370 38682955 /lib/tls/i686/cmov/libpthread-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 1241392 38682941 /lib/tls/i686/cmov/libc-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 1147196 2458454 /usr/lib/libxml2.so.2.6.27
php-cgi 3458 wwwrun mem REG 8,1 5820 38682633 /lib/libcom_err.so.2.1
php-cgi 3458 wwwrun mem REG 8,1 151252 2458344 /usr/lib/libk5crypto.so.3.0
php-cgi 3458 wwwrun mem REG 8,1 508328 2458346 /usr/lib/libkrb5.so.3.2
php-cgi 3458 wwwrun mem REG 8,1 111708 2458343 /usr/lib/libgssapi_krb5.so.2.2
php-cgi 3458 wwwrun mem REG 8,1 76548 38682947 /lib/tls/i686/cmov/libnsl-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 9592 38682944 /lib/tls/i686/cmov/libdl-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 145136 38682945 /lib/tls/i686/cmov/libm-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 67364 38682956 /lib/tls/i686/cmov/libresolv-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 127488 2458426 /usr/lib/libjpeg.so.62.0.0
php-cgi 3458 wwwrun mem REG 8,1 137760 2458443 /usr/lib/libpng12.so.0.15.0
php-cgi 3458 wwwrun mem REG 8,1 29700 38682640 /lib/libpam.so.0.79
php-cgi 3458 wwwrun mem REG 8,1 1270520 2458191 /usr/lib/i686/cmov/libcrypto.so.0.9.8
php-cgi 3458 wwwrun mem REG 8,1 253120 2458192 /usr/lib/i686/cmov/libssl.so.0.9.8
php-cgi 3458 wwwrun mem REG 8,1 30612 38682957 /lib/tls/i686/cmov/librt-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 78500 2458925 /usr/lib/libz.so.1.2.3
php-cgi 3458 wwwrun mem REG 8,1 772960 2458209 /usr/lib/libc-client.so.2002edebian.1
php-cgi 3458 wwwrun mem REG 8,1 21868 38682943 /lib/tls/i686/cmov/libcrypt-2.3.6.so
php-cgi 3458 wwwrun mem REG 8,1 88164 38683040 /lib/ld-2.3.6.so
php-cgi 3458 wwwrun 0r CHR 1,3 304 /dev/null
php-cgi 3458 wwwrun 1w CHR 1,3 304 /dev/null
php-cgi 3458 wwwrun 2w CHR 1,3 304 /dev/null
php-cgi 3458 wwwrun 3u REG 8,1 0 3053919 /tmp/.xcache.1000.0.1804289383.lock (deleted)
php-cgi 3458 wwwrun 4u unix 0xedbf5200 414112462 /tmp/php-wwwrun.sock
php-cgi 3458 wwwrun 5u unix 0xe686a200 414312638 /tmp/php-wwwrun.sock
php-cgi 3458 wwwrun 6u sock 0,4 414312743 can't identify protocol

Какие выводы можно сделать?

M
На сайте с 16.09.2009
Offline
278
#13

не совсем понятно, что оно делает.

обломился на записи в fd 5:

write(5, "\1\6\0\1\0\r\3\0&nbsp; &nbsp;\0\0\0", 24) = -1 EPIPE (Broken pipe)

в итоге сделал shutdown сокету.

fd 5 - это:

php-cgi 3458 wwwrun 5u unix 0xe686a200 414312638 /tmp/php-wwwrun.sock

и висит на accept с fd 4:

accept(4, <unfinished ...>

php-cgi 3458 wwwrun 4u unix 0xedbf5200 414112462 /tmp/php-wwwrun.sock

что делают другие процессы php?

вы запускаете с помощью встроенного fastcgi в php?

(как здесь, например, http://kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/lang/ru/ ?)

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
D
На сайте с 05.06.2007
Offline
155
#14

да, пхп так и запускается.

проблема в том что трудно это всё выловить в реальном времени

strace ничего не выводит в тот момент когда активно используется процессор, а что было до этого момента никак не узнать, я ведь не могу знать когда будет очередная волна с такими зависаниями (

очень удивительная вещь, может месяц всё нормально работать, а потом не с того не с сего такие глюки раза 3 за день, и само проходит... сейчас хоть запустил скрипт который перезагружает пхп если он не реагирует!

Запускать strace на все процессы, писать логи, как зависнет, убить все strace и смотреть что там последнее в логах? =)

M
На сайте с 16.09.2009
Offline
278
#15

попробуйте php-fpm

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий