一.简述
1.jstack命令
能得到运行java程序的java stack和native stack的信息。可以轻松得知当前线程的运行情况。
2.jmap命令
得到运行java程序的内存分配的详细情况。例如实例个数,大小等。尤其是这个命令可以导出一份binary heap dump的bin文件,这个文件能够直接用Eclipse Memory Anayliser来分析,并找出潜在的内存泄漏的地方。
3.jstat命令
是一个比较实用的一个命令,可以观察到classloader,compiler,gc相关信息。可以时时监控资源和性能
二.jstack命令
1.执行命令:top
讲解:
- 输入top命令后按一下大写的P按cpu占用率排序
- 输入top命令后按数字1,查看的cpu的核数为几核
- top命令显示的是你的程序占用的cpu的总数,也就是说如果你是4核cpu那么cpu最高占用率可达400%,top里显示的是把所有使用率加起来
看到Tasks代表当前展示的是进程信息;得到占用cpu最高的进程PID为:15920
2.执行命令:jstack 进程PID > quanran_dump
eg: jstack 15920 > quanran_dump
- 讲解:这是将当前进程的栈运行情况写进文件,此文件保存在当前你执行命令的目录
3.可以执行以下三个命令得到进程PID 15920里的所有线程资源占用情况,进而得到线程的TID
3.1:执行命令:top -Hp 进程PID
eg: top -Hp 15920
看到Threads代表当前展示的是线程信息;此处CPU占用率最高的是29%,它的线程TID就是PID列展示的值:15941。
3.2:执行命令:ps -mp 进程PID -o THREAD,tid,time
eg: ps -mp 15920 -o THREAD,tid,time
此处CPU占用率最高的是12.2%,它的线程TID是:15941。
3.3:在top命令里按shift+h
eg: 先执行命令top,看到展示的进程信息后,在按shift+h,会弹出3.1命令的线程展示图,在按shift+h又回切回进程展示图。
其中看到的线程展示图结果:此处CPU占用率最高的是12.2%,它的线程TID是:15941。
4:执行命令:printf “%x\n” 线程tid , 得到16进制线程pid。
eg:printf “%x\n” 15941 -> 得到16进制线程pid: 3e45
5:执行命令:vim quanran_dump 或 less -m quanran_dump
eg:打开quanran_dump文件后,搜索3e45关键字,看3e45关键字所在行的后面的行,判断是什么问题导致的cpu占用率过高。
三.jmap命令
四.jstat命令
五.一些现成的案例分析