Linux系OSでTomcatのチューニングをしてみた。

 

<状況>

・CPU 余裕あり

・メモリ 余裕あり

・スワッピング 多発

 

<ボトルネック箇所の特定>

・外部に対してHTTP通信をし、戻ってくるまでの間で極端に遅い。

・一度に処理する件数が多くなるほど遅くなる。

 

1件づつのリクエストのレスポンスに2秒、リクエストが集中すると8秒~40秒くらいレスポンスがかかるようになっていた。

 

TomcatではHttpで授受するデータのバッファがデフォルトで2048バイトである。しかし、外部からの要求で返すデータ長は1件でも2048バイトを超える。ここでスワッピングが起こっているのが原因ではないか、と推定した。

 

Tomcatの設定ファイルである server.xml のパラメータを調べ Connector の bufferSize を大きく取った。

 

その結果。

レスポンスは、すべて1秒前後で戻るようになった。

 

ただ、これだけがすべてではない。他の観点からも「処理の高速化」を検討したい。

 

好きな焼き肉は? ブログネタ:好きな焼き肉は? 参加中
 
子供の頃、家で焼肉をしたときはレバーが好きだった。大人になってカルビやらロースやら食べたが、友達の引越しを手伝った後にごちそうになったときハマったのがハラミ。引越しの手伝いで疲れていたせいか、他の部位よりうまかった。
 
外では、炭火で焼いた肉は旨かった。そのときに焼肉の他に焼き鳥も炭火だったのだが、肉がよかったのか焼き方が上手かったのか、感動的に旨かった。
 
お店で食べた肉でなら、一年ほど前に知り合いが指定して行った「くにもと」だ。浜松町にあるのだが、淡路牛。牛は確か「育った期間が長い地域」だったか「生後何ヶ月以降で育った期間が長い地域」だったかで、少なくともその牛が生まれた地域、であるとは限らない。淡路は松阪牛、但馬牛というブランド牛の仔牛が育つ地域のひとつだ。
淡路島は戦争中でも食べるものに困らなかったという「富の島」だと聞いた。実際、育ちは違うが、両親が老後を過ごすために引っ越した淡路島は何を食べても旨い!というのが感想である。神戸の人ならこういう旨いものが目の前にあるんだな、と思うと、非常にうらやましい。
 
話がそれたが、淡路牛の焼肉は旨い!ので大好きである。

現在メンテナンスしているJavaのボトルネックは特定の一行であることが分かった。

しかし、その処理がボトルネックになるような情報はほとんどない。

 

で、Tomcatの設定を見てみる。といってもどんな事が設定できるかなんてロクに知らない。ネットで調べながらだ。

さて、Tomcatの設定項目を一通り読んで、ピンときた。なあんだ、汎用機とあまり変わらないじゃないか、と。

 

その昔、大型汎用機のCOBOLのバッチプログラムを動作させるため、ジョブ制御言語(JCL : Job Control Language)を使っていたが、その中で「プログラムに割り当てるメモリ量」「入出力のファイルサイズ」などを指定する必要があった。データベースでも、IBMの汎用機上のDB2のDDL(SQLのうち、テーブル定義とかの部類のほう)では容量などを記載するパラメータがあった。

UNIX系は詳しくないので知らないが、Windowsではそのようなメモリやら容量は意識しなくて済むようになっている。反面、もしメモリやCPUをバカ食いするようなルール無用?のアプリがあったならたちまち全体に影響を与えてしまう。

 

本題に戻る。Tomcatは「私に任せればJavaのプログラムが使う資源を制限できます」というシロモノではないのか、なら少なくともJCLで書いていたようなことは設定できるはずだ、と考えるに至ったわけだ。

そう考えればTomcatでのそれぞれの設定項目も急に親しみが湧いてきた。

 

あとはボトルネックになっているだろう点を見つけ出し、適切な値を設定してやれば済むはず。

 

ここまで書いておいて「見当違い」だったらどうしよう。次回の更新には吉報を知らせられると良いなと思う。