2009-04-29 74 views
5

首先,只是有点背景: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更好地闲置可能会负面影响“真正”的工作量做。

+0

这个客户i系列与您的其他客户处于同一水平吗?是否有其他差异,使这一个独特? – Ichorus 2009-05-01 17:36:24

+0

是的,它是相同的水平。它也发生在WebSphere 5.1以及6.1 – 2009-05-05 08:07:10

回答

0

很本能地(是不熟悉的iSeries平台),我想看看磁盘IO相关问题。你能描述磁盘子系统吗?你能否看到你的应用程序是否在艾奥瓦特中花费了非常多的时间?

+0

感谢您的建议。我曾看过I/O,但是当服务器空闲时,仍有CPU峰值,但没有I/O调用。 – 2009-04-30 10:31:14

0

我最好的猜测是,它是某种类型的监测正在对实例来完成,像Tivioli等你有没有排除任何GC活动?

HTH汤姆

1

你可以尝试分析和做应用程序的堆转储,即可以回答有关内存和CPU使用的一些问题。

0

大多数应用服务器在Java本身实现的,所以是的WebSphere。除了服务客户端请求之外,该服务器还必须执行其他定期工作,如说资源池管理。执行此作业将创建一些需要垃圾收集的临时对象。

取决于你有多少堆分配,使用和垃圾收集器的设置,垃圾收集器会被调用。我会说,试着看看它是否是占用你的CPU的垃圾回收器线程。为此,将jconsole实用程序连接到远程websphere进程一天,并查看堆使用情况和CPU使用情况之间是否存在任何关联关系。

1

我建议以下的必须收集IBM提供documentation,并用自己的调查一起养PMR。事情你可能会怀疑:

  • 垃圾收集(不太可能在应用低利用率)
  • 定时器或任务(如java.util中。定时器或CommonJ工作管理器)
  • 具有复杂的SQL查询(在数据源的WebSphere Application Server数据源属性)

我也建议使用Profiler来确定原因考前连接,YourKit profiler是一个漂亮的体面的一个。

0

我也遇到了这个问题,使用BoundedBuffer [Deferrable Alarm:x]。我唯一的区别是这是在Windows 7 64位机器上。绝对没有Tivioli或其他批处理运行,没有请求,单个实例只是空闲。

我可以在DEBUG模式下运行应用程序并暂停可延期警报线程,CPU峰值停止,恢复并重新启动。

我检查过磁盘活动,网络活动和他们没有发生在那里。

我正在运行WebSphere 6.1.0.27。