Назад | Перейти на главную страницу

php-fpm не генерирует файлы дампа ядра, несмотря на то, что он настроен на

Я запускаю 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

Я смог решить эту проблему следующим образом:

  1. Добавлен в файл /etc/systemd/system.conf:

DefaultLimitCORE=infinity

  1. Изменен kernel.core_pattern:

sysctl kernel.core_pattern='| /usr/lib/systemd/systemd-coredump %p %u %g %s %t %c %e'

  1. Перезагрузили конфигурацию systemd:

systemctl daemon-reload

В качестве дополнительного шага для php-fpm необходимо установить следующую директиву в отдельных файлах пула php-fpm, которые вы хотите отслеживать:

rlimit_core = неограниченно

Каталог по умолчанию для программы systemd-coredump: /var/lib/systemd/coredump поэтому вы должны увидеть здесь сгенерированные файлы дампа.