jstack和jmap1

● Jps:是java提供的一个显示当前所有java进程pid的命令

● Jstat 命令:查看堆内存各部分的使用量和GC的情况。jstat -gc 进程id 可以查看GC日志

● Jstack命令:主要是用来查看java线程的堆栈信息,分析线程有没有死锁,比如下面的这个两个线程互相等待对方释放锁而产生的死锁信息

● Jmap:主要是用来dump java进程内存快照的,便于我们去分析内存中对象的存储情况

arthas :
分析死锁 thread b
分析慢执行 trace 类路径 方法名 '#cost>时间(ms)'

 

 

内存文件分析工具:

● MemoryAnalyzer:这是一款Eclipse提供的内存分析工具,可以结合Eclipse使用,也可独立使用

● JProfiler,:这是由ej-technologies GmbH公司开发的一款内存分析工具,可以结合IDEA使用

● Jconsole:是一个用java写的GUI程序,用来监控VM,并可监控远程的VM

留存内存文件有两种方式:

1.是配置jvm启动参数: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=xxxx(文件导出路径),JVM发生OOM时,自动生成dump文件;

2.是采用jmap命令,手动进行内存dump。

 JVM内存溢出问题排查-腾讯云开发者社区-腾讯云 (tencent.com)

一.分析cpu过高场景

1. top找出cpu占用高的进程pid ,按P键排序

2. top -Hp pid 查看cpu占用率高的线程

3. printf "%x\n" 153586  将线程id转换16进制打印

4. jstack -l 进程id

a.打印出堆栈信息,分析线程有没有死锁 。 调用链多的可以用 Arthas  thread b 命令查看死锁线程

b.如果是GC线程,则有可能发生了内存泄漏或溢出

5.jmap -dump:file=dump.hprof 进程id   导出dump文件,使用内存文件分析工具

6.导入dump文件,导入后有各种详细的展示视图。比如大对象,数量多的对象,泄露猜测等。

7.排查代码

cpu过高原因:

1.死循环或长时间执行的方法

2. 过度使用线程,大量线程频繁切换

3.内存泄漏,频繁GC

posted @   好友33  阅读(26)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示