![Weblogic 密集型 CPU 使用率](https://linux22.com/image/604936/Weblogic%20%E5%AF%86%E9%9B%86%E5%9E%8B%20CPU%20%E4%BD%BF%E7%94%A8%E7%8E%87.png)
我在 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 使用率。这取决于应用程序的编程/配置方式。