0

1回の接続数が500を超えると、httpdがフリーズして応答を停止する場合に、サーバーを調整するのを手伝ってください。

2008 年から同じ構成を使用していますが、RAM を追加して、2 台のサーバーのそれぞれに 32 Gb を搭載しています。

最初のサーバーは RHEL 5 64 ビット 2.6.18-53.1.4.el5xen をインストールし、2 番目のサーバーに接続した後に jnlp をクライアントに配信します。

Apache 2.2.3 httpd.conf

<IfModule prefork.c>
StartServers       8
MinSpareServers   10
MaxSpareServers   75
ServerLimit      1100
MaxClients       1100
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

次のパラメータを持つJava 1.6.0_27プロセス

java -server -Xmx1280M -XX:MaxPermSize=256M -Djava.awt.headless=true ...

次のパラメーターを含む tomcat server.xml

 ...   connectionTimeout="12000" maxSpareThreads="250" protocol="AJP/1.3" 
 maxHttpHeaderSize="8192" disableUploadTimeout="true" minSpareThreads="25" 
 useBodyEncodingForURI="true" maxThreads="500" acceptCount="100" 
 enableLookups="false" ...

2 番目のサーバーには JVM Java プロセス HW しかなく、ユーザー数が 600 を超えると上記と同じハードウェアがフリーズします。昨日、Xmx を 4000m から 26g に変更しました。これにより、このプロセスにより多くの RAM を使用できるようになります。しかし、トップで4g以上を使用していることはわかりません。

java -server -Xmx26g -Djava.awt.headless=true -Dfile.encoding=UTF-8 -jar

top - 01:34:10 up 252 days,  8:02,  1 user,  load average: 0.00, 0.02, 0.00
Tasks: 127 total,   1 running, 126 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.8%us,  0.2%sy,  0.0%ni, 97.7%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  37049860k total,  3225916k used, 33823944k free,   331836k buffers
Swap: 10223608k total,        0k used, 10223608k free,  2409808k cached

top - 03:57:04 up 252 days,  8:02,  1 user,  load average: 0.01, 0.02, 0.00
Tasks: 145 total,   1 running, 144 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.8%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  37108368k total, 36117600k used,   990768k free,   218364k buffers
Swap:  2031608k total,      120k used,  2031488k free, 33518948k cached

これを解決するのを手伝ってください。これらすべてをアップグレードする予定ですが、Java プログラムが新しいバージョンの rhel Apache tomcat および jvm で動作するかどうかはわかりません。

4

1 に答える 1

0

ほとんどの場合、これは Tomcat 側の問題です

maxThreads="500"

server.xml で...それを上げると、より多くの同時接続が可能になります。

最大スレッド数

このコネクタによって作成される要求処理スレッドの最大数。これにより、処理できる同時要求の最大数が決まります。If not specified, this attribute is set to 200. Executor がこのコネクタに関連付けられている場合、コネクタは内部スレッド プールではなく Executor を使用してタスクを実行するため、この属性は無視されます。

Apache Tomcat のドキュメントから

また、この部分では、600 のクライアントが接続できる理由について説明します。

acceptCount="100"

これにより、別の 100 クライアントが、サービスが提供されるまでキューで待機できます。

acceptCount

可能なすべての要求処理スレッドが使用中の場合の着信接続要求の最大キュー長。キューがいっぱいのときに受け取ったリクエストはすべて拒否されます。デフォルト値は 100 です。

注:メモリの状況を確認できるようにするために、JMX (jconsole、jvisualvm など) を使用して Tomcat に接続できます。また、Tomcat の監視で説明されているように、多くの実際の設定を確認することもできます。よくある質問

于 2016-08-11T19:12:40.017 に答える