Я запускаю Centos 7 с php-fpm 5.4. Я обнаружил ошибку SIGSEGV (сигнал 11) в журналах ошибок php-fpm и хочу ее отладить.
Я последовал совету php5 fpm: как создать дамп ядра из segfault? но php-fpm по-прежнему даже не пытается создавать дампы ядра. Из журнала ошибок php-fpm:
WARNING: [pool website.com] child 26953 exited on signal 11 (SIGSEGV) after 0.931337 seconds from start
Если бы был создан дамп ядра, он бы читал (SEGSEGV - core dumped)
но это не так.
У меня тоже были проблемы с этим. Вроде на centos мастер php-fpm
процесс запускается с привилегиями root, который затем запускает отдельные пулы с ограниченными привилегиями (пользователь php-fpm
на centos по умолчанию).
Камнем преткновения для меня, и я подозреваю вас тоже, является то, что если процесс изменил свои собственные привилегии выполнения, ему не разрешено создавать файл дампа ядра, если только /proc/sys/fs/suid_dumpable
настроен, чтобы разрешить это. См. Информацию об этом элементе управления на уровне ядра. Вот.
Пользователь переключателя PHP-FPM перед запуском пулов. Следовательно, мне пришлось изменить fs.suid_dumpable
к 1
как упоминалось на
https://itnext.io/linux-processes-core-dumps-systemd-coredump-and-debian-cf2ddb11ef9e
sysctl -w fs.suid_dumpable=1
Я смог решить эту проблему следующим образом:
DefaultLimitCORE=infinity
sysctl kernel.core_pattern='| /usr/lib/systemd/systemd-coredump %p %u %g %s %t %c %e'
systemctl daemon-reload
В качестве дополнительного шага для php-fpm необходимо установить следующую директиву в отдельных файлах пула php-fpm, которые вы хотите отслеживать:
rlimit_core = неограниченно
Каталог по умолчанию для программы systemd-coredump: /var/lib/systemd/coredump
поэтому вы должны увидеть здесь сгенерированные файлы дампа.