XSERVERで500 Internal Server Errorが出た時の解決方法

xserver

エックスサーバーは割と大量のアクセスがあっても落ちることなく、コントロールパネルも使いやすいサーバーだと思う。

サポートに連絡すればすぐに対応してくれるし、sakuraサーバーといい勝負。

そんなエックスサーバーだけど、設置しておいたPHPが突然「500 Internal Server Error」を起こした。なんにも触ってないのに…。

でも解決したのでそのやり方をメモしておく。

これがエックスサーバーの500エラーの画面。よく見ると解決方法が書いてある。

500_internal_server_error

500エラーが常に発生する場合は、

  • CGIのパーミッション設定に誤りがある
  • CGIのソースコードに問題がある
  • .htaccessの記述に誤りがある

ことを確認するみたい。

具体的な確認方法はエックスサーバーのよくある質問に書かれてる。

この部分ですね。

Q.PHPを設置すると「500 Internal Server Error」が表示されます。

A.ご利用いただいているプログラムでエラーが発生している可能性があります。

【考えられる要因】
PHPを設置しているディレクトリが755または705で設定されていない
PHPのパーミッションが755, 705, 644, 604のいずれかで設定されていない
プログラム側の記述に誤りがある
なお、同時接続数などが影響し、リソース制限がかかっている可能性もあります。
サーバーパネル「ログファイル」よりエラーログをご確認ください。
ご不明な場合は、メールサポートまでご相談下さい。

今回のエラーはプログラムを設置・変更してないし、断続的に500エラーが発生していたので、CGIの負荷が高い(プロセスが多数起動)が原因かと。

それを確認するにはログファイルを確認せよとのことなので、エックスサーバーのコントロールパネルからエラーログを取得してみた。

xserver-log

ここで複数のサーバーを使っている場合は、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」は表示されないはず。

ここまで読んでちょっと何言ってるか分からないと思ったら、素直にエックスサーバーのメールサポートに連絡した方が早いですよ。

Pocket

« »