首先,只是有点背景:CPU使用率峰值6.1
我们的一个客户正在经历CPU使用高峰运行我们的Web应用程序之一的WebSphere实例(与其他应用程序等情况都很好) 。他们有一个测试环境和一个实时环境(两个iSeries)都遇到了问题 - 每个实例安装一个应用程序。我们已经在我们自己的测试环境中本地部署了该应用程序,并且也为iSeries上的许多其他客户部署了此应用程序,但没有类似问题
什么是实际发生的事情:
每隔一秒左右,用于WebSphere Process'的CPU使用率的CPU使用率跳转到从7%
任何地方 - 20%
即使没有当时正在处理的请求。客户报告发现峰值高达30%
。这些峰值的平均值总体上为CPU的1.5%
- 其他WebSphere实例在空闲时通常使用0%
- 0.1%
。
我的调查至今
所以,我看了一下线程。测试环境中的一个线程每秒使用~350
CPU周期。他们的生活环境中的一个类似的线程是使用~1500
CPU周期每秒(表明它有更大的CPU)。这些线程的调用堆栈看起来像
Type Program Statement Procedure
QLESPI QSYS 17 LE_Create_Thread2__FP12crtt >
QJVALIBJVM QSYS 7 startThread__FPv
J com/ibm/ws/util/Threa > run
J com/ibm/ws/util/Threa > run
J com/ibm/ws/util/Threa > getTask
J com/ibm/ws/util/Bound > poll
底线的整个类名是com/ibm/ws/util/BoundedBuffer
。我问客户为我做一个JVM转储 - 我从这次拿到的唯一附加信息是线程名:
Thread: 00002F82 Deferrable Alarm : 11
现在对于我的问题:
- 任何你能辨认问题,鉴于这些症状? (也许这是一个长镜头!)
- 什么是
Deferrable Alarm
?从JVM转储,我可以看到4个线程与这个名字。其他三个似乎做得很好。通过调试我的本地WebSphere(在Windows上)并在BoundedBuffer
类中添加断点,我发现BoudedBuffer
正在轮询并定期调用某个侦听器。 - 我无法访问用于客户机器的WebSphere控制台,并且他们并不拥有任何配置更改。我可以让他们为我检查控制台 - 我应该问他们看什么?
- 我有telnet访问客户箱,有什么我可以在这里调查吗?查看WebSphere配置文件等?我应该查看哪些文件?
- 由于调用堆栈和JVM转储没有明确引用我们的代码,因此假设这是一个配置问题是否安全?
这是一个长期的问题,所以感谢您阅读这些。
4月30日更新(1)
今天早上我已经注意到,这种行为只有一天的第一个请求处理完毕后发生的(不管是哪个的Web服务调用)。这将手指指向我们的应用程序或Apache Axis。难道这只是正常的行为?!
4月30日更新(2)
如此看来,这个CPU活动是用于Web容器某种管理行为的或者也可以是Apache Axis的范围内。我现在观察到这发生在几个不同的服务器上的几个不同的Web应用程序上。没有Web组件的应用程序不会遭受额外的CPU额外开销。
我想象一下,如果它是家务工作,那么“调整”它可能会产生反作用 - 因此,我的意思是让App Server更好地闲置可能会负面影响“真正”的工作量做。
这个客户i系列与您的其他客户处于同一水平吗?是否有其他差异,使这一个独特? – Ichorus 2009-05-01 17:36:24
是的,它是相同的水平。它也发生在WebSphere 5.1以及6.1 – 2009-05-05 08:07:10