Weblogic 密集型 CPU 使用率

Weblogic 密集型 CPU 使用率

我在 Solaris 机器 (VM) 上使用 Weblogic 10.3.4 + Oracle DB

不幸的是,上周我们在 Weblogic 上托管的应用程序变得非常慢,无法为新用户提供服务(一切都持续了 1 小时)。

为了找出原因,我们从操作系统级别和数据库级别请求报告。

报告显示:

  • 那一小时的 CPU 使用率非常高。(显然是使用系统的用户数量的峰值)
  • 连接池已达到 Weblogic 的最大限制(200 个连接!)
  • Db 的 AWR 统计数据显示响应时间有所下降。

那么,谁是先有鸡还是先有蛋呢?

非常慢的数据库可能会导致 WEBlogic 速度变慢并达到池的最大连接数。

但是如果 CPU 使用率很高的话,持有 DB 连接的线程可能会非常繁忙,以致于它们不会将连接返回到池中(因为处理器很忙)==> 一个新客户端到来,然后分配一个新连接等等...所以连接池也可能会这样耗尽......?

问候

克里斯

答案1

CPU 使用率过高通常是由 Java 垃圾收集器试图收集 JVM 堆空间、永久代等中的可用内存造成的。如果是这种情况,您需要添加更多内存,通常是 JVM 堆。请参阅 JVM 选项-Xmx

当 JVM 中的 CPU 使用率很高时,请尝试找出哪些线程正在使用 CPU。在出现问题时,使用 创建 2-3 个线程转储pkill -3 java。线程转储将位于(对于 Solaris)/proc/<JVM_PID>/path/1

如果线程池达到其限制,您应该会在日志中看到错误。CPU 使用率不应因此而上升。这是一个事件驱动的环境,不需要进行池化。

缓慢的数据库实际上会降低应用服务器上的 CPU 使用率。这取决于应用程序的编程/配置方式。

相关内容