zoukankan      html  css  js  c++  java
  • 如何抓取Thread Dump小结(转)

    当系统性能出现问题时,需要从各个方面来查看网络环境、主机资源、查看最经变更的代码等。如果是想从代码层面解决问题,那么最有效的方法就是查看相关dump文件。
    如果是使用IBM JDK(我默认你是在aix环境下),那么可以使用kill -3 “进程号”,这种恐吓的方式来生成dump文件。可以用IBM提供的工具jca.jar来查看Thread dump文件。利用IBM 提供的heap分析工具。
    javacore文件(关于cpu的)和heapdump文件(关于内存的)

    tips:IBM jdk1.6下没有jstack工具

    oracle jdk下,我们通过以下步骤完成上面两个dump文件的分析。
    对于heapdump文件可以大致分为三个步骤操作:
    1、查看java相关进程的ID
    C:Usersjiangwh>jps
    1864 Jps
    1464 JConsole
    2、创建heapdump文件
    C:Usersjiangwh>jmap -dump:format=b,file=jconsole.dump 1464
    Dumping heap to C:Usersjiangwhjconsole.dump ...
    Heap dump file created
    3、分析heapdump文件
    C:Usersjiangwh>jhat jconsole.dump
    Reading from jconsole.dump...
    Dump file created Thu May 23 21:37:28 CST 2013
    Snapshot read, resolving...
    Resolving 105445 objects...
    Chasing references, expect 21 dots.....................
    Eliminating duplicate references.....................
    Snapshot resolved.
    Started HTTP server on port 7000
    Server is ready.
    通过浏览器访问http://localhost:7000/ 可以获取当前内存中创建的对象,这个明显没有IBM的分析工具好,IBM的工具可以从ROOT一直分析到最后一个有关联的对象,对象出现统计的也比较好,比较直观!
    对于threaddump文件查看是比较单间的,直接使用jstack命令去搞定。jstack 1464 其中1464为java进程的id。
    分析性能时的其他工具。在Oracle的jdk中还有一个jstat命令,利用该命令可以查看jvm的gc情况
    jstat -gc 1464 20 10 该语句表示对线程1464进行gc监控每20ms一次,共计执行10次
    http://www.2cto.com/kf/201306/223734.html

    当服务器挂起,崩溃或者性能底下时,就需要抓取服务器的线程堆栈(Thread Dump)用于后续的分析.
    Thread dump提供了当前活动的线程的快照. 它提供了JVM中所有Java线程的栈跟踪信息
    有很多方式可用于获取Thread Dump, 一些是操作系统特定的命令.


     

    操作系统命令获取ThreadDump:

    Windows:
    1.      转向服务器的标准输出窗口并按下Control + Break组合键, 之后需要将线程堆栈复制到文件中

    UNIX/ Linux

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

    1.      ps –ef  | grep java

    2.      kill -3 <pid>

     注意一定要谨慎, 一步不慎就可能让服务器进程被杀死!


    JVM 自带的工具获取线程堆栈:

    JDK自带命令行工具获取PID并做ThreadDump:

    1.         jps

    2.         jstack <pid>

    使用JVisualVM:

    Threads 标签页àThreadDump按钮.


     

    WebLogic 自带的获取 thread dump的工具:

    1. webLogic.Admin 工具

    a. 打开命令提示符, 通过运行<DOMAIN_HOME>/bin/setDomain.env设置相关类路径

    b. 执行下面的命令

    java weblogic.Admin -url t3://localhost:7001 -username weblogic -password weblogic1 THREAD_DUMP

    注意: Thread Dump 会打印到标准输出, 如nohup日志或者进程窗口.

    2. 使用 Admin Console

    a. 登录 Admin Console , 点击对应的服务器

    b. 点击Server à Monitoring àThreads

    c. 点击: Dump Thread Stack 按钮

    3. 使用WLST (WebLogic Scripting Tool)

    connect(‘weblogic’,'weblogic1’,’t3://localhost:7001’)
    cd(‘Servers’)
    cd(‘AdminServer’)
    threadDump()
    disconnect()
    exit()
    注意: 线程堆栈将会保存在运行wlst的当前目录下.

    4. 使用utils.ThreadDumper

    用法:

    C:eawlserver_10.3serverlib>java -cp weblogic.jar utils.ThreadDumper

    Broadcast Thread dumps disabled: must specify weblogic.debug.dumpThreadAddr and

    weblogic.debug.dumpThreadPort

    Exception in thread "main" java.lang.IllegalArgumentException: Port out of range

    :-1

            at java.net.DatagramPacket.setPort(Unknown Source)

            at java.net.DatagramPacket.<init>(Unknown Source)

            at java.net.DatagramPacket.<init>(Unknown Source)

            at utils.ThreadDumper.sendDumpMsg(ThreadDumper.java:124)

            at utils.ThreadDumper.main(ThreadDumper.java:145)


     

    5. 如果服务器是作为Windows服务的方式运行, 请运行下列命令:

    WL_HOMEineasvc -dump -svcname:service-name


     

    其它一些获取Thread Dump的工具有jrcmd, jrmc(JRockit VM自带) ,Samurai, JProfiler等, 还可通过JMX编程的方式获取, 如JDK自带示例代码:

    $JAVA_HOMEdemomanagementFullThreadDump

    http://www.blogjava.net/beansoft/archive/2011/12/30/367584.html

    http://blog.sina.com.cn/s/blog_5f53615f0100zllb.html 

    http://www.blogjava.net/jzone/articles/303979.html

    http://blog.sina.com.cn/s/blog_6ed93640010114a4.html

  • 相关阅读:
    Maven 在pom.xml的build中配置resources,来防止我们资源导出失败的问题
    JavaWeb
    MySQL
    JavaScript
    Caused by: org.apache.ibatis.exceptions.PersistenceExceptiong 更新IDEA后报错
    Loading class `com.mysql.jdbc.Driver‘. This is deprecated.警告处理,jdbc更新处
    mybatis+oracle添加数据时如果数据存在就更新,如果不存在就插入
    条件查询器Wrapper
    查询和删除
    时间和悲观锁
  • 原文地址:https://www.cnblogs.com/softidea/p/4160334.html
Copyright © 2011-2022 走看看