現在、JMeterを使用してTomcat上で動作するAPに負荷を掛けた際のパフォーマンスを測定しております。 負荷を掛けずにブラウザで処理を実行した際には1秒程度でレスポンスが返却されてくるのですが、 以下の条件で負荷を掛けるとレスポンス速度が段々と遅く(8秒~500秒程度)なって行ってしまいます。 また、かなりの頻度でConnectionタイムアウトが返却されてしまいます。 [負荷条件] スレッド数:1000 Ramp-Up期間:60秒 ループ回数 :無限ループ ※ スレッド数を500くらいにするとConnectionタイムアウトは発生しないのですが、 処理時間はやはりかなり遅くなってしまいます。 最初はJVMのFullGCの頻発が原因かと思い、GCの状況を確認しましたが、 パフォーマンスに影響を与えそうなFullGCは特に発生していませんでした。 [JVM オプション] "-server -Xmx1024m -Xms1024m -XX:MaxPermSize=128m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseTLAB -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0 -XX:CMSIncrementalDutyCycle=10 -XX:MaxTenuringThreshold=0 -XX:SurvivorRatio=256 -XX:+PrintGCDetails -Xloggc:/usr/local/tomcat/logs/gc.txt" 次にTomcatのserver.xmlでの最大thread数がデフォルトの状態だったので、 maxthreadsの値をとりあえず「2000」まで増やしてみたのですが状況は変わらずでした。 [server.xml] <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8123" maxHttpHeaderSize="8192" minProcessors="5" maxProcessors="1000" maxThreads="2000" minSpareThreads="25" maxSpareThreads="1000" enableLookups="false" acceptCount="100" debug="0" connectionTimeout="60000" useURIValidationHack="false" disableUploadTimeout="false" /> また、topを確認してもロードアベレージが高くなっているのが少し気になりますが(5.0~7.0程度を推移)、 Swap領域等は使用されている訳でもありませんでした。 Tomcatの経験もほとんど無いため何がボトルネックとなっているのかが分からずに困っております。 皆さまの経験から、推奨される設定、どこを調査した方が良いか、または参考となるサイト等が御座いましたらご教授願えないでしょうか。 [環境] CentOS release 4.7 メモリ:4G CPU :Intel(R) Xeon(R) CPU 2.00GHz X 2 jdk1.5.0_14 Tomcat 5.5
↧