重い画像をWordPressのメディアにいくつかアップロードしていた。
待てど画像アップロードのプログレスバーは動く気配がない。
なんだ?と特に考えずにブラウザリロードをすると、今度はリロードが終わらない。
待っていると、ついにはリクエストが失敗し、画面がまったく表示されなくなった。
WordPressの環境は AWS Lightsail だった。
目次
原因調査
pingを叩く
pingを叩くと、、、サーバーインスタンスが死んでる!?
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Lightsail の管理画面に行くと、きちんと起動していること確認。
Lightsail のファイアウォールでICMPを許可していなかったのが原因。
許可すると疎通を確認できた。サーバーインスタンスは無事。
64 bytes from 192.168.0.x: icmp_seq=0 ttl=53 time=34.748 ms
64 bytes from 192.168.0.x: icmp_seq=1 ttl=53 time=21.535 ms
Bitnami エラーログを確認
Bitnamiのログを確認する。
$ cd /opt/bitnami/apache2/logs
$ tail -f error_log
そこでtimeoutエラーが発生していた。これが原因か。
The timeout specified has expired
AH01075 : Error dispatching request to : (polling), referer
重い画像をアップロードする時の実行時間がかかり過ぎて、タイムアウト制限を超えた。
それで何度かリトライするうちにプロセスを食い、サーバーへアクセスができなくなったのかもしれない。
Apacheを再起動する
Bitnamiのシェルスクリプトを叩く。
sudo /opt/bitnami/ctlscript.sh restart
再起動が完了後、WordPressにアクセスすると無事表示された。
まとめ
サーバーが死んだ(ような)時は順番に突き詰めていくと解決の糸口が見えてくる。
今回のような場合は、回避策だけだが、重い画像アップロードを行うと再発するはず。
根本解決のためには、サーバー負荷も考慮しながら、php.ini のmax_execution_timeを上げるなども良いかもしれない。