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/ <=最後の/は必須

  • n 数値 総リクエスト数
  • c 数値 同時リクエスト数

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が消費したメモリ量に対応して発生するため制御しづらい

GCの動き

  • Xmx ヒープ領域全体
  • Xmn NEW領域

ヒップ領域-> NEW領域,OLD領域
NEW領域-> Eden,Survivor
Survivor=> s0,s1

に分かれる

JVMのチューニングポイント

FullGCをなるべく発生させない
Scavenge 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"