始める前に
負荷がかかった状態の Session Initiation Protocol (SIP) サーブレットは、
メッセージを再送信するか、または呼び出しを取り止める場合があります。
UDP ソケット・キューがいっぱいになっている可能性があります。
冗長ガーベッジ・コレクション出力の検討結果は、
かなり長時間のガーベッジ・コレクションが行われていることを示しています (例えば、0.5 秒から 1.5 秒)。
この問題の原因は、
イーサネット・ドライバー、Linux® オペレーティング・システム、WebSphere® Application Server、
またはこれらの項目の組み合わせが、SIP アプリケーション用にチューニングされていないことにあります。
以下のレベルのチューニングを適用することができます。
注:
以下の推奨事項は、Red Hat Enterprise Linux 4 でのみテストされており、現状のまま提供され、いかなる黙示の保証もありません。
このタスクについて
Linux イーサネット・ドライバー
Linux イーサネット・ドライバーのチューニングは、最適なイーサネット・ドライバーを選択することで開始されます。
例えば、HS20 ブレード用の推奨ドライバーは、
tg3-3.43b ドライバー (またはそれ以降) で、
Broadcom Ethernet NIC Driver Downloads の Web サイトにあります。
以下のシェル・コマンドは、
Linux カーネルのイーサネット・ドライバーのチューニングに使用されています。
/sbin/ifconfig eth0 txqueuelen 2000
/sbin/ifconfig eth1 txqueuelen 2000
ethtool -s eth0 autoneg off speed 1000 duplex full
ethtool -A eth0 autoneg off rx on tx on
ethtool -C eth0 adaptive-rx off adaptive-tx off rx-
usecs 20 rx-frames 5 tx-usecs 60 tx-frames 11
ethtool -G eth0 rx 511 rx-jumbo 255 tx 511
インストールされているイーサネット・ドライバーに応じて、これらのオプションの一部を変更しなければならない場合があります。
Linux kernel
Linux カーネルのチューニングには、以下のコマンドを使用します。
echo 1048576 > /proc/sys/net/core/rmem_max
echo 1048576 > /proc/sys/net/core/rmem_default
echo 1048576 > /proc/sys/net/core/wmem_max
echo 1048576 > /proc/sys/net/core/wmem_default
echo 10000000 > /proc/sys/net/core/optmem_max
echo 262143 262143 262143 > /proc/sys/net/ipv4/tcp_rmem
echo 262143 262143 262143 > /proc/sys/net/ipv4/tcp_wmem
echo 8388608 8388608 8388608 > /proc/sys/net/ipv4/tcp_mem
echo 400 > /proc/sys/net/unix/max_dgram_qlen
echo 400 > /proc/sys/net/core/message_burst
echo 2800 > /proc/sys/net/core/mod_cong
echo 1000 > /proc/sys/net/core/lo_cong
echo 200 > /proc/sys/net/core/no_cong
echo 2900 > /proc/sys/net/core/no_cong_thresh
echo 3000 > /proc/sys/net/core/netdev_max_backlog
この構成は、指定されたアプリケーションには最適でない可能性があり、
最良のパフォーマンスを得るためには構成を調整しなければならない場合があります。
しかし、これらの値は、開始点として使用することができます。
WebSphere
Application Server 用の SIP
WebSphere Application
Server 用の SIP チューニングは、以下のステップを使用して完了することができます。
- SIP サーブレット・コンテナー用に別個のスレッド・プールを作成します。管理コンソールで以下のパスに従います。
- をクリックします。
- 「追加プロパティー」の下で、をクリックします。
- 「名前」フィールドに、SipContainer を入力します。
- 「最小サイズ」フィールドと「最大サイズ」フィールドに、
15 を入力します。
これらの値は、ほとんどのアプリケーションに適切であるはずです。
- 「」をクリックします。
- SIP サーブレット・コンテナー用のカスタム・プロパティーを作成します。管理コンソールで以下のパスに従います。
- をクリックします。
- をクリックします。
- の下で、
をクリックします。
- 「名前」フィールドに、javax.sip.max.object.pool.size を入力します。
- 「値」フィールドに、1000 を入力します。
- 「」をクリックします。
- 「名前」フィールドに、max.tu.pool.size を入力します。
- 「値」フィールドに、1000 を入力します。
- 「」をクリックします。
- ユーザー・データグラム・プロトコル
(UDP) が SIP トラフィックのプライマリー・トランスポートの場合は、SIPUDP チャネル用のカスタム・プロパティーを作成します。管理コンソールで以下のパスに従います。
- をクリックします。
- をクリックします。
- の下で、
をクリックします。
- 「名前」フィールドに、receiveBufferSocketSize を入力します。
- 「値」フィールドに、3000000 を入力します。
- 「OK」 をクリックします。
- 「名前」フィールドに、sendBufferSocketSize を入力します。
- 「値」フィールドに、3000000 を入力します。
- SIP サーブレット・コンテナーの一般プロパティーを指定します。管理コンソールで以下のパスに従います。
- をクリックします。
- 最大アプリケーション・セッション値を入力します。最大アプリケーション・セッション値は、
次の式で計算できます。
最大コール保持時間またはセッション・タイムアウト x コール・レート x 安全係数
- 最大メッセージ数/平均期間の値を入力します。最大メッセージ数/平均期間の値は、
次の式で計算できます。
最大コール保持時間またはセッション・タイムアウト x SIP メッセージの最大レート x 安全係数
- 最大ディスパッチング・キュー・サイズ値を入力します。
最大ディスパッチング・キュー・サイズ値は、次の式で計算できます。
SIP メッセージの最大レート x SIP 処理における最大待ち時間 x 安全係数
- スレッド・プールを新規に作成された SIP コンテナーのスレッド・プールに (ドロップダウン名の「SipContainer」に) 設定します。
- Java 仮想マシン (JVM) のガーベッジ・コレクション・ポリシーをチューニングします。管理コンソールで以下のパスに従います。
- をクリックします。
- 「サーバー・インフラストラクチャー」の下で、
をクリックします。
- 「Control」をクリックします。
- の下で、
をクリックします。
- 「汎用 JVM 引数」フィールドに、以下の値を連続した 1 行として入力します。
1"-Xgcpolicy:gencon -Xgc:scvNoAdaptiveTenure,scvTenureAge=8,
stdGlobalCompactToSatisfyAllocate"
オプション: また、
768 の値を「初期ヒープ・サイズ」フィールドと「最大ヒープ・サイズ」フィールドに追加することも可能です。
また、パフォーマンス・テストやチューニング・オペレーション中は、
オプションを有効にするのもよいことです。