Apache、Tomcatのチューニング
チューニング方法はメモリとインデックスしかない
・メモリ 32bit,64bit
64bitだとメモリの消費量が高いとされて実際高い
・PAE
32bitで4GiB以上のメモリを使う技術
Apache チューニング
1.HostnameLookups -> off
これがonだと、ログファイルにホスト名を出力するためDNSLookupしてしまう
2.無駄なログファイルを消す
ローテートする
3.無駄なモジュールをロードしない
4..htaccessを無効にする
※アクセスのたびにソンァイチェックをおこなうのでパフォーマンスが劣化する
※AllowOverride -> None
5.KeepAlive -> off
※HTTPはステートフルな接続のためリクエストのたびに接続切断が発生するためコストがかかる
※LBに格納されている場合あまり意味がない
6.MNM(Multi Proccessing Module)の選定
※preforkとworker
prefork 1リクエスト 1プロセス
-> mod_phpなどを使う場合はprework
worker 1リクエスト 1スレッド
-> マルチプロセス + マルチスレッド ハイブリッドモデル
-> プロセス数 * スレッド数 = Max Client
-> 1つのプロセスを立ち上げるよりも1つのスレッドを立ち上げる方が負荷が低い
7.無駄にプロセス起動、プロセスkillさせない
※以下の値を均等に保つ
※MaxRequestsPerChild 4000 を超えてもその対象のプロセスのみが終了->起動するだけ
StartServers 60
MinSpareServers 60
MaxSpareServers 60
MaxClients 60
※MPMがworkerの場合
ThreadsPerChild 25 × スレッド数 = MaxClients
ab
単純なストレスツール
#ab -n 1000 -c 100 http://192.168.0.50/ <=最後の/は必須
Requests per second: 4270.68 [#/sec] (mean) <=1秒あたりのリクエスト回数
※スループットがこれ
tomcat
1.connectorの選択
※AJPかHTTP 汎用性の高いHTTPを使った方が無難
2.スレッドのパラメータ
maxThreads
minSpareTHreads
connentonTimeout
※基本はデフォルトで
3.不要なログを出さない
4.enableLookups -> off
vm
GCの利点
1.メモリリークを防ぐ
2.ダブルフリーを防ぐ
3.無効なポインタ参照を防ぐ
GCの欠点
1.FullGCの発生時にすべてのスレッドが停止する
2.GCが消費したメモリ量に対応して発生するため制御しづらい
JConsole
※JMX(java management Extensions)を有効に
s0,s1がいっぱいだとEdenから直接OLDにいく
これだとFullGCでしか消せない
全体領域だけでなくNEWフィールドも増やす
起動パラメータに追加
CATALINA_OPTS="${CATALINA_OPTS}
- Dcom.sun.management.jmxremote=true
- Dcom.sun.management.jmxremote.port=3337
- Dcom.sun.management.jmxremote.authenticate=false
- Dcom.sun.management.jmxremote.ssl=false"