XSERVERで500 Internal Server Errorが出た時の解決方法
エックスサーバーは割と大量のアクセスがあっても落ちることなく、コントロールパネルも使いやすいサーバーだと思う。
サポートに連絡すればすぐに対応してくれるし、sakuraサーバーといい勝負。
そんなエックスサーバーだけど、設置しておいたPHPが突然「500 Internal Server Error」を起こした。なんにも触ってないのに…。
でも解決したのでそのやり方をメモしておく。
これがエックスサーバーの500エラーの画面。よく見ると解決方法が書いてある。
500エラーが常に発生する場合は、
- CGIのパーミッション設定に誤りがある
- CGIのソースコードに問題がある
- .htaccessの記述に誤りがある
ことを確認するみたい。
具体的な確認方法はエックスサーバーのよくある質問に書かれてる。
この部分ですね。
Q.PHPを設置すると「500 Internal Server Error」が表示されます。
A.ご利用いただいているプログラムでエラーが発生している可能性があります。
【考えられる要因】
PHPを設置しているディレクトリが755または705で設定されていない
PHPのパーミッションが755, 705, 644, 604のいずれかで設定されていない
プログラム側の記述に誤りがある
なお、同時接続数などが影響し、リソース制限がかかっている可能性もあります。
サーバーパネル「ログファイル」よりエラーログをご確認ください。
ご不明な場合は、メールサポートまでご相談下さい。
今回のエラーはプログラムを設置・変更してないし、断続的に500エラーが発生していたので、CGIの負荷が高い(プロセスが多数起動)が原因かと。
それを確認するにはログファイルを確認せよとのことなので、エックスサーバーのコントロールパネルからエラーログを取得してみた。
ここで複数のサーバーを使っている場合は、500エラーが発生しているサーバーに切り替えておくことに注意。
さてログをチェックしてみると、やっぱりリソース不足だって書かれてた。具体的には下記の文言。
setuid() failed: Resource temporarily unavailable
エックスサーバーのよくある質問では、この場合、メールサポートに連絡するように書かれてたけど、その間500エラーが起こっていてサーバー全体のサービスが停止しアクセスできないのは痛い。
なのでこれを自力で直す。まずはマニュアルを参考にエックスサーバーにssh接続する。
次に「ps ax | grep hogehoge」コマンドを実行。hogehogeの部分は、例えばhoge.xsrv.jpなら「ps ax | grep hoge」となる。
実行中のプロセス一覧が表示されたら、「kill -9 12345」コマンドでプロセスを止める。12345の部分は上記psコマンドで得られたPIDを指定すること。
これで「500 Internal Server Error」は表示されないはず。
ここまで読んでちょっと何言ってるか分からないと思ったら、素直にエックスサーバーのメールサポートに連絡した方が早いですよ。