tomcat6チューニング
- HTTPとAJPのコネクタで設定できるものとデフォルト値が異なるので注意が必要
- 【AJP13】Thread関連 主要なものだけ。
tomcat4チューニング
apacheチューニング
- abコマンド
- abコマンドはベンチマークを簡単に取るために用意されたツールです。
ab -n 100 -c 10 http://xxx.xxx.xxx.xxx/index.html
-
-
- 詳しくはこちらApacheパフォーマンスチューニングのポイント
-
- プロセス関連
- Timeout【core】
- リクエスト待ち時間。秒単位で指定する。デフォルトは300秒。
- Timeout【core】
-
- MPM
- どのMPMが使われているかを調べる。
- MPM
-
- 参考
- 【】内は設定できるmpmについて記載しています。
-
- ThreadLimit【mpm_winnt,worker】
- Apache プロセス稼働中における ThreadsPerChild に設定可能な上限値。デフォルト値は mpm_winnt のときは 1920 で、 他の場合は 64
- ThreadLimit【mpm_winnt,worker】
-
- ThreadsPerChild【mpm_winnt,worker】
- Apacheが提供するWebページが同時に処理できるヒット数を指定する。mpm_winntでの ThreadsPerChild のデフォルト値は 64 で、他の場合は 25 。
- ThreadsPerChild【mpm_winnt,worker】
-
- MaxRequestsPerChild【mpm_winnt,prefork,worker】
- MaxRequestsPerChild ディレクティブは、 個々の子サーバプロセスが扱うことのできるリクエストの制限数を設定します。MaxRequestsPerChild 個のリクエストの後に、子プロセスは終了します。 MaxRequestsPerChild が 0 に設定されている場合は、プロセスは期限切れにより終了することはありません。
- mpm_netware と mpm_winnt でのデフォルト値は 0 です。
- KeepAlive リクエストの場合は、 一つ目のリクエストだけがこの制限に該当します。 実効的には、一つの子プロセスあたりのコネクション数を 制限するように挙動が変化します。
- MaxRequestsPerChild【mpm_winnt,prefork,worker】
マルチプロセスで動作させるApacheで、リクエストに
比例してプロセスを増大させてサーバのリソース食いつぶさないように上限を設ける
ためのもの、とかじゃないでしょうか。
あくまでプロセスの再生成は、ApacheやOSが落ちてしまってダウンタイムが長く
なってしまうための安全措置であって、これが起きたら設定の変更を検討する必要が
あるんじゃないかと思います。
MaxRequestsPerChild制限による子プロセスの再生成時のエラーについて
-
- ThreadsPerChildとMaxRequestPerChild
- こちらの説明が参考になります。
- ThreadsPerChildとMaxRequestPerChild
- KeepAlive関連
- KeepAlive[core]
- KeepAliveTimeout[core]
- 接続の持続を切断するまでの時間。デフォルトは15。20とすると、20秒間TCP接続が確保される。
- MaxKeepAliveRequests[core]
- 参考URL
Webアプリケーションメモ
セッション管理
- IE6
- セッションはプロセス単位で共有。新規ウィンドウで開いても同じプロセスで動く
- IE7
- IE6と同様。タブの場合も同じプロセスで起動
- IE8
- タブの場合は別プロセスとして起動する。IE8でセッションを共有しない新しいウィンドウを開きたい場合は、「ファイル」→「新規セッション」でウィンドウを開く
SQLServerメモ
- データベースロック
- 行ロックの利点
- 多数のスレッド内の異なったレコードにアクセスする際にロックの競合が少ない。
- ロールバックの変更が少ない。
- 単一レコードを長時間ロックすることができる。
- 行ロックの欠点
- ページレベルロックまたはテーブルロックよりも多くのメモリを消費する。
- テーブルの広範囲で実行する場合、多数のロックが必要になるため、ページレベルロックまたはテーブルロックよりも処理速度が低下する。
- テーブル全体を頻繁にスキャンする必要がある場合、他のロックよりも明らかに効率が悪化する。
- テーブルロックの方が適している場面
- 大部分が読み込み
- 行ロックの利点
-
- OracleでいうForUpdateNowaitはどうやるの?
SELECT * FROM [テーブル名] WITH (UPDLOCK) [WHERE 〜]
-
-
- ロック待ちしたくない場合はNOWAITをつける。
-
SELECT * FROM [テーブル名] WITH (UPDLOCK,NOWAIT) [WHERE 〜]
-
-
- TODO〜For Update nowaitは書けないのか??
- トランザクション分離レベル
-
行バージョン管理を使用した分離レベルを利用しないことで、不必要な tempdb への書き込みを行わず、最高のパフォーマンスで提供することができます。 また、昼間のオンライン処理で同時実行性を考慮する必要がある時間帯では、tempdb の書き込みによるオーバーヘッドは伴いますが、優れた同時実行性を提供する行バージョン管理を使用した分離レベルを使用することでロック待機は減少し、全体的なスループットが向上します。 via)http://www.microsoft.com/japan/sqlserver/2005/facts/compare/03.mspx
- テーブルスキャンによるロック待ち
- フルスキャンをかけるとロックしてしまうようだ。ロックエスカレーションとは異なる。
- 解決策のひとつとして。行のバージョン管理に基づく分離レベルの有効化
- フルスキャンをかけるとロックしてしまうようだ。ロックエスカレーションとは異なる。
- JDBC Driver
バッチ処理に関するメモ
- 起動方法について
- Unix/Linux
- cron,atコマンド
- Windows
- タスクスケジューラ,atコマンド
- http://q.hatena.ne.jp/1126674832
- JP1
- Unix/Linux
- 良くあるバッチ処理(CSV読み込み)
- ヘッダあり/なし、文字コード、カンマを文字として扱うか?、"(ダブルクォート)の扱い、改行コードの扱いに注意しよう
- StringTokenizer
- String#split
- 参考
- S2CSV(http://s2csv.sandbox.seasar.org/index.html) 読込→Validate、オブジェクトへの変換は一番すっきりする形。
- 良くあるバッチ処理(XML読込)
- 気になる問題
- ロック処理
- 表ロックでも、行ロックでもどっちでもいい。表ロックの場合は同時実行性が犠牲になるので並列実行が無い場合であれば表ロックは選択肢としてあり。
- http://www.oracle.co.jp/forum/thread.jspa?threadID=8008927&tstart=3992