2004年5月26日水曜日

あるWebアプリケーション

Windows2003上の、とあるWebアプリケーションの性能が出ないと言う話がありちょっと調べた。

【作りの面】
1a)CGIとして動いている。
1b)CGIとして呼ばれるバイナリサイズが3MBを越えている。
1c)すべてのページを一つのCGIで制御している。(ページ遷移後も同じCGI)
1d)セッションをCGIの引数またはcookieで持っている(ようである)。
1e)複数人で20MB以上の大きなファイルを共有している。
1f)複数人で大きなファイルに排他をかけながら読み書きしている。
1g)大きなファイルはRDBなどではない。
1i)しかし、その予備ファイルは本体ファイルと同じディレクトリに書いている。
1j)つまり、対故障性とかファイルI/O負荷分散はあまり考えていなさそう。
1k)まともなアプリケーションログが全く吐かれない。
1l)各種パラメータ(例えばCGIでのファイルアクセスタイムアウト値)がハードコーディングされていて、容易に変更できない。

【動きの面】
2a)ファイルに変更があると、全体を書き換えているようである。
2b)複数人で大きなファイルに排他をかけながら読み書きしているようである。
2c)Windowsが悪いのか、IISがわるいのか、CGIでのopen()がおかしいのか、共有ファイルの読みだし時にもやたら遅い。(妙に排他している?)
2d)リッチな4CPU構成のサーバなんだけど、CPU使用率はあまり上がらない。
2e)この作りと状況ならファイルI/Oネックのようなんだけど、さりとて試しに相当高速なディスク(1Gbit-FC,8HDD-RAID0+1,cache2GB)に替えても、やはりさばけない。
2f)メモリも4GBほど積んでいるけど、2GB未満の使用率。
2g)つまり、誰がどこでさぼっているのか良くわからない(^^;。勝手ににらめっこしてsleep?

【試しに...】
同じサーバ、同じRAID装置、同じユーザ数、同じデータファイル(Windows環境からコピー)、
同じネットワーク環境、同じユーザでの使用状況で
WebアプリだけWindows版からLinux版に変更し、OSをWindows2003からLinux-RH-AS2.1に変えてみた。
Linux版もApacheから呼ばれるCGIとして動いている。

【そして...】
なんだか、ピーク時も劇的に速くなった。
(多くのアクセスがあるも、さばけることにより糞詰まりが無いので、ピークがあまり高くならすに、良い循環になっているとも言える。)

これをもってWindows2003が遅くて、Linuxが速いと言うつもりではない。

該Webアプリケーションの作りがもともとしょぼい上に、Windowsの特性を理解した作りになっていないのではないかと思われる。
これで「どんな動作環境」でも「最大のパフォーマンス」「軽量高速」をうたわれては困ると言うものだ(^^;

0 件のコメント:

コメントを投稿