zoukankan      html  css  js  c++  java
  • 采集HeapDump、ThreadDump

    一、Windows

    1、Control + Break

    转向服务器的标准输出窗口并按下Control + Break组合键, 之后需要将线程堆栈、内存堆栈信息复制到文件中。

    示例还是中的示例:

    了解String类的intern()方法--从Java7开始,字符串常量池从Heap空间移动到Metaspace空间

    下面是heap信息:

    2、jmap

    1、先运行目标程序

    2、查看pid

    3、用jmap抓取jmap -dump:live,format=b,file=test.bin 9328

    3、jstack

     

     4、JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))见JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))

    二、UNIX/ Linux

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

    1. ps –ef | grep java

    2. kill -3 <pid>

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


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

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

    1. jps

    2.jmap

    jmap -dump:live,format=b,file=/home/appdeploy/appTest/test.bin 81301

    生成的结果为:

    3、jstack

    [appdeploy@cnsz22vl2175 appTest]$ jstack 81301 >a.bin

    将Thread Dump导入到a.bin文件

    详细介绍见三、jdk工具之jstack(Java Stack Trace)

    4.使用JVisualVM

    Threads 标签页下的ThreadDump按钮.

    5、JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))见JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))

    6、jvisualVM通过JMX连接远程服务器,再用jvisual导出hprof文件

    7、jvisualVM通过jstatd连接远程服务器,再用jvisual导出hprof文件

     

    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:\bea\wlserver_10.3\server\lib>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_HOME\bin\beasvc -dump -svcname:service-name


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

    $JAVA_HOME\demo\management\FullThreadDump

  • 相关阅读:
    Mac突然没有声音但是重启后可以恢复
    boot分区剩余空间不足
    oh-my-zsh
    使用cAdvisor+Influxdb+Grafana监控系统
    使用MTR命令诊断网络问题
    Linux测试上行和下载速率
    HDU 4398 Template Library Management (最优页面调度算法)
    2014年百度之星 资格赛题解
    HDU 3001 Travelling 状态DP
    FZU 1202 信与信封问题 二分图匹配
  • 原文地址:https://www.cnblogs.com/duanxz/p/2753619.html
Copyright © 2011-2022 走看看