PHP7でphp-fpmがSIGSEGVで死ぬ問題発生。

Linux

PHP7にアップデートしてとても高速化した俺のブログサーバーですが、なんだか不安定な事象が発生しています。SIGSEGVでphp-fpmが死んでしまう。

なんかブログ落ちてたんです。なんだろう、と思ったら、SIGSEGVで死んでる。

[23-Feb-2016 03:48:30] WARNING: [pool www] child 7918 exited on signal 11 (SIGSEGV) after 14708.469083 seconds from start
[23-Feb-2016 03:48:30] NOTICE: [pool www] child 11493 started
[23-Feb-2016 03:48:43] WARNING: [pool www] child 9284 exited on signal 11 (SIGSEGV) after 10302.337888 seconds from start
[23-Feb-2016 03:48:43] NOTICE: [pool www] child 11494 started
[23-Feb-2016 03:48:51] WARNING: [pool www] child 10067 exited on signal 11 (SIGSEGV) after 6453.369856 seconds from start
[23-Feb-2016 03:48:51] NOTICE: [pool www] child 11495 started
[23-Feb-2016 03:48:51] WARNING: [pool www] child 10848 exited on signal 11 (SIGSEGV) after 4660.291801 seconds from start
[23-Feb-2016 03:48:51] NOTICE: [pool www] child 11496 started
[23-Feb-2016 03:49:06] WARNING: [pool www] child 11493 exited on signal 11 (SIGSEGV) after 36.091972 seconds from start
[23-Feb-2016 03:49:06] NOTICE: [pool www] child 11497 started
[23-Feb-2016 03:49:07] WARNING: [pool www] child 11494 exited on signal 11 (SIGSEGV) after 23.240175 seconds from start
[23-Feb-2016 03:49:07] NOTICE: [pool www] child 11498 started
[23-Feb-2016 03:49:17] WARNING: [pool www] child 11496 exited on signal 11 (SIGSEGV) after 25.820594 seconds from start
[23-Feb-2016 03:49:17] NOTICE: [pool www] child 11499 started
[23-Feb-2016 03:49:26] WARNING: [pool www] child 11497 exited on signal 11 (SIGSEGV) after 20.345453 seconds from start
[23-Feb-2016 03:49:26] NOTICE: [pool www] child 11500 started
[23-Feb-2016 03:49:28] WARNING: [pool www] child 11498 exited on signal 11 (SIGSEGV) after 21.340084 seconds from start
[23-Feb-2016 03:49:28] NOTICE: [pool www] child 11501 started

こんな感じで、子プロセスが起きては死ぬ状態。nginx側では、画面はBad Gateway、ログは「[error] 8#8: *112125 recv() failed (104: Connection reset by peer) while reading response header from upstream」とか言っています。

とりあえず再起動で復活したのですが・・・原因不明。

ネットで調べると、php5.6+nginxではapcを有効にするとSIGSEGVが出るとかいう情報が。apcuが被疑なのかなぁ、と思いつつ、apc.phpでメモリの使用状況をモニタしています。

スクリーンショット 2016-02-26 1.19.49

うーん、酷いフラグメントだなぁ。なんかパラメータ調整要るのかなぁ。確かに、デフォルト状態なので、調整の余地はあるとは思うんですが・・・。

これまで2回発生していて、再現性があるので、解析してみようかな、と。php7速いので、さすがにバージョンダウンはしたくないところです。

そんなわけで、発見した事象。

WordPressのapcuプラグインは、「APCu Object Cache Backend」という、ドロップイン型のプラグインを使っているのですが、ドロップイン型のため、バージョン・アップしても、手で該当ファイルを再配置しないと更新されません。当たり前といえば当たり前なんですが。

確かに、このプラグインがアップデートされていて、しかも直近のアップデート内容が「Compatibility with PHP 7 and APCu 5」ということで、これが原因で不具合を踏んでいた可能性があります。ファイルのアップデートをして様子を見ていますが、メモリのフラグメント状況は相変わらずです。ただ、別にフラグメントしていたとしても、溢れないように動いてくれれば問題は無いので、ちゃんと開放されていくかをモニタリングしています。

治るとイイなぁ、と。

【追記】治りませんでした。

スクリーンショット 2016-02-26 21.17.04

フラグメント100%で死んだ・・・。APCやめてredisにしてみようと思います。

【追記】redisは環境条件がちょいと厳しいので、php/apcu関連の設定変更でなんとかならないかと格闘中。要するにメモリ足りないだけ、って可能性も含め、継続調査中です。

コメント

タイトルとURLをコピーしました