Apache 2.2.3+MySQL 5.0.95+WordPressでCPU 100%となる

スポンサーリンク
サーバー設定

Apache 2.2.3+MySQL 5.0.95+WordPressでCPU 100%となるので、原因を調べてみました。

 

Apache 2.2.3でCPU100%

当ブログはさくらインターネットのVPS(仮想専用サーバー)を使っていますが、時々ApacheのCPU負荷が100%になってサーバーのアクセスができなくなることがあるようです。

 

先日もアクセス不可に見舞われたのですが、以下の設定で

アクセス不可になった際に、通知メールが飛ぶようになり、すぐにCPU100%となっている状況を知ることができました。

さくらインターネットのVPS(仮想専用サーバー)のサーバー・ネットワークの監視(リソース情報、Uptime Robot)
当ブログはさくらインターネットのVPS(仮想専用サーバー)を使っているのですが、時々、CPU100%負荷になってアクセスが遅くなります。 現在原因を調査しているところですが、まだ抜本的な対策が出来ておりません。 そこでとりあえず、サーバ...

 

 

後で、さくらインターネットのVPSコントロールパネルから「リソース情報」を見ると下記の状態になっていました。

 

image

 

 

この状態ではCPUが100%になっているのでユーザーからはアクセスできない状態になっていたようです。

 

PHP Fatal error:  Maximum execution time of 30 seconds exceeded

該当時間のログを調べてみることにします。

 

Apacheのerror_logは以下の通りです。

 

パッとみたところ、PHP Fatal error:  Maximum execution time of 30 seconds exceeded が怪しいように見えますが、これはシロだと思います

 

PHPでは無限ループの対策のため、PHP実行処理のタイムアウトが設定されており、デフォルト値が30秒になっています。

 

30秒自体はおそらくほとんどの処理では適当なタイムアウト値だと思われます。

 

/etc/php.iniファイルの中の

max_execution_time = 30

を変更すれば伸ばすことは可能ですが、今回のCPU100%問題について説明がつく修正ではないので止めておくことにします。

 

今回の現象は、恐らく、CPU100%となってしまったために、PHPの応答がなかなか返ってこなくなって結果として30秒のタイムアウト値を超えてしまったのではないかと考えられます。

 

 

Out of memory: Killed process 32592, UID 27, (mysqld)

該当時間のシステムのログを調査してみます。

 

CentOSではシステムのログとしては、/var/log/messagesと/var/log/secureを参照します。

 

/var/log/secureには目立った障害は見られませんでした。

 

/var/log/messagesは以下の通りです。

 

うーむ。

 

Out of memory: Killed process 32592, UID 27, (mysqld) とか
httpd invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0 あたりが怪しいところです。

 

 

推測すると、何らかの無限ループに入って、CPUやメモリを使い果たしてしまい、やむを得ずに、システムがApacheとMySQLを再起動しているように見えます。

 

LinuxカーネルにはOut Of Memory Killer(OOM Killer)という機能があって、メモリ浪費を行っているプロセスを自動的に止めるように動きます。

 

 

Apache Killer(CVE-2011-3192)が原因か?

 

2011年8月に当時、ほぼすべてのバージョンのApacheに存在する脆弱性が見つかりました(CVE-2011-3192)。

「Apache HTTP Server」には、サービス運用妨害 (DoS) の脆弱性(CVE-2011-3192)が存在します。

「Apache HTTP Server」は、Apache Software Foundation がオープンソースソフトウェアとして提供しているウェブサーバ用のプログラムです。 「Apache HTTP Server」には、HTTP リクエストの取扱いに問題があるため、サービス運用妨害 (DoS) の脆弱性(CVE-2011-3192)が存在します。 この脆弱性が悪用されると、運用中のウェブサービスを提供できなくなるなどの被害にあう可能性があります。

 

ウェブサーバ「Apache HTTP Server」の脆弱性(CVE-2011-3192)について:IPA 独立行政法人 情報処理推進機構
情報セキュリティ関連情報のユーザー、管理者、技術者に向けた発信、その前提となる情報収集、調査分析、研究開発、技術評価等の実施

から引用しています。

 

 

私の使っているApacheは、2.2.3と古いので怪しいと思い、脆弱性を確認してみました。

 

 

検証するために、apachepartial.pl というスクリプトを使います。

[Perl] Apache Range header/Partial Content bug exploit + fix - Pastebin.com

からダウンロードしてクライアントに置きます。

 

 

サーバーをいつでも再起動できる状態にしてテストして見ました。

 

Host does not seem vulnerable ・・・シロでした。

 

この種の対策を何も行っていなかったので、いかにもこの問題かと思ったのですが違いました。

 

1日いろいろと対策を考えましたが、今回は本件の原因解明を諦めて、代わりにApacheをnginxへ移行して様子を見てみようと思います。

 

 

2014.11.14 追記 nginxへ移行しました

CentOS 5のWordPressでApache 2.2.3からnginx 1.6.2へ移行手順
当ブログはさくらインターネットのVPS(仮想専用サーバー)でCentOS 5を使っていますが、この度、Apache 2.2.3からnginx 1.6.2へ移行しました。 以下、nginx 1.6.2への移行手順です。 ...

 

 

さくらのVPSサーバー

 

↓月額685円からの低価格&高パフォーマンスのVPS、さくらのVPSはコチラ

SSDプランが月々685円から使える!さくらのVPS

 

 

 

コメント