• java中虚拟机命令:jstack使用方法


    Stack Trace for Java,用于生成虚拟机当前的线程快照信息,包含每一条线程的堆栈信息。该命令通常用于定位线程停顿原因,如线程死锁,死循环,请求外部资源导致的长时间等待,当出现线程停顿时,可通过stack查看每个线程的堆栈信息,进而分析停顿原因,如果Java程序崩溃生成core文件,jstack也可以获得Java stack和native stack的信息,从而轻松知道程序如何崩溃和在何处发生崩溃,另外jstack还可以附属到正在运行的Java程序,查看stack信息。

    命令格式: 
    jstack [ option ] pid 

    常用参数: 

    -l 除堆栈外,显示锁的附加信息
    -F 当请求不被响应时,强制输出线程堆栈
    -m 混合模式,打印java和本地C++调用的堆栈信息

    1.top查找出哪个进程消耗的cpu高。执行top命令,默认是进程视图,其中PID是进程号
    co_ad2 18 0 1817m 776m 9712 S 3.3 4.9 12:03.24 java
    co_ad 21 0 3028m 2.5g 9432 S 1.0 16.3 6629:44 ja


    这里我们分析21125这个java进程
    2.top中shift+h 或“H”查找出哪个线程消耗的cpu高
    先输入top,然后再按shift+h 或“H”,此时打开的是线程视图,pid为线程号
    co_ad2 15 0 1807m 630m 9492 S 1.3 4.0 0:05.12 java
    co_ad2_s 15 0 1360m 560m 9176 S 0.3 3.6 0:46.72 java

    这里我们分析21233这个线程,并且注意的是,这个线程是属于21125这个进程的。

    3.使用jstack命令输出这一时刻的线程栈,保存到文件,命名为jstack.log。注意:输出线程栈和保存top命令快照尽量同时进行。
    由于jstack.log文件记录的线程ID是16进制,需要将top命令展示的线程号转换为16进制。

    4. jstack查找这个线程的信息
    jstack [进程]|grep -A 10 [线程的16进制]
    即: jstack 21125|grep -A 10 52f1

    -A 10表示查找到所在行的后10行。21233用计算器转换为16进制52f1,注意字母是小写。
    结果:

    "http-8081-11" daemon prio=10 tid=0x00002aab049a1800 nid=0x52bb in Object.wait() [0x0000000042c75000]
    java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:416)

    在结果中查找52f1,可看到当前线程在做什么。

    本文转自:http://www.iteye.com/topic/1114219

  • 相关阅读:
    JS_Boolean Logic
    js String
    .Net之路(二)简介
    自考 操作系统概论计算机系统
    IT大学生最重要的五个能力
    数据库表及字段命名规范
    简述MVC分层
    .Net之路(一)概述
    设计模式(4)迭代器模式
    .Net之路(三)如何连接数据库?
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/8468754.html
Copyright © 2020-2023  润新知