JMeter

  • SSLを利用するサイトでHTTPプロキシサーバを利用したい場合
    • 解決策1
      • 「Attempt HTTPS Spoofing」をチェックし、httpでアクセスするとプロキシサーバと対象のサイト間がHTTPS通信になります。ただし、https://・・・で書かれたリンクの場合や、httpsサイトにリダイレクトされた場合は、プロキシを経由しませんのでエラーとなります。
    • 解決策2
      • badboyというツールを使います。badboyは起動して録画ボタン「●」を押してブラウザを操作することによって、リクエストをキャプチャしてくれます。SSLに対応できているのはブラウザがバンドルされていることならではですね。
      • このツールのすごいところは、jmeter形式でexportができることです。exportしたjmxファイルをjmeterに取り込めば、後はThread数を設定することによって測定することができます。
  • スレッドプロパティ
    • Ramp-Up期間とはすべてのスレッドが実行されるまでの時間を表す。
    • 例えば、Ramp-Upが60秒。スレッド数が5の場合は、12秒おきに1スレッドが実行されるということ。
    • ループ回数は1つのThreadが終わった後に後続して何回ループするかを表す。
    • 参考

tomcat6チューニング

  • HTTPとAJPのコネクタで設定できるものとデフォルト値が異なるので注意が必要
  • 【AJP13】Thread関連 主要なものだけ。
    • maxThreads
      • リクエスト処理スレッドの最大個数。デフォルトは40
    • connectionTimeout
      • デフォルトはTimeoutしない。
    • keepAliveTimeout
      • 接続を閉じる前に別の HTTP リクエストを待つミリ秒数。 デフォルト値は connectionTimeout 属性にセットされた値が使われる。
    • secure
      • Cookieのsecure属性をtrueにする。
    • enableLookups
      • request.getRemoteHost()で名前が引けるようにする。デフォルトはtrue。利用しなければfalseにしておく。
    • 参考

tomcat4チューニング

  • Thread関連
    • maxProcessors
      • このコネクタによって生成されるリクエスト処理スレッドの最大数を指定します。デフォルトは 20 です。
    • minProcessors
      • このコネクタが最初に生成するリクエスト処理スレッド数を指定します。デフォルトは 5 です。
    • enableLookups
      • DNSルックアップを利用するかどうかを指定します。これを利用するとサーブレットコンテナのパフォーマンスが落ちるのでなるべくならfalse(デフォルト)にする。
    • connectionTimeout
      • コネクションのタイムアウト値を設定する。デフォルト値は60000(60秒)。
    • 参考

apacheチューニング

  • abコマンド
    • abコマンドはベンチマークを簡単に取るために用意されたツールです。

ab -n 100 -c 10 http://xxx.xxx.xxx.xxx/index.html

  • n テストで発行するリクエストの回数を数値で指定
  • c テストで同時に発行するリクエストの数を数値で指定
  • プロセス関連
    • Timeout【core】
      • リクエスト待ち時間。秒単位で指定する。デフォルトは300秒。
    • MPM
      • どのMPMが使われているかを調べる。

httpd -l (Unix系OSの場合)
httpd.exe -l (Winの場合)

    • StartServers【prefork,worker】
      • Apache 起動時に立ち上げるhttpdの数の設定。MinSpareServers と同一の値を設定しておくと良さそう。
    • MinSpareServers【worker】
      • あらかじめ待機させておく httpd の最少数。Apache は定期的に httpd の起動プロセス数を監視し、この値を下回っていた場合は自動的に httpd が起動される。
    • MaxSpareServers【worker】
      • あらかじめ待機させておく httpd の最大数。Apache は定期的に httpd の起動プロセス数を監視し、この値を上回っていた場合は自動的に httpd が停止される。
    • ThreadLimit【mpm_winnt,worker】
      • Apache プロセス稼働中における ThreadsPerChild に設定可能な上限値。デフォルト値は mpm_winnt のときは 1920 で、 他の場合は 64
    • ThreadsPerChild【mpm_winnt,worker】
      • Apacheが提供するWebページが同時に処理できるヒット数を指定する。mpm_winntでの ThreadsPerChild のデフォルト値は 64 で、他の場合は 25 。
    • MaxRequestsPerChild【mpm_winnt,prefork,worker】
      • MaxRequestsPerChild ディレクティブは、 個々の子サーバプロセスが扱うことのできるリクエストの制限数を設定します。MaxRequestsPerChild 個のリクエストの後に、子プロセスは終了します。 MaxRequestsPerChild が 0 に設定されている場合は、プロセスは期限切れにより終了することはありません。
      • mpm_netware と mpm_winnt でのデフォルト値は 0 です。
      • KeepAlive リクエストの場合は、 一つ目のリクエストだけがこの制限に該当します。 実効的には、一つの子プロセスあたりのコネクション数を 制限するように挙動が変化します。

