Kal*_*tel 6 java profiling yourkit
最近我们开始使用YJP 11.0.9对我们的应用程序(基于XMPP的聊天服务器)进行压力测试.在我们的测试期间,我们发现了以下奇怪
我做了多次测试来确认结果,每次我得到类似的结果.
我无法理解为什么unpark应该花费60%的时间以及为什么跟踪显示完全相反的结果.
有人可以帮助我理解这些结果.我在这里错过了什么吗?
环境:
java -version java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1.6.0_31-b04) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
高CPU时间Unsafe.unpark是过度上下文切换的标志.这篇文章是关于上下文切换有多昂贵的想法:
找到在Linux上查找CS计数的最简单方法就是运行vmstat <seconds>.
一旦确认了高CS(例如,每个核心/每秒更多10K交换机),你就会接受有问题的线程(你可以按照它们的CPU时间对YJP中的线程进行排序)并运行strace -p <pid> -c以找出切换的原因,例如线程从套接字读取小块和关闭,在这种情况下增加套接字缓冲可能会有所帮助.
对于某些低级阻塞命令(例如读/写/驻留/锁定),“CPU”时间会被过高估计,因为它假设在实际操作阻塞时正在消耗 CPU。事实上 unpark/park 都很高确实表明您有问题,但我怀疑您应该采用两个百分比中较低的一个作为估计值。