php-fpmは設定されているにもかかわらずコアダンプファイルを生成しない

php-fpmは設定されているにもかかわらずコアダンプファイルを生成しない

Centos 7 を php-fpm 5.4 で実行しています。php-fpm エラー ログに (signal 11) SIGSEGV エラーが発生しており、デバッグしたいと考えています。

私はのアドバイスに従いましたphp5 fpm: セグメント違反からコアダンプを生成するにはどうすればいいですか?しかし、php-fpm はまだコアダンプを生成しようとしていません。php-fpm のエラー ログから:

WARNING: [pool website.com] child 26953 exited on signal 11 (SIGSEGV) after 0.931337 seconds from start

コア ダンプが生成されていれば読み取られるはずです(SEGSEGV - core dumped)が、そうではありません。

答え1

私もこれに問題がありました。CentOS では、マスターphp-fpmプロセスがルート権限で起動され、その後、個々のプールが制限された権限 (php-fpmデフォルトでは CentOS のユーザー) で起動されるようです。

私にとって、そしておそらく皆さんにとっても、障害となるのは、プロセスが自身の実行権限を変更した場合、/proc/sys/fs/suid_dumpable許可するように設定されていない限り、コアダンプファイルを生成することができないことです。このカーネルレベルの制御に関する情報を参照してください。ここ

答え2

私は次のようにしてこの問題を解決できました:

  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、ここで生成されたダンプ ファイルが表示されるはずです。

答え3

プールを開始する前にPHP-FPMスイッチャーユーザーを変更する必要があります。そのため、前述のようfs.suid_dumpableに変更する必要がありました。1

https://itnext.io/linux-processes-core-dumps-systemd-coredump-and-debian-cf2ddb11ef9e

sysctl -w fs.suid_dumpable=1

関連情報