高CPU使用率 – 弹跳后从服务器到服务器的症状

首先,如果我没有包含足够的信息来正确排除这个问题,我很抱歉。 这种事情不是我的专长,所以这是一个学习的过程。 如果有什么我需要提供,请让我知道,我会很乐意尽我所能。 与我的问题相关的图像在这篇文章的底部。

我们正在处理四个WebLogic 9.2 Java应用程序服务器的集群环境。 该集群采用循环加载algorithm。 其他细节包括:

  • Java(TM)2运行环境,标准版(build 1.5.0_12-b04)
  • BEA JRockit(R)(构buildR27.4.0-90_CR352234-91983-1.5.0_12-20071115-1605-linux-x86_64,编译模式)

基本上,我开始关注服务器的性能,因为我们的客户在一天中的不同时间都看到很多延迟。 我们的服务器应该很容易地处理它们给出的负载,所以不清楚发生了什么事情。 使用惠普性能pipe理器,我生成了一些图表,表明CPU使用率完全不合时宜。 看来,在任何给定的点,一个或多个服务器的CPU利用率超过50%。 我知道这不是特别高,但是我认为这是一个基于WebLogic集群中其他服务器的CPU利用率的红旗。

有趣的事情要注意:

  • CPU使用率高仅在server02上发生了几个星期。 服务器崩溃(极其罕见;我们不确定是否与此相关),并且在启动备份时,所有4台服务器的CPU利用率都是正常的。
  • 我们昨天在2/28重新启动了所有4个托pipe服务器和应用程序服务器(在server01上)。 正如你所看到的,server03和server04拿起之前在server02上看到的行为。
  • CPU利用率是应用程序用户拥有的Java进程(appown)。
  • 所有服务器的事务数量都是一致的。 似乎没有任何一台服务器实际上处理的是另一台服务器。

如果任何人有任何想法,或者至less可以把我指向正确的方向,这将是伟大的。 再次,请让我知道,如果有任何额外的信息,我应该发布。 谢谢!

server03
Server02上
SERVER01
SERVER04

负载平衡是完全循环的还是基于IP或cookie做粘性? 你可能会有某种用户stream量粘在一台服务器上,并在重新启动时移动 – 尤其是当另一台服务器正在调用群集上的一个应用时。 所以交叉检查它与服务器的实际命中。

您可能还会在应用程序中遇到竞争情况,某些操作会使其处于循环状态。 为此,你可以采取一个线程转储(杀死-3 PID),并把它从你的标准输出日志,并运行像武士一样,看看有什么。

我也打开垃圾收集日志logging,看看GC时间是否与感知滞后时间相关。

我不是群集或Bea的专家,但是在性能分析问题中,不仅有CPU。 什么是有关内存,磁盘和networking的数据? 获取数据的工具是顶层(cpu和内存,包含许多细节和每个进程),vmstat(内存,CPU,磁盘),sar(linux上的sysstat软件包,包含所有可能的数据和历史logging)。 那么,这样的机器的操作系统是什么,在哪个版本?

我将安装一个Java探测器,并对Web应用程序进行configuration文件 ,以进一步调查50%CPU正在进行的操作。

触发每个服务器上的一个或两个线程转储。 您可能会发现其中一台服务器有一个正在运行的线程,而其他服务器上没有运行线程。 还要通过控制台检查内存利用率。 没有足够的内存时,我已经看到WebLogic进入垃圾回收循环。