4

実動サーバー上の Web アプリケーションのボトルネックを突き止めようとしています。Windows Server 2012 R2 で最新の Java 8、Tomcat 7、IIS 8.5 を搭載した ColdFusion 10 で実行されているサイトは約 80 あります。リクエストは、平均 500 ~ 1000 ミリ秒から最大 30 秒までランダムにピークに達します。つまり、同じページの 10 件のリクエストのうち 9 件が 1000 ミリ秒以内に完了し、1 件に 20 ~ 30 秒かかります。コードを含むほぼすべてのページ/テンプレートで発生する可能性があるようです。

ウェブアプリの特徴:

  • 多くの正規表現と文字列操作
  • 大量のデータ変換 (リストから配列へ、配列の再作成、データ順序のランダム化、構造体の生成)
  • 軽量 SQL クエリ (同じネットワーク内の専用 SQL サーバー)
  • 発信接続がありません ( <cfhttp>)

FusionReactor を使用して監視していますが、次のことを観察しました。

遅いリクエストのスタックトレース

注: これは単なる例です。その他の保留中の要求は、他の機能のギャップを示しています。パターンはないようです。クエリを含む関数である場合もあれば、単なる である<cfinclude>場合もあれば、単純な出力である場合もあります。

スタックトレース

スレッドの CPU 時間は 2500 ミリ秒で、実行時間は 2972​​7 ミリ秒です。TTFB と TTLB は 2972​​6 ミリ秒で、ストリームは 2 ミリ秒前に開き、1 ミリ秒後に閉じました。クエリの合計時間は 76 ミリ秒 (19 クエリ) でした。

funcCONSTRUCTFOOTER.getAccessが実際には 1 行の Java 関数(タグの属性をreturn 0;返す) にすぎないことに注意してください。したがって、この関数の実行に 23 秒かかったとは思えません。ただし、ロック/待機も表示されません。access<cffunction>

その他の例: スタックトレース スタックトレース スタックトレース

JVM ( Java HotSpot(TM) 64-Bit Server VM, 1.8.0_121)

-server
-Xms24G
-Xmx48G
-Xss4m
-XX:MaxMetaspaceSize=2G
-XX:+TieredCompilation
-XX:ReservedCodeCacheSize=2G
-XX:+UseCompressedOops
-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-Xbatch 

ColdFusion ( 10.0.22.283922、アップデート 22)

Maximum number of simultaneous Template requests: 40
Maximum number of cached templates: 40000 (~14500 cached according to monitor)
Trusted cache: true
Cache template in request: true
Component cache: true
Save class files: true

コネクタ

<Connector port="8012" protocol="AJP/1.3" redirectPort="8445" tomcatAuthentication="false" maxThreads="500" connectionTimeout="60000" />

worker.list=cfusion
worker.cfusion.type=ajp13
worker.cfusion.host=localhost
worker.cfusion.port=8012
worker.cfusion.connection_pool_size=500
worker.cfusion.max_reuse_connections=250
worker.cfusion.connection_pool_timeout=60

metrics.log35 から 75 スレッドの範囲の平均。ビジー カウントは値の約 90% ですMax threads: 500 Current thread count: 70 Current thread busy: 64

ハードウェア

  • Intel Xeon E5-2650上の HyperV VM
  • 4 つの物理コアが割り当てられ、8 つの論理コアが割り当てられています
  • 64 GB RAM を割り当て

その理由は何ですか?問題をさらに調べるにはどうすればよいですか?

4

0 に答える 0