
JVM
文章平均质量分 72
勿视人非
知道的少时,觉得自己什么都会;知道的多时,觉得自己什么都不会
展开
-
jvm jstat 命令
jstat可以查看JVM运行的实时监控信息,主要包括GC情况和内存堆的使用情况。语法jstat -options JVM进程ID或jstat -options JVM进程ID interval countinterval : 表示刷新时间间隔,单位ms。count : 表示一共刷新多少次,达到指定此次后,退出监控。常用的options参数class : 类装载、卸载数量、总空间及类状态消耗的事件gc : 监视Java堆的信息,包括Eden、Survivor、老年代、方法区(永.原创 2022-05-01 11:59:36 · 795 阅读 · 0 评论 -
jvm jmap 命令 和 MAT 工具
1. 查看heap(堆)内存中的实例数量和占用内存的大小命令:jmap -histo JVM进程ID直接使用上面的命令,打印的东西太多,可以使用下面的命令只显示前50行:jmap -histo JVM进程ID | head -n50或者使用下面的命令,通过翻页的方式查看:jmap -histo JVM进程ID | more如果想 只统计存活的对象 ,可以使用下面的命令,该命令会 先触发JVM执行GC(垃圾回收),然后再统计信息 :jmap -histo:live JVM进程ID2原创 2022-05-01 10:38:10 · 508 阅读 · 0 评论 -
jvm jstack 命令
jstack命令可以查看JVM内所有的线程运行情况。语法jstack [-l] -[e] pid参数说明:l : 打印关于锁的附加信息e : 打印关于线程的附加信息,这个参数用的较少常用的命令查看JVM中所有的线程运行情况jstack -l JVM进程ID | more当JVM中存在死锁时,在jstack输出信息的最后会有提示:统计线程数量搜索关键字java.lang.Thread.State,可以统计出线程总数jstack -l JVM进程ID | grep 'java原创 2022-04-30 23:50:59 · 761 阅读 · 0 评论 -
OOM分析与定位
OOM 即 out of memory(内存溢出),当程序运行时所需要的内存超出了JVM管理的最大内存就会导致内存溢出。经常与内存溢出一起被提及的概念还有内存泄漏(memory leak),内存泄漏一般是指资源应释放而未释放,内存应回收而未回收,造成系统资源或内存浪费。当内存泄漏累计之后,资源和内存会被逐渐耗光,导致程序运行越来越慢,可能会导致OOM,甚至程序奔溃。当内存溢出发生时,会抛出OutOfMemoryError或者StackOverflowError异常。但是当内存泄漏发生时,若还有资源和内.原创 2022-04-30 16:40:26 · 6543 阅读 · 0 评论 -
CPU高位运行问题定位
5. 根据线程信息判断是GC线程还是用户线程,如果是GC线程就查找频繁GC的原因(使用jstat命令查看GC情况,或者开启GC日志打印,再分析GC日志),如果是用户线程就查找相关代码。6. 如果每个线程占用的CPU都不是很高,那么有可能是线程太多,线程间频繁切换。命令查看进程中的线程信息,找到导致CPU高的线程ID(3. 上一步找到的线程ID是十进制的,而。命令,显示进程中的线程信息,同样按。命令查看线程信息,定位到具体线程。关于top命令的使用,可以查看。,即可找到占用CPU多的进程。原创 2022-04-30 16:10:54 · 1772 阅读 · 0 评论 -
频繁的Full GC的问题排查
Full GC没有明确的官方定义,有人认为需要对JVM能够用到的所有共享内存(堆、元空间/永久代、直接内存)进行GC才是Full GC;有人认为只要对整个堆进行了GC(新生代GC+老年代GC)就算是Full GC。在jatat命令的输出中,FGC表示老年代GC,个人倾向于第二种说法。原创 2022-05-01 12:14:28 · 6308 阅读 · 0 评论 -
JAVA线程死锁排查
造成死锁的原因死锁是指两个或两个以上的线程在执行过程中,因争夺锁而造成的一种互相等待的现象,若无外力作用,它们都将一直等待下去。造成死锁的示例有两把锁,lock1、lock2线程t1获取了锁lock1,等待锁lock2线程t2获取了锁lock2,等待锁lock1线程t1和t2相互等待对方已获取的锁,又不释放自己已获取的锁,导致两个线程相互等待,发生死锁。public class DeadlockTest { private final Object lock1 = new Obje原创 2022-04-30 17:14:18 · 789 阅读 · 0 评论