• Linux下Java性能监控


    Linux下Java性能监控

    一、JVM堆内存使用监控

      获取thread dump的3种方法:

      1)使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun.management>HotSpotDiagnostic>操作>dumpHeap中,点击 dumpHeap按钮。生成的dump文件在java应用的根目录下面。
      2)jmap -heap 1234 (1234为进程号)

      3)cmd ->jvisualvm,远程连接,选择堆Dump生成heap dump日志文件

    二、占用cpu高的线程

        top+jastack
        1)top查找出哪个进程消耗的cpu高
    21125 co_ad2   18   0 1817m 776m 9712S  3.3  4.9 12:03.24java                                                                                          
    5284co_ad    21   0 3028m 2.5g 9432S  1.0 16.3  6629:44java                                                                                          
    21994mysql    15   0 449m  88m 5072 S 1.0  0.6  67582:38mysqld                                                                                        
    8657 co_sparr 19   0 2678m 892m 9220S  0.3  5.7 103:06.13 java
        2)top中shift+h查找出哪个线程消耗的cpu高
    先输入top,然后再按shift+h
    21233 co_ad2   15   0 1807m 630m 9492S  1.3 4.0   0:05.12java                                                                                          
    20503 co_ad2_s 15   0 1360m 560m 9176S  0.3 3.6   0:46.72java                                                                                          
    21134 co_ad2   15   0 1807m 630m 9492S  0.3 4.0   0:00.72java                                                                                          
    22673 co_ad2   15   0 1807m 630m 9492S  0.3 4.0   0:03.12 java
    这里我们分析21233这个线程,并且注意的是,这个线程是属于21125这个进程的。
        3)jstack查找这个线程的信息
    jstack [进程]|grep -A 10 [线程的16进制]
    即:
    jastack 21125|grep -A 10 52f1  
      -A 10表示查找到所在行的后10行。21233用计算器转换为16进制52f1,注意字母是小写。
    结果:
    1. "http-8081-11" daemon prio=10 tid=0x00002aab049a1800 nid=0x52bb in Object.wait() [0x0000000042c75000]
    2. java.lang.Thread.State: WAITING (on object monitor)
    3. at java.lang.Object.wait(Native Method)
    4. at java.lang.Object.wait(Object.java:485)
    5. at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:416)

    三、Thread Dump诊断java应用问题

      首先查找到服务器的进程号(process id), 然后获取堆栈.

      1)ps –ef  | grep java

      2)kill -3 <pid>   (发送一个SIGQUIT信号给Java应用之后,通常会有当前的Thread Dump输出。输出一次Thread Dump,结束进程并等待3秒让应用释放资源)

    (些Java应用服务器是在控制台上运行,如Weblogic,为了方便获取threaddump信息,在weblogic启动的时候,会将其标准输出重定 向到一个文件,用"nohup ./startWebLogic .sh > log.out &"命令,执行"kill -3 <pid>",Thread dump就会输出到log.out里。Tomcat的Thread Dump会输出到命令行控制台或者logs的catalina.out文件里。为了反映线程状态的动态变化,需要接连做三次以上thread dump,每次间隔10-20s。)
     
  • 相关阅读:
    vscode安装插件时报错
    css-flex整理
    java学习之路--String类的基本方法
    java学习之路--面试之并发基础
    java学习之路--面试之多线程基础
    java学习之路--多线程实现的方法
    java学习之路--简单基础的面试题
    java学习之路
    jquery中remove()和empty()是区别
    创建html新元素的三种方法
  • 原文地址:https://www.cnblogs.com/TestWorld/p/5231874.html
Copyright © 2020-2023  润新知