繁体   English   中英

WebSphere 6.1中的CPU使用率峰值

[英]CPU Usage Spikes in WebSphere 6.1

首先,只是一些背景知识:

我们的一位客户正在经历运行我们的一个Web应用程序的WebSphere实例的CPU使用率峰值(其他应用程序的其他实例都很好)。 他们有一个测试环境和一个现场环境(两个iSeries)都遇到了问题 - 每个实例设置一个应用程序。 我们已经在我们自己的测试环境中本地部署了此应用程序,也为iSeries上的许多其他客户部署了此应用程序,没有类似的问

实际发生了什么:

每隔一秒左右,即使当时没有处理请求,WebSphere进程的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更好地闲置可能会对它可以做的“真实”工作量产生负面影响。

您可以尝试分析并执行应用程序的堆转储,这可以回答与内存和CPU使用相关的一些问题。

我建议遵循IBM提供的必须收集文档 ,并提出PMR以及您自己的调查。 你可能会怀疑的事情:

  • 垃圾收集(在应用程序利用率低时不太可能)
  • 定时器或任务(例如java.util.Timer或commonj工作管理器)
  • 具有复杂SQL查询的预测试连接(在DataSource的WebSphere Application Server数据源属性中)

我还建议使用分析器来确定原因, YourKit分析器是一个相当不错的。

大多数应用程序服务器都是用java本身实现的,WebSphere也是如此。 除了服务客户端请求之外,这些服务器还必须执行其他周期性工作,例如资源池管理。 执行此作业将创建一些需要进行垃圾回收的临时对象。

根据您分配的堆数,使用情况和垃圾收集器设置,将调用垃圾收集器。 我想说看看它是否是占用CPU的垃圾收集器线程。 为此,将jconsole实用程序连接到远程websphere进程一天,并查看堆使用和cpu使用之间是否存在任何关联。

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

我可以在DEBUG模式下运行应用程序并暂停Deferrable Alarm线程并且CPU峰值停止,恢复并再次启动。

我检查了磁盘活动,网络活动,他们没有发生任何事情。

我正在运行WebSphere 6.1.0.27。

非常本能地(不熟悉iSeries平台)我会看一下与磁盘IO相关的问题。 你能描述一下磁盘子系统吗? 你能看出你的应用是否在爱荷华州花费了大量的时间吗?

我知道这不符合您的问题。 但如果您在WAS 6.1补丁17之前运行,可能值得一看。

http://www-01.ibm.com/support/docview.wss?uid=swg24018437

希望这可以帮助。 干杯约翰

我最好的猜测是,在实例上正在进行某种类型的监控,如Tivioli等。您是否排除了任何GC活动?

HTH Tom

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM