设为首页 收藏本站
查看: 1018|回复: 0

[经验分享] weblogic8/redhat linux上weblogic进程占用CPU高实例

[复制链接]

尚未签到

发表于 2016-3-20 15:00:25 | 显示全部楼层 |阅读模式
注:部分内容由tdy218提供

[bea@mylinux ~]$ ps -ef|grep java
bea       3135  3115  0 16:33 pts/0    00:00:05 /home/bea/bea8/jdk142_05/bin/java -server -Xms256M -Xmx256M -Dweblogic.Name=myserver -Dweblogic.ProductionModeEnabled=true -Djava.security.policy=/home/bea/bea8/weblogic81/server/lib/weblogic.policy weblogic.Server


然后进行如下的操作:
[bea@mylinux ~]$ ps -Lp 3135 cu
USER       PID   LWP %CPU NLWP %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
bea       3135  3135  0.1   63 23.5 514408 121584 pts/0 Sl   16:33   0:05 java
bea       3135  3136  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3137  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3138  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3139  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3140  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3141  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3142  0.1   63 23.5 514408 121584 pts/0 Sl   16:33   0:05 java
bea       3135  3143  0.1   63 23.5 514408 121584 pts/0 Sl   16:33   0:05 java
bea       3135  3144  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3145  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3146  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3147  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3148  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3149  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3150  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3151  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3152  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3153  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3154  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3155  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3156  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3157  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3158  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3159  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3160  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3161  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3162  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3163  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3164  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3165  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3166  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3167  9.8   63 23.5 514408 121584 pts/0 Rl   16:33   5:46 java
bea       3135  3168 11.2   63 23.5 514408 121584 pts/0 Rl   16:33   6:35 java
bea       3135  3169 24.7   63 23.5 514408 121584 pts/0 Rl   16:33  14:30 java
bea       3135  3170 25.0   63 23.5 514408 121584 pts/0 Rl   16:33  14:42 java
bea       3135  3171  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3172  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3173  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3174  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3175  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3176  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3177  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3178  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3179  0.1   63 23.5 514408 121584 pts/0 Sl   16:33   0:04 java
bea       3135  3180  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3181  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3182  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3183  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3185  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3186  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3187  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3188  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3189  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3190  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3191  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3192  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3193  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3194  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3195  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3196  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3197  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
bea       3135  3198  0.0   63 23.5 514408 121584 pts/0 Sl   16:33   0:00 java
[bea@mylinux ~]$


本文档的目的是为了诊断java进程占用CPU异常过高故障的,使用ps命令看到的CPU%并非当前的CPU占用值,是个历史值,要想获得当前的、准确的CPU占用率,需用top命令

然后运行一个可以造成CPU占用很高(死循环等)的java web程序:
关键代码(好久没写代码了,很A级的一段代码):
package tdy218.alg;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

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);  //求欧拉数e的π次幂.
                  }
            }
       catch(Exception e){
             while(true){
                  Math.exp(Math.PI);
                 }
            }
      }
}

部署并运行.


接着执行下面的命令:
[iyunv@tdy218 alone_domain]# top -Hp 2577 -d 1 -n 1
Tasks:  53 total,   2 running,  51 sleeping,   0 stopped,   0 zombie
Cpu(s): 39.5%us, 15.6%sy,  0.0%ni, 30.4%id, 14.2%wa,  0.1%hi,  0.3%si,  0.0%st
……………………
PID USER     PR  NI  VIRT  RES  SHR S %CPU %MEM TIME+   UID COMMAND
2577 root     15   0  612m 587m 1512 S  0.0 61.5   0:28.62    0         java   
2580 root     22   0  612m 587m 1512 S  0.0 61.5   0:00.00    0         java   
2581 root     18   0  612m 587m 1512 S  0.0 61.5   0:00.00    0         java   
2582 root     18   0  612m 587m 1512 S  0.0 61.5   0:00.00    0         java   
……………………
2602 root     19   0  612m 587m 1512 S  0.0 61.5   0:00.00    0         java   
2603 root    25   0  612m 587m 1512 R 95.6 61.5   4:02.32    0         java   
……………………
可以多执行几次(更准确),并将结果输出到一个文件中,可加"-b”参数.
如果还想对CPU占用进行排序,可结合sort等排序命令(看sort命令的帮助).
然后记下这个PID为2603的线程,并对该java进程做kill -3操作:
kill -3 2577
做完上面的操作,你将得到两个重要的信息:一个是占用CPU最高的1个或多个pthread id(即上面的PID列,其实就是LWP对应的内核线程号)和Thread Dump信息(对于WebLogic Server来说,默认在标准输出中,如果在启动时指定了标准输出重定向到一个文件中,那么请找从该文件中找到本次kill -3操作生成的Thread Dump的完整信息,另存到一个文本文件中,文件名自定)。


从上一步拿到的占用CPU很高的1个或多个内核线程号(pid)和Thread Dump信息,根据WebLogic Server使用的JVM的供应商不同,分下面2个分析方法:
1.使用的是Sun HotSpot JVM
需将那个(些)内核线程号(pid)转换成16进制的值,在Thread Dump信息信息中搜索nid等于该值的线程即可,如下:
"ExecuteThread: '14' for queue: 'weblogic.kernel.Default'" daemon prio=1 tid=0x09d11df0 nid=0xa2b runnable [0x8a127000..0x8a1281a8]
        at java.lang.StrictMath.exp(Native Method)
        at java.lang.Math.exp(Math.java:234)
        at tdy218.alg.DeadLoop.service(DeadLoop.java:17)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        …………………
由于JVM使用的glibc版本等原因,Sun HotSpot JVM 1.4.2 update 11(包含该版本)的threaddump信息中不包含nid,这时需要升级Sun HotSpot JVM 1.4.2 update 11的小版本即可,如: update 12,在1.4.2这个大版中,也是从这个版本开始支持发生OutOfMemoryError故障时生成HeadDump文件的。
2.使用的是Oracle JRockit JVM
只接拿那个(些)内核线程号(pid) 的值,在Thread Dump信息信息中搜索tid等于该值的线程即可(从 JRockit 的 70SP4RP2 和 81SP2RP1 以后的版本起,就可实现此映射,Linux下WebLogic Server自带的JRockit R26.3就是在他们之后的版本),因为JRockit JVM的Thread Dump信息中不包含nid的值,不过JRockit JVM提供一个更简单的tid,等于那个(些)内核线程号(pid)的值,而且是十进制的,无需进行进制转换。如下:
"ExecuteThread: '14' for queue: 'weblogic.kernel.Default'" id=25 idx=0x32 tid=2603 prio=5 alive, in native, daemon
    at <unknown>(???.c)@0xb7fc4402
    at ptWaitForEvent+45(:0)@0xb7e92b31
    at vmtWaitUntilNotSoftSuspended+70(:0)@0xb7e9e436
    at tsCheckTransitToJava+26(:0)@0xb7e9e50a
    at java/lang/StrictMath.exp(D)D(Native Method)
    at java/lang/Math.exp(D)D(Math.java:234)[optimized]
    at tdy218/alg/DeadLoop.service(Ljavax/servlet
    /http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
    (DeadLoop.java:17)
     ………………………

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-193326-1-1.html 上篇帖子: Weblogic在Linux下启动特别慢及进入控制台慢的解决方法 下篇帖子: Linux下Weblogic 11g R1安装和配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表