博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java内存分析工具jstack
阅读量:5895 次
发布时间:2019-06-19

本文共 1243 字,大约阅读时间需要 4 分钟。

hot3.png

内存溢出,CPU居高不下,死锁,我们怎么去分析呢,如果使用C或者C++,有gdb,java有吗,当然,那就是jstack 下面我写个死循环的例子,如下 JavaApplication1.java

public class JavaApplication1 {    /**     * @param args the command line arguments     */    public static void main(String[] args) throws Exception {        // TODO code application logic here        System.out.println("Programe begin");        User u = new User();         u.GetUser();         System.out.println("Programe end");    }}

User.java

public class User {    public void GetUser() throws InterruptedException{       boolean isGetUser =false;       while(!isGetUser){        Thread.sleep(2000);        System.out.println("loop get user info");       }    }

很容易看到User中的GetUser是个死循环,当然我们开发实践中产生死循环的场景要复杂的多。那么我想定位到while代码块的位置怎么办呢?要是我们能看到jvm正在执行的堆栈是不是就迎刃而解了呢

jps  #打印正在运行的java程序,第一列为pid,第二列程序名称  32064 Main  33681 Jps  33614 JavaApplication1jstack 33614 #打印当前进程的堆栈,很容易我们就发现了如下信息"main" #1 prio=5 os_prio=31 tid=0x00007fe0a7802800 nid=0x1c03 waiting on condition [0x000070000fc73000]   java.lang.Thread.State: TIMED_WAITING (sleeping)	at java.lang.Thread.sleep(Native Method)	at javaapplication1.User.GetUser(User.java:16)	at javaapplication1.JavaApplication1.main(JavaApplication1.java:22)

转载于:https://my.oschina.net/weidedong/blog/787194

你可能感兴趣的文章
FreeRTOS的内存管理
查看>>
JSP----九大内置对象
查看>>
The Z-Index CSS Property: A Comprehensive Look | Smashing Coding
查看>>
Java中HashMap详解
查看>>
Office版本差别引发的语法问题
查看>>
Apache——访问控制
查看>>
web前端(10)—— 浮动,清除默认样式
查看>>
ggplot2 aes函数map到data笔记
查看>>
3450: Tyvj1952 Easy
查看>>
delphi基本语法
查看>>
.net请求Webservice简单实现天气预报功能
查看>>
Loj #3056. 「HNOI2019」多边形
查看>>
正则表达式匹配非需要匹配的字符串(标题自己都绕晕了)
查看>>
沙盒目录介绍
查看>>
260. Single Number III
查看>>
《C语言》-(流程控制:顺序结构、选择结构、循环结构)
查看>>
Hadoop生态圈-Kafka的完全分布式部署
查看>>
《玩转Django2.0》读书笔记-探究视图
查看>>
SOCK_STREAM & SOCK_DGRAM
查看>>
css的border的solid
查看>>