- - PR -
apacheが遅い原因(libhttpd.ep?)
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-06-16 15:20
いや、そう言われても現に常時10〜20個のプロセスが「b」の欄に 出ているわけで... ここで、bは "The number of processes in uninterruptible sleep." で、 Linuxのプロセス管理上、uninterruptible sleep とは I/O 待ちを しているプロセスが入る状態です。 # 文字通りの意味は「割り込み不可」ということですが、 # 実質的にはI/O待ち。 ディスクの性能は... 長い話になるかも。 こんなプログラムを書いてみました。
第1引数のファイルを第2引数のファイルにコピーするものです。 エラーチェック等を一切行っていないので実用には耐えませんが、 ディスクの性能ってどんなもの?という感覚をつかむのには 使えると思います。 このプログラムを使って、Xeon 2.8GHz + 2.5インチ5400回転HDD という構成のマシンで16MBのファイルをコピーすると1分半ほど かかりました。CPU使用率はvmstatでみると1か0が表示されます。 大部分は1でした。 ハードウェア構成によって、かなり違ってくるものではありますが。 CPUが遅くてディスクが速いマシンだと、CPU使用率が何十%かに なることもあるでしょう。 腰が抜けるほど遅いのはちょっと細工をしてあるからですが、 無意味に休んでいるわけではありません。スワップの際にも これと似たようなことがあるはず。 <font size=-1>[ メッセージ編集済み 編集者: ぽんす 編集日時 2005-06-16 15:24 ] </font> [ メッセージ編集済み 編集者: ぽんす 編集日時 2005-06-16 15:35 ] | ||||||||||||
|
投稿日時: 2005-06-16 16:03
今度はスクリプトの中の vacuum をやめ、tarとsftpだけにして明日の朝を迎えてみようと思います。
もしこれで早くなればtarとsftpは白で postgreSQL が問題であることがわかります。 素人戦術ですがやってみます。 | ||||||||||||
|
投稿日時: 2005-06-16 16:19
こんにちは。
これは、SQLクエリーの結果を待っている Apache がいるからでしょう。 これだけでは、スラッシングの問題なのか、Postgres が単にロックしているからかは区別できないと思います。 では、何故スラッシングの問題では無いと考えたかというと…、次のコマンド結果が出てきたからです。vmstat 10 でスラッシングの様子を取ったものです。 スラッシングしつつも、CPU に全く遊びが無いのが分かります。
なお、環境は Fedora Core 2 を積んだ Windows ME時代のノートPC、Celeron550Mhz + 192MBメモリですから、McLarenさんのマシンよりかなり貧弱だと思います。 ※ディスクがガリガリ言い放しで、気分のいいものでは無かったです… ちなみに
こちらに関しては、vmstat で目安はつけられるかと。巨大ファイルをただ読み込む/書き込むプロセスを実行して、vmstat で bi/bo を計測する、という方法で。 in もしくは out に専念した場合は、上記マシンで転送速度 10MB/s でした。 ( 試しに職場のテスト用サーバ〜RAID無しSCSI〜で試したら 30MB/s を出していました ) 以上、ご参考まで。 | ||||||||||||
|
投稿日時: 2005-06-16 21:46
それならただのsleepです。uninterruptible sleep にはなりません。
CPU使用率の97%がuserです。常時runqにプロセスが溜まってますし。 ユーザランドでひたすら処理が行われていますから、I/Oで 待っているわけではありません。 多数のプロセスがイベントの待ち合わせをポーリングでやってたり するのかな?と一瞬思いましたが、CSの値がたいして大きくない ところをみると、実行権を獲得した後すぐに自発的に手放す、 という動作ではないですね。ビジーウェイトでもしているのでわ。
それは非同期でのシーケンシャルアクセスを測っているだけです。 問題はそこではありません。 さきに示したプログラムを使うと、通常のcpコマンドの50倍〜100倍 くらいの時間がかかるのがわかるはずなのですが... # write on cache になっていると違いますが。 |