weblogic高cpu分析

本文介绍了一种排查Java Web应用程序中CPU占用过高的方法,包括如何定位问题线程及分析线程堆栈,最终找到导致高CPU占用的代码位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

 

程序代码

Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <servlet>

    <description>This is the description of my J2EE component</description>

    <display-name>This is the display name of my J2EE component</display-name>

    <servlet-name>HeapOOM</servlet-name>

    <servlet-class>com.mem.HeapOOM</servlet-class>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>HeapOOM</servlet-name>

    <url-pattern>/servlet/HeapOOM</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

    <welcome-file>/</welcome-file>

  </welcome-file-list>

</web-app>

 

DeadLoop.java

package com.cpu;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.IOException;

 

 

import javax.servlet.http.HttpServlet;

 

public class DeadLoop extends HttpServlet {

public void init(ServletConfig config) throws ServletException

{

super.init(config);

}

 

public void service(HttpServletRequest request,HttpServletResponse response) throws IOException

{

try{

while(true){

Math.exp(Math.PI);

}

}

catch(Exception e){

while(true){

Math.exp(Math.PI);

}

}

}

 

}

查看cpu状态为剩余百分比为25.5%,使用kill -3 pid命令收集线程堆栈相关信息。

 [weblogic@rh5 ~]$top

top - 04:02:22 up 1 day,  5:00,  5 users,  load average: 1.83, 1.28, 0.97

Tasks: 142 total,   3 running, 139 sleeping,   0 stopped,   0 zombie

Cpu(s): 59.2%us, 14.7%sy,  0.0%ni, 25.5%id,  0.3%wa,  0.0%hi,  0.4%si,  0.0%st

Mem:   2075424k total,  1785188k used,   290236k free,   183056k buffers

Swap:  5144568k total,        0k used,  5144568k free,   795848k cached

 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                         

 9059 weblogic  18   0  786m 253m  19m S 34.1 12.5  28:30.90 java                                                                                                                             

 9761 root      25   0  2552 1044  604 R  2.1  0.1   0:00.34 find                                                                                                                             

  637 root      11  -5     0    0    0 S  0.1  0.0   0:02.45 kjournald                                                                                                                        

 2770 root      15   0  1728  576  480 S  0.1  0.0   0:00.09 syslogd                                                                                                                          

 7908 weblogic  20   0  811m 452m  25m S  0.1 22.3   2:27.79 java                                                                                                                             

 9295 weblogic  15   0  2336 1052  800 R  0.1  0.1   0:00.12 top                                                                                                                              

 9377 root      16   0  2412  956  836 S  0.1  0.0   0:00.01 run-parts                                                                                                                        

 9743 root      18   0  2412 1000  836 S  0.1  0.0   0:00.01 makewhatis                                                                                                                       

    1 root      25   0  2072  616  532 S  0.0  0.0   0:01.05 init                                                                                                                             

    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.27 migration/0                                                                                                                      

    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                                                                                                                      

    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                                                                                                       

    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.26 migration/1                                                                                                                      

    6 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1                                                                                                                      

    7 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/1   

 

 使用命令top -H -p pid 收集占用进程中使用cpu较大的线程信息,得到占用cpu较大的的线程号9090

将得到的线程号转换为16进制 得到0x2382

[weblogic@rh5 ~]$ top -H -p 9059

top - 04:03:21 up 1 day,  5:01,  5 users,  load average: 2.09, 1.37, 1.00

Tasks:  39 total,   2 running,  37 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.7%us,  0.1%sy,  0.0%ni, 99.2%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   2075424k total,  1793520k used,   281904k free,   183104k buffers

Swap:  5144568k total,        0k used,  5144568k free,   804436k cached

 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                         

 9090 weblogic  25   0  786m 253m  19m R 12.2 12.5  26:39.52 java                                                                                                                             

 9075 weblogic  25   0  786m 253m  19m R 11.5 12.5   1:57.86 java                                                                                                                             

 9059 weblogic  18   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9060 weblogic  16   0  786m 253m  19m S  0.0 12.5   0:02.57 java                                                                                                                             

 9061 weblogic  18   0  786m 253m  19m S  0.0 12.5   0:00.06 java                                                                                                                             

 9062 weblogic  16   0  786m 253m  19m S  0.0 12.5   0:00.06 java                                                                                                                             

 9063 weblogic  17   0  786m 253m  19m S  0.0 12.5   0:00.06 java                                                                                                                             

 9064 weblogic  17   0  786m 253m  19m S  0.0 12.5   0:00.04 java                                                                                                                             

 9065 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.61 java                                                                                                                             

 9066 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9067 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9068 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9069 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:02.71 java                                                                                                                             

 9070 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:02.69 java                                                                                                                             

 9071 weblogic  25   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9072 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.01 java                                                                                                                             

 9073 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9074 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.01 java                                                                                                                             

 9076 weblogic  18   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9077 weblogic  16   0  786m 253m  19m S  0.0 12.5   0:00.03 java                                                                                                                             

 9078 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.17 java                                                                                                                             

 9079 weblogic  24   0  786m 253m  19m S  0.0 12.5   0:00.06 java                                                                                                                             

 9080 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.01 java                                                                                                                             

 9081 weblogic  24   0  786m 253m  19m S  0.0 12.5   0:00.01 java                                                                                                                             

 9082 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.01 java                                                                                                                             

 9083 weblogic  19   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9085 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9086 weblogic  18   0  786m 253m  19m S  0.0 12.5   0:00.05 java                                                                                                                             

 9087 weblogic  15   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9088 weblogic  17   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9089 weblogic  18   0  786m 253m  19m S  0.0 12.5   0:00.00 java                                                                                                                             

 9092 weblogic  18   0  786m 253m  19m S  0.0 12.5   0:00.01 java                                                                                                                             

 9093 weblogic  18   0  786m 253m  19m S  0.0 12.5   0:00.01 java

 

通过得到的线程号在收集的线程堆栈中找到对应的“0x2382”,此时我们可以看到在nid=0x2382 线程出现“stuck” 查看报错信息可以看到“at com.cpu.DeadLoop.service(DeadLoop.java:19)”

通过报错信息对代码进行修改

"[STUCK] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=10 tid=0x890e0400 nid=0x2382 runnable [0x886fe000]

   java.lang.Thread.State: RUNNABLE

at java.lang.StrictMath.exp(Native Method)

at java.lang.Math.exp(Math.java:237)

at com.cpu.DeadLoop.service(DeadLoop.java:19)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)

at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)

at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)

at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)

at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3732)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)

at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)

at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)

at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)

at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)

at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)

at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值