首先,只是一些背景知识:
我们的一位客户正在经历运行我们的某个Web应用程序的WebSphere实例的CPU使用率峰值(其他应用程序的其他实例都很好)。他们有一个测试环境和一个现场环境(两个iSeries)都遇到了问题 - 每个实例设置一个应用程序。我们已经在我们自己的测试环境中本地部署了此应用程序,也为iSeries上的许多其他客户部署了这个应用程序,没有类似的问题。
实际发生了什么:
每隔一秒左右,即使当时没有处理请求,WebSphere进程的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
正在轮询并定期调用一些监听器。这是一个很长的问题,所以感谢您阅读这篇文章。
4月30日更新(1)
今天早上我注意到这种行为只发生在处理当天的第一个请求之后(无论调用哪个Web服务)。这将手指指向我们的应用程序或Apache Axis。难道这只是正常行为吗?!
4月30日更新(2)
因此,似乎这个CPU活动是Web容器的某种内务活动,或者也许是Apache Axis中的某些东西。我现在已经在几个不同的服务器上发现了一些不同的Web应用程序。没有Web组件的应用程序不会遭受相同的额外CPU开销。
我想如果是家政工作,那么“调整”它可能会产生相反的效果 - 我认为让App Server更好地闲置可能会对它可以做的“真实”工作量造成负面影响
答案 0 :(得分:1)
您可以尝试分析并执行应用程序的堆转储,这可以回答与内存和CPU使用相关的一些问题。
答案 1 :(得分:1)
我建议遵循IBM提供的必须收集documentation,并提出PMR以及您自己的调查。你可能会怀疑的事情:
我还建议使用分析器来确定原因,YourKit profiler是一个相当不错的原因。
答案 2 :(得分:0)
非常本能地(不熟悉iSeries平台)我会看一下与磁盘IO相关的问题。你能描述一下磁盘子系统吗?你能看出你的应用是否在iowait花费了大量的时间吗?
答案 3 :(得分:0)
我知道这不符合您的问题。但如果您在WAS 6.1补丁17之前运行,可能值得一看。
http://www-01.ibm.com/support/docview.wss?uid=swg24018437
希望这会有所帮助。干杯约翰
答案 4 :(得分:0)
我最好的猜测是,正在对实例进行某种类型的监控,比如Tivioli等。您是否排除了任何GC活动?
HTH汤姆
答案 5 :(得分:0)
大多数应用程序服务器都是用java本身实现的,WebSphere也是如此。除了服务客户端请求之外,这些服务器还必须执行其他周期性工作,例如资源池管理。执行此作业将创建一些需要进行垃圾回收的临时对象。
根据您分配的堆数,使用情况和垃圾收集器设置,将调用垃圾收集器。我想说看看它是否是占用CPU的垃圾收集器线程。为此,将jconsole实用程序连接到远程websphere进程一天,并查看堆使用和cpu使用之间是否存在任何关联。
答案 6 :(得分:0)
我也遇到了同样的问题,[Deferrable Alarm:x]使用BoundedBuffer。我唯一的区别是这是在Windows 7 64位机器上。绝对没有运行Tivioli或其他批处理进程,没有请求,单个实例只是空闲。
我可以在DEBUG模式下运行应用程序并暂停Deferrable Alarm线程并且CPU峰值停止,恢复并再次启动。
我已经检查了磁盘活动,网络活动,并且它们没有发生任何事情。
我正在运行WebSphere 6.1.0.27。