- - PR -
apacheが遅い原因(libhttpd.ep?)
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-06-10 09:36
いつもお世話になっております。
RH9+Apache1.3.33+PHP4.2.2+Postgres7.2.1 でwebサーバーを立てております初心者です。 サーバーは何も触っておらず、それまでは超快適に動いていたのですが、GWから突然Webコンテンツのロードに時間がかかるようになりました。それも朝方5時から9時くらいまでだけ強烈に遅いのです。確かにアクセスが集中する時間帯なのですが、この日をさかいにクライアントが増えたことも変わったことも何もありません。 速度が通常に戻ってくる9時半頃に ps ax してみてもlibhttpd.epの消費時間は一向に減らず、相変わらずswapされっぱなしです。 メモリを食って、解放しないやつの正体が知りたいのですが、どう調べればよいでしょうか。。 何卒ご教授の程よろしくお願いします。 ======================================================= # ps ax PID TTY STAT TIME COMMAND 1 ? S 0:03 init 2 ? SW 0:00 [keventd] 3 ? SW 0:00 [kapmd] 4 ? SWN 0:00 [ksoftirqd_CPU0] 9 ? SW 0:00 [bdflush] 5 ? SW 0:02 [kswapd] 6 ? SW 0:00 [kscand/DMA] 7 ? SW 2:43 [kscand/Normal] 8 ? SW 0:00 [kscand/HighMem] 10 ? SW 0:00 [kupdated] 11 ? SW 0:00 [mdrecoveryd] 15 ? SW 0:06 [kjournald] 72 ? SW 0:00 [khubd] 3568 ? SW 0:00 [kjournald] 3569 ? SW 0:13 [kjournald] 3862 ? S 0:00 syslogd -m 0 3866 ? S 0:00 klogd -x 3944 ? S 0:00 /usr/sbin/sshd 3958 ? S 0:00 xinetd -stayalive -reuse -pidfile /var/run/xinetd.pid 3967 ? S 0:00 gpm -t imps2 -m /dev/mouse 3978 ? SW 0:00 [jserver] 3987 ? S 0:00 [cannaserver] 3998 ? S 0:00 crond 4009 ? S 0:00 cupsd 4073 ? S 0:00 [xfs] 4127 ? S 0:05 /usr/local/pgsql/bin/postmaster -S -i 4128 ? S 0:00 postgres: stats buffer process 4129 ? S 0:00 postgres: stats collector process 4131 ? S 0:00 /usr/local/apache/bin/httpd 4132 tty1 S 0:00 /sbin/mingetty tty1 4133 tty2 S 0:00 /sbin/mingetty tty2 4134 tty3 S 0:00 /sbin/mingetty tty3 4135 tty4 S 0:00 /sbin/mingetty tty4 4136 tty5 S 0:00 /sbin/mingetty tty5 4137 tty6 S 0:00 /sbin/mingetty tty6 4138 ? S 1:43 [libhttpd.ep] 4139 ? S 2:19 [libhttpd.ep] 4140 ? S 2:00 [libhttpd.ep] 4141 ? S 1:55 [libhttpd.ep] 4142 ? S 2:04 [libhttpd.ep] 4143 ? S 1:44 [libhttpd.ep] 4146 ? S 1:53 [libhttpd.ep] 4147 ? S 1:43 [libhttpd.ep] 4150 ? S 1:51 [libhttpd.ep] 4153 ? S 1:46 [libhttpd.ep] 2016 ? S 0:04 [libhttpd.ep] 2027 ? S 0:02 [libhttpd.ep] 2249 ? S 0:00 /usr/sbin/sshd 2259 pts/0 S 0:00 -bash 3580 ? R 0:00 postgres: nobody nidb [local] idle 3581 pts/0 R 0:00 ps ax # free total used free shared buffers cached Mem: 1030404 1018036 12368 0 106628 827680 -/+ buffers/cache: 83728 946676 Swap: 2040244 30680 2009564 # vmstat procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 1 0 0 30684 9996 106580 827480 1 3 49 5 26 205 5 1 94 | ||||||||||||
|
投稿日時: 2005-06-10 10:14
「ps aux」で、CPUやメモリの消費容量はどうでしょうか?
スワップするようなことが続くようであれば、メモリ消費量のところが、どこか突出し ていると思うのですが。 その時間帯で、CRONで回しているものとかありませんか? あと、ずっと前ですが、そんな現象が起きたときが、私もありまして。。。多分、 McLarenさんには当てはまらないと思いますが。。。私の場合は、調子が悪いなと思って いましたら、HDDが故障していまして、そんな現象がでて1週間ぐらいで壊れました。 | ||||||||||||
|
投稿日時: 2005-06-10 11:12
今はおちついている時間帯で、普通に動いているのですが、やはり
[kscand/Normal] と [libhttpd.ep] が 使いっぱなしになるのです・・・ もちろんこれを機に新マシンでメモリを2G積んで(今は1G)RH9をやめて最新のVine3.1にして仕切りなおそうと思っているのですが、やはり原因だけは突き止めたいと思い、ご質問させていただきました。 %CPU の値は下記の通りです。 また、cronでは夜中2時からpg_dumpをしてそれをtarで圧縮してbackupサーバーにsftpをしておりますが、backupサーバーのファイル更新日時を見ると、朝4時頃には終わっております。 は!これはsftpでコピーし終わった時刻ではないのでしょうか・・・ # ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1364 56 ? S Jun08 0:03 init root 2 0.0 0.0 0 0 ? SW Jun08 0:00 [keventd] root 3 0.0 0.0 0 0 ? SW Jun08 0:00 [kapmd] root 4 0.0 0.0 0 0 ? SWN Jun08 0:00 [ksoftirqd_CPU0] root 9 0.0 0.0 0 0 ? SW Jun08 0:00 [bdflush] root 5 0.0 0.0 0 0 ? SW Jun08 0:02 [kswapd] root 6 0.0 0.0 0 0 ? SW Jun08 0:00 [kscand/DMA] root 7 0.0 0.0 0 0 ? SW Jun08 2:48 [kscand/Normal] root 8 0.0 0.0 0 0 ? SW Jun08 0:00 [kscand/HighMem] root 10 0.0 0.0 0 0 ? SW Jun08 0:00 [kupdated] root 11 0.0 0.0 0 0 ? SW Jun08 0:00 [mdrecoveryd] root 15 0.0 0.0 0 0 ? RW Jun08 0:06 [kjournald] root 72 0.0 0.0 0 0 ? SW Jun08 0:00 [khubd] root 3568 0.0 0.0 0 0 ? SW Jun08 0:00 [kjournald] root 3569 0.0 0.0 0 0 ? SW Jun08 0:13 [kjournald] root 3862 0.0 0.0 1536 136 ? S Jun08 0:00 syslogd -m 0 root 3866 0.0 0.0 1368 4 ? S Jun08 0:00 klogd -x root 3944 0.0 0.0 3508 24 ? S Jun08 0:00 /usr/sbin/sshd root 3958 0.0 0.0 2020 4 ? S Jun08 0:00 xinetd -stayalive root 3967 0.0 0.0 1408 12 ? S Jun08 0:00 gpm -t imps2 -m / wnn 3978 0.0 0.0 5160 0 ? SW Jun08 0:00 [jserver] bin 3987 0.0 0.0 2004 44 ? S Jun08 0:00 [cannaserver] root 3998 0.0 0.0 1428 116 ? S Jun08 0:00 crond root 4009 0.0 0.0 7508 312 ? S Jun08 0:00 cupsd xfs 4073 0.0 0.0 4972 56 ? S Jun08 0:00 [xfs] postgres 4127 0.0 0.0 6376 188 ? S Jun08 0:05 /usr/local/pgsql/ postgres 4128 0.0 0.0 7364 172 ? S Jun08 0:01 postgres: stats b postgres 4129 0.0 0.0 6404 196 ? S Jun08 0:00 postgres: stats c root 4131 0.0 0.0 5144 108 ? S Jun08 0:00 /usr/local/apache root 4132 0.0 0.0 1348 4 tty1 S Jun08 0:00 /sbin/mingetty tt root 4133 0.0 0.0 1348 4 tty2 S Jun08 0:00 /sbin/mingetty tt root 4134 0.0 0.0 1348 4 tty3 S Jun08 0:00 /sbin/mingetty tt root 4135 0.0 0.0 1348 4 tty4 S Jun08 0:00 /sbin/mingetty tt root 4136 0.0 0.0 1348 4 tty5 S Jun08 0:00 /sbin/mingetty tt root 4137 0.0 0.0 1348 4 tty6 S Jun08 0:00 /sbin/mingetty tt nobody 4138 0.0 0.4 6840 4128 ? S Jun08 1:54 [libhttpd.ep] nobody 4139 0.0 0.4 6844 4132 ? S Jun08 2:30 [libhttpd.ep] nobody 4140 0.0 0.3 6984 4100 ? S Jun08 2:13 [libhttpd.ep] nobody 4141 0.0 0.4 6996 4268 ? R Jun08 2:08 [libhttpd.ep] nobody 4142 0.0 0.4 7608 4348 ? S Jun08 2:16 [libhttpd.ep] nobody 4143 0.0 0.3 6704 3652 ? S Jun08 1:56 [libhttpd.ep] nobody 4146 0.0 0.4 7168 4404 ? S Jun08 2:05 [libhttpd.ep] nobody 4147 0.0 0.3 6764 3756 ? S Jun08 1:53 [libhttpd.ep] nobody 4150 0.0 0.4 6928 4184 ? S Jun08 2:00 [libhttpd.ep] nobody 4153 0.0 0.3 6732 3924 ? S Jun08 1:57 [libhttpd.ep] root 2249 0.0 0.0 6804 520 ? S 07:54 0:00 /usr/sbin/sshd root 2259 0.0 0.0 5344 776 pts/0 S 07:54 0:00 -bash postgres 6799 0.0 0.2 6936 2756 ? S 10:56 0:00 postgres: userdev postgres 6805 0.0 0.2 6848 2380 ? S 10:57 0:00 postgres: nobody root 6806 0.0 0.0 2648 700 pts/0 R 10:57 0:00 ps aux | ||||||||||||
|
投稿日時: 2005-06-10 11:27
こんにちは。
メモリやCPUの使用量を見るのであれば、top もお奨めです。cron ジョブ等に組み込むなら、“-b”オプションが良いです。 リアルタイムに top を動作させているなら、各使用量毎のソートもできます。 ※ たしか M でメモリ使用量でのソート … 詳しくは top 実行中に ? を。 あと、少しツッコミなのですが、引数無し vmstat の出力は、マシン起動時からの平均値ですから、インタバル等の引数をつけて、2行目以降のリアルタイムの数値も見た方が良いですよ。( “vmstat 1 2” とか、“vmstat 2”とか… ) …で、free の出力を見る限りでは、1GB のメモリに対して 30MB のスワップ使用は、特に問題ないと思いますが…。問題発生時のスワップ使用量はどうでしょうか。 ps の出力結果からも kscand と libhttpd.ep が元凶かどうかは判断し辛いですし。 ※ トータルCPU時間ではなく、問題発生時のCPU使用率で見た方が良いと思いますよ。 以上、ご参考まで。 | ||||||||||||
|
投稿日時: 2005-06-10 12:07
はじめまして。
提供された情報からですと、特に問題ないと思われます。 Linux系の free コマンドによるメモリの空き容量は、 free + buffers + cached になります。 つまり、ディスクの入出力を軽減するために、 バッファ、キャッシュをかなり使用するものです。 スワップ領域はメモリ容量に関係なく使用されるものですので、 むしろ、安定したスワップ使用が確認されるのであれば、 正しくシステムが稼動していると考えられるのではないでしょうか? もし特定プロセス (httpd?) のメモリ使用量に問題があるのでしたら、 httpd.conf の MaxRequestsPerChild あたりを疑ってみてもいいかもしれませんね。 以上の内容がはずしていましたら、すいません。 | ||||||||||||
|
投稿日時: 2005-06-10 12:50
時間はプロセス起動以来の積算ですので、減ることはありません。 swapアウトされたままということは、動かなくてもいい・必要とされていない、 ということになりますが...
とりあえず、ファイルキャッシュの使用量が目立ちますね。 「設計時の予想以上に多い」のか「予定通りの動作」なのか、 これだけではなんともわかりませんが。 スワップを使っていいかどうかという点については... パフォーマンスを問題とする場合、少量でも使ってしまったら負け、 という見方もアリです。
これまでの情報から考えると、これが原因でしょうね。 | ||||||||||||
|
投稿日時: 2005-06-10 13:59
ご返信ありがとうございます。
例えばsftpのshellスクリプトの最後でapacheをrestartしてみて朝のパフォーマンスが回復すれば、これが原因と考えられますでしょうか。もしくは思い切ってサーバー再起動でもいいです。 | ||||||||||||
|
投稿日時: 2005-06-10 14:20
そういえば…。
PostgreSQL を使っているのであれば、定期的な vacuum ってのもありましたね…。 |