JBOSSチューニング
4191 ワード
一.JBOSSの最大接続数を調整する.
deploy/jboss-webを構成します.deployer/server.xmlファイル
maxThreads:最大同時処理接続数を表します.スレッド数(最大スレッド数)を最大予想負荷(同時クリック)より25%多く設定する必要があります(経験ルール).acceptCount:同時に接続された人数がmaxThreadsに達した場合、キューに並んだ接続を受信することもできます.
minSpareThread:「起動後、常にその数のスレッドをアイドル状態で待機する」こと.予想される負荷より25%多く設定します.
maxSpareThread:「minSpareThreadを超えると、スレッドの空き待ち時間が常に維持される」ことを意味します.予想される負荷より25%多く設定します.
ここでは主に2つのパラメータmaxThreadsとacceptCountの値を変更します.maxThreadsを増加させ、acceptCount値を減少させることは、システムの応答時間を短縮するのに有利である.しかし、maxThreadsとacceptCountの合計最高値は6000を超えず、maxThreadsが大会を過ぎてCPUとメモリ消費を増加させるため、低構成ユーザーはmaxThreadsを低減し、同時にacceptCount値を大きくすることでシステムの安定性を保証することができる.
コンカレント数
サーバメモリ
jbossパラメータ
maxThreads
acceptCount
50以下
2G
256
800
50-300
4G
600
1024
300-800
8G
1024
1528
800-1000
8G
1024
2048
1000-1200
12G
1526
2048
1200-1500
16G
2048
2048
二.jvmパラメータの調整
A:JVM起動パラメータは3種類に分けられます.1つは標準パラメータ(-)で、すべてのJVM実装はこれらのパラメータの機能を実現しなければならず、後方互換性があります.二つ目は非標準パラメータ(-X)であり、JVMの下位層のいくつかの構成パラメータを指し、これらのパラメータは一般開発でデフォルトであり、構成は必要ありません.しかし、生産環境では、すべてのjvm実装が満たされることは保証されていないため、パフォーマンスを向上させるために、システムが最適なパフォーマンスを達成するためにこれらのパラメータを調整する必要があることが多い.また、これらのパラメータは後方互換性を保証しません.つまり、「変更があれば、後続バージョンのJDK通知を行わないことをお許しください」(これは公式サイトの原話です).三つ目は非Stableパラメータ(-XX)であり、これらのパラメータはjvmでは不安定で日常的に使用するのに適しておらず、後続も通知なしで直接キャンセルされる可能性があり、慎重に使用する必要がある.
B:JVMメモリは、新しいドメイン、古いドメイン、および永続的なドメインの3つの主要なドメインに分けられます.JVMによって生成されたすべての新しいオブジェクトが新しいドメインに配置されます.オブジェクトが一定数のゴミ収集サイクルを経験すると、古いドメインに入ります.一方、永続ドメインでは、classオブジェクトやmethodオブジェクトなどのJVM独自の反射オブジェクトを格納するために使用され、GC(Garbage Collection)はメインプログラムの実行期間中に永続ドメインをクリーンアップしません.新しいドメインと古いドメインはスタックに属し、永続的なドメインは独立したドメインであり、スタックの一部とはみなされません.
C:各主要パラメータの役割は次のとおりです:-Xms:jvmメモリの初期サイズ-Xmxを設定する:jvmメモリの最大値-Xmnを設定する:新しいドメインのサイズを設定する(これはjdk 1.4にしか有効ではないようですが、後で廃棄されます)-Xss:各スレッドのスタックサイズを設定する(つまり、同じ物理メモリでこの値を小さくするとより多くのスレッドが生成されます)-XX:NewRatio:新しいドメインと古いドメインの比を設定し、-X:NewRatio=4のように、新しいドメインと古いドメインの比が1:4-X:NewSize:新しいドメインの初期値を設定-X:MaxNewSize:新しいドメインの最大値を設定-X:PermSize:永久ドメインの初期値を設定-X:MaxPermSize:永久ドメインの最大値を設定-X:SurvivorRatio=n:新しいドメインのEden領域と2つのSurvivor領域の比を設定します.(Edenゾーンは主に新生オブジェクトを格納するために使用され、2つのSurvivorゾーンはゴミ回収のたびに生き残ったオブジェクトを格納するために使用されます)
D:よくあるエラー:
一、java.lang.OutOfMemoryError:PermGen space PermGen spaceのフルネームはPermanent Generation spaceで、主にJVMによってClassとMeta情報が格納されているメモリの永久保存領域を指し、ClassはLoaderによってPermGen spaceに格納され、クラスインスタンス(Instance)が格納されているHeap領域とは異なり、GC(Garbage Collection)はメインプログラムの実行期間中にPermGen spaceをクリーンアップしない.そのため、あなたのアプリケーションにCLASSがたくさんあると、PermGen spaceエラーが発生する可能性があります.このエラーは、WebサーバがJSPをpre compileするときによくあります.WEBアプリの下にサードパーティjarが大量に使われており、jvmのデフォルトサイズ(4 M)を超えるサイズであれば、このエラーメッセージが発生します.
解決方法:手動でMaxPermSizeサイズJAVAを設定するOPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
推奨:同じサードパーティjarファイルをserver/all/libディレクトリに移動すると、jarドキュメントの重複メモリ消費を減らすことができます.
二、java.lang.OutOfMemoryError:Java heap spaceHeap size設定JVMスタックの設定とはjavaプログラムの実行中にJVMが使用できるメモリスペースの設定を指す.JVMは起動時に自動的にHeap sizeの値を設定し、その初期空間(すなわち-Xms)は物理メモリの1/64であり、最大空間(-Xmx)は物理メモリの1/4である.JVMが提供する-Xmn-Xms-Xmxなどのオプションで設定できます.Heap sizeの大きさはYoung GenerationとTenured Generaionの和です.ヒント:JVMの98%がGCで使用可能なHeap sizeが2%未満の場合、この例外情報が放出されます.ヒント:Heap Sizeは使用可能な物理メモリの最大80%を超えないでください.一般的には-Xmsと-Xmxのオプションを同じに設定し、-Xmnは1/4の-Xmx値です.
解決方法:手動でHeap sizeを設定し、起動パラメータを修正、-Xms-XmxJAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
次に例を示しますが、実際の状況に応じてrunを修正してください.confファイルの内容は次のとおりです.
deploy/jboss-webを構成します.deployer/server.xmlファイル
<Connector
port="8080"
address="0.0.0.0"
maxThreads="1600"
minSpareThreads="100"
maxSpareThreads="250"
emptySessionPath="false"
enableLookups="false"
redirectPort="8443"
acceptCount="800"
connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8"
/>
maxThreads:最大同時処理接続数を表します.スレッド数(最大スレッド数)を最大予想負荷(同時クリック)より25%多く設定する必要があります(経験ルール).acceptCount:同時に接続された人数がmaxThreadsに達した場合、キューに並んだ接続を受信することもできます.
minSpareThread:「起動後、常にその数のスレッドをアイドル状態で待機する」こと.予想される負荷より25%多く設定します.
maxSpareThread:「minSpareThreadを超えると、スレッドの空き待ち時間が常に維持される」ことを意味します.予想される負荷より25%多く設定します.
ここでは主に2つのパラメータmaxThreadsとacceptCountの値を変更します.maxThreadsを増加させ、acceptCount値を減少させることは、システムの応答時間を短縮するのに有利である.しかし、maxThreadsとacceptCountの合計最高値は6000を超えず、maxThreadsが大会を過ぎてCPUとメモリ消費を増加させるため、低構成ユーザーはmaxThreadsを低減し、同時にacceptCount値を大きくすることでシステムの安定性を保証することができる.
コンカレント数
サーバメモリ
jbossパラメータ
maxThreads
acceptCount
50以下
2G
256
800
50-300
4G
600
1024
300-800
8G
1024
1528
800-1000
8G
1024
2048
1000-1200
12G
1526
2048
1200-1500
16G
2048
2048
二.jvmパラメータの調整
A:JVM起動パラメータは3種類に分けられます.1つは標準パラメータ(-)で、すべてのJVM実装はこれらのパラメータの機能を実現しなければならず、後方互換性があります.二つ目は非標準パラメータ(-X)であり、JVMの下位層のいくつかの構成パラメータを指し、これらのパラメータは一般開発でデフォルトであり、構成は必要ありません.しかし、生産環境では、すべてのjvm実装が満たされることは保証されていないため、パフォーマンスを向上させるために、システムが最適なパフォーマンスを達成するためにこれらのパラメータを調整する必要があることが多い.また、これらのパラメータは後方互換性を保証しません.つまり、「変更があれば、後続バージョンのJDK通知を行わないことをお許しください」(これは公式サイトの原話です).三つ目は非Stableパラメータ(-XX)であり、これらのパラメータはjvmでは不安定で日常的に使用するのに適しておらず、後続も通知なしで直接キャンセルされる可能性があり、慎重に使用する必要がある.
B:JVMメモリは、新しいドメイン、古いドメイン、および永続的なドメインの3つの主要なドメインに分けられます.JVMによって生成されたすべての新しいオブジェクトが新しいドメインに配置されます.オブジェクトが一定数のゴミ収集サイクルを経験すると、古いドメインに入ります.一方、永続ドメインでは、classオブジェクトやmethodオブジェクトなどのJVM独自の反射オブジェクトを格納するために使用され、GC(Garbage Collection)はメインプログラムの実行期間中に永続ドメインをクリーンアップしません.新しいドメインと古いドメインはスタックに属し、永続的なドメインは独立したドメインであり、スタックの一部とはみなされません.
C:各主要パラメータの役割は次のとおりです:-Xms:jvmメモリの初期サイズ-Xmxを設定する:jvmメモリの最大値-Xmnを設定する:新しいドメインのサイズを設定する(これはjdk 1.4にしか有効ではないようですが、後で廃棄されます)-Xss:各スレッドのスタックサイズを設定する(つまり、同じ物理メモリでこの値を小さくするとより多くのスレッドが生成されます)-XX:NewRatio:新しいドメインと古いドメインの比を設定し、-X:NewRatio=4のように、新しいドメインと古いドメインの比が1:4-X:NewSize:新しいドメインの初期値を設定-X:MaxNewSize:新しいドメインの最大値を設定-X:PermSize:永久ドメインの初期値を設定-X:MaxPermSize:永久ドメインの最大値を設定-X:SurvivorRatio=n:新しいドメインのEden領域と2つのSurvivor領域の比を設定します.(Edenゾーンは主に新生オブジェクトを格納するために使用され、2つのSurvivorゾーンはゴミ回収のたびに生き残ったオブジェクトを格納するために使用されます)
D:よくあるエラー:
一、java.lang.OutOfMemoryError:PermGen space PermGen spaceのフルネームはPermanent Generation spaceで、主にJVMによってClassとMeta情報が格納されているメモリの永久保存領域を指し、ClassはLoaderによってPermGen spaceに格納され、クラスインスタンス(Instance)が格納されているHeap領域とは異なり、GC(Garbage Collection)はメインプログラムの実行期間中にPermGen spaceをクリーンアップしない.そのため、あなたのアプリケーションにCLASSがたくさんあると、PermGen spaceエラーが発生する可能性があります.このエラーは、WebサーバがJSPをpre compileするときによくあります.WEBアプリの下にサードパーティjarが大量に使われており、jvmのデフォルトサイズ(4 M)を超えるサイズであれば、このエラーメッセージが発生します.
解決方法:手動でMaxPermSizeサイズJAVAを設定するOPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
推奨:同じサードパーティjarファイルをserver/all/libディレクトリに移動すると、jarドキュメントの重複メモリ消費を減らすことができます.
二、java.lang.OutOfMemoryError:Java heap spaceHeap size設定JVMスタックの設定とはjavaプログラムの実行中にJVMが使用できるメモリスペースの設定を指す.JVMは起動時に自動的にHeap sizeの値を設定し、その初期空間(すなわち-Xms)は物理メモリの1/64であり、最大空間(-Xmx)は物理メモリの1/4である.JVMが提供する-Xmn-Xms-Xmxなどのオプションで設定できます.Heap sizeの大きさはYoung GenerationとTenured Generaionの和です.ヒント:JVMの98%がGCで使用可能なHeap sizeが2%未満の場合、この例外情報が放出されます.ヒント:Heap Sizeは使用可能な物理メモリの最大80%を超えないでください.一般的には-Xmsと-Xmxのオプションを同じに設定し、-Xmnは1/4の-Xmx値です.
解決方法:手動でHeap sizeを設定し、起動パラメータを修正、-Xms-XmxJAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
次に例を示しますが、実際の状況に応じてrunを修正してください.confファイルの内容は次のとおりです.
JAVA_OPTS="-Xms256m -Xmx2048m -XX:NewSize=256m -XX:MaxNewSize=512m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -Djboss.platform.mbeanserver"