マルチプロセスで動作させるApacheで、リクエストに
比例してプロセスを増大させてサーバのリソース食いつぶさないように上限を設ける
ためのもの、とかじゃないでしょうか。
あくまでプロセスの再生成は、ApacheやOSが落ちてしまってダウンタイムが長く
なってしまうための安全措置であって、これが起きたら設定の変更を検討する必要が
あるんじゃないかと思います。
MaxRequestsPerChild制限による子プロセスの再生成時のエラーについて

    • ThreadsPerChildとMaxRequestPerChild
      • こちらの説明が参考になります。
  • KeepAlive関連
    • KeepAlive[core]
      • On or Off HTTPのデフォルトの動作はリクエストのたびに新しい接続を作成するので、リクエスト単位でTCP接続のオープン/クローズを行うオーバーヘッドが発生する。KeepAliveを有効にすると、1つの接続で複数の要求を実現することが可能になり、TCP接続を確立するために費やす時間を削減できる。
    • KeepAliveTimeout[core]
      • 接続の持続を切断するまでの時間。デフォルトは15。20とすると、20秒間TCP接続が確保される。
    • MaxKeepAliveRequests[core]
      • 接続の持続させる(KeepAlive)最大リクエスト数。デフォルトは100。大きな値を設定すると一度に処理するリクエストの数が増えるが、他の接続が割り込むタイミングが遅れる。平均ファイル数+αの値を指定すると良いとされる。
    • 参考URL

Webアプリケーションメモ

セッション管理

  • IE6
    • セッションはプロセス単位で共有。新規ウィンドウで開いても同じプロセスで動く
  • IE7
    • IE6と同様。タブの場合も同じプロセスで起動
  • IE8
    • タブの場合は別プロセスとして起動する。IE8でセッションを共有しない新しいウィンドウを開きたい場合は、「ファイル」→「新規セッション」でウィンドウを開く

SQLServerメモ

  • データベースロック
    • 行ロックの利点
      • 多数のスレッド内の異なったレコードにアクセスする際にロックの競合が少ない。
      • ロールバックの変更が少ない。
      • 単一レコードを長時間ロックすることができる。
    • 行ロックの欠点
      • ページレベルロックまたはテーブルロックよりも多くのメモリを消費する。
      • テーブルの広範囲で実行する場合、多数のロックが必要になるため、ページレベルロックまたはテーブルロックよりも処理速度が低下する。
      • テーブル全体を頻繁にスキャンする必要がある場合、他のロックよりも明らかに効率が悪化する。
    • テーブルロックの方が適している場面
      • 大部分が読み込み
    • OracleでいうForUpdateNowaitはどうやるの?
SELECT * FROM [テーブル名] WITH (UPDLOCK) [WHERE 〜]
      • ロック待ちしたくない場合はNOWAITをつける。
SELECT * FROM [テーブル名] WITH (UPDLOCK,NOWAIT) [WHERE 〜]
行バージョン管理を使用した分離レベルを利用しないことで、不必要な tempdb への書き込みを行わず、最高のパフォーマンスで提供することができます。
また、昼間のオンライン処理で同時実行性を考慮する必要がある時間帯では、tempdb の書き込みによるオーバーヘッドは伴いますが、優れた同時実行性を提供する行バージョン管理を使用した分離レベルを使用することでロック待機は減少し、全体的なスループットが向上します。
via)http://www.microsoft.com/japan/sqlserver/2005/facts/compare/03.mspx

バッチ処理に関するメモ

  • 気になる問題
    • バッチ処理で別プロジェクトを作成するのか?
      • 使いたいビジネスロジックはWebアプリ側にあった場合に上手く再利用したい。
      • →逆の問題点として、Webアプリのソースを変更した場合のバッチへの影響
  • ロック処理