zoukankan      html  css  js  c++  java
  • Linux下获取java堆栈文件并进行分析

    当服务器内存飙升或者cpu负载飙升的时候,可以使用如下步骤排查问题:

    1、终端输入top命令,键盘大写的情况下按P(cpu负载率从高到低排序)或者M(内存使用率从高到低排序),可以查看导致cpu或者内存飙升的java pid。

    2、jstack PID号 > jstack.log

    上面的命令可以保存当前时刻的线程栈到 jstack.log 文件中(保存在当前路径下)

    3、分析栈文件

    3.1 grep 'java.lang.Thread.State' jstack.log  | wc -l

    上述命令可以统计java.lang.Thread.State出现的次数

    3.2  grep -A 1 'java.lang.Thread.State' jstack.log  | grep -v 'java.lang.Thread.State' | sort | uniq -c |sort -n

    该命令可以将线程栈文件的状态按次数排序显示

    4、jmap -dump:format=b,file=heap.log pid

    上述命令可以保存当前的堆情况到heap.log文件中。

    5、将heap.log传输到windows系统下,复制一份,后缀改成.hprof

    下载Eclipse的内存分析工具,地址:https://www.eclipse.org/mat/downloads.php

    下载完成后,双击MemoryAnalyzer.exe,点击Open a Heap Dump

    选择桌面上的堆文件,点击打开:

    选择第一个内存分析报告,然后点Finish:

    就会打开一个总体情况页面:

    点击左下角的Table Of Contents,里面有多种分析供选择:

     每一个选项几乎都有直观的饼状图显示对象的占用情况:

    当然也有线程的堆使用情况分析,可以方便地找到占用大量内存的线程,找到真正导致内存、cpu飙升的罪魁祸首!

  • 相关阅读:
    LightOJ 1422 Halloween Costumes(区间dp)
    zoj 3537 Cake(区间dp)
    POJ 2955 Brackets(区间dp)
    HDU 1058 Humble Numbers(dp)
    uva 10934 Dropping water balloons(转载)
    树形dp
    Manacher算法求回文半径
    poj-1236.network of schools(强连通分量 + 图的入度出度)
    hdu-2255.奔小康赚大钱(最大权二分匹配)
    poj-2289.jamies contact groups(二分答案 + 二分多重匹配)
  • 原文地址:https://www.cnblogs.com/stm32stm32/p/10539992.html
Copyright © 2011-2022 走看看