我试图弄清楚生产服务器上的Web应用程序中的瓶颈。 ColdFusion 10上大约有80个站点在Windows Server 2012 R2上运行最新的Java 8,Tomcat 7,IIS 8.5。请求从平均500-1000毫秒到最多30秒随机峰值,这意味着同一页面的10个请求中的9个在1000毫秒内完成,一个需要20-30秒。它似乎可以在包含代码的每个页面/模板上发生。
网络应用特征:
<cfhttp>
)我使用FusionReactor进行监控,并观察了以下事项:
注意:这只是一个例子。其他悬挂请求显示其他功能的差距。它似乎不是一种模式,有时候它是一个包含查询的函数,有时它只是<cfinclude>
,有时它只是简单的输出。
线程CPU时间为2500毫秒,执行时间为29727毫秒。 TTFB和TTLB为29726 ms,流在2 ms之前打开,之后1 ms关闭。查询总时间为76毫秒(19个查询)。
注意funcCONSTRUCTFOOTER.getAccess
实际上只是一行Java函数return 0;
(返回access
标记的<cffunction>
属性,所以我真的怀疑执行这个功能花了23秒。我不会看到任何锁定/等待。
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
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.log
的平均值范围为35到75个线程。繁忙计数约为该值的90%,例如Max threads: 500 Current thread count: 70 Current thread busy: 64
。
可能是什么原因?我怎样才能进一步检查这个问题?