-1

我有一台具有 4 个 CPU 和 16GB RAM 的服务器。这台 Ubuntu 机器上运行着一个 Weblogic 管理服务器和 2 个托管服务器和一个 Tomcat 服务器。

资源利用率有时会爆炸,这是非常不寻常的。这以前从未发生过,我认为这与我使用的 Java 参数有关。

看看这个:

在此处输入图像描述

网络逻辑集群:

管理服务器:qaas-01

托管服务器:qams-01、qams-02

在下图中,您将能够看到与上述相关的 java 进程正在成倍增加并消耗太多内存。

在此处输入图像描述

发现这更通用,而不是特定于 Weblogic。许多进程的行为方式相同。

在下图中,它的 Apache Tomcat 和 Jenkins 的从属进程正在复制和消耗内存。

在此处输入图像描述

谁能帮我确定真正的问题?

4

1 回答 1

1

这个问题相当广泛,所以开始研究它为什么会发生。如果您更改了可能导致此问题的任何内容,请同时发布您的 JVM 标志。

首先,您需要弄清楚是什么占用了您的 CPU 时间。

检查 weblogic 配置控制台以生成堆栈跟踪以查看发生了什么。您可能需要坐下来观察 CPU,以便在它达到峰值时运行它。您还可以使用 jstack 强制堆栈跟踪。要获取 java stacktrace,您可能需要 sudo 并以运行服务器的用户身份执行它,否则您将获得 OS 线程转储,这可能没有那么有用。阅读有关 jstack 的信息。

如果上面没有提供关于 CPU 为何飙升的足够信息,并且由于这是 ubuntu,您可以运行:

timeout 20 strace -cvf -p {SERVER PID HERE} -o strace_digest.txt

这将运行 strace 20 秒并报告最频繁地进行哪些操作系统调用。这可以给你一个关于正在发生的事情的提示。

启用并检查垃圾收集日志,看看它运行的频率,它可能没有足够的内存。查看 GC 运行和 CPU 峰值之间是否存在相关性。

我认为没有明确的方法可以通过查看顶部来帮助您解决 CPU 峰值问题,但以上是让您调试的开始。

于 2018-03-05T17:49:59.280 回答