51,411
社区成员
发帖
与我相关
我的任务
分享Java服务,突然CPU变高,观察CMSGC变得频繁,top -Hp pid发现一些线程变得比较高,但不是稳定的高,不是某个线程99%那种,也不是死循环。这是咋回事,重启之后就好了。这是内存泄露?还是内存不够了?应该怎么查?
一般虚拟机内存不足的时候就会GC尝试释放占用的内存频发GC会引起CPU变高, 另外当服务器内存占用满的时候空闲内存不足CPU会尝试整理内存。建议你先看看服务器内存是不是100%占满了,确认是不是占满后引起CPU工作持续走高,我曾经遇到过应用B做大量计算突然占用很大内存后引发应用A内存不足频发GC。如果内存不是100,那么说明是JVM的设置的内存不足引起了频繁GC,可以先使用JSTACK命令查看下堆栈信息, 看看是不是有线程卡死,造成线程引用对象不GC占用大量内存,也看看是不是有死循环操作引发的问题。如果也没有发现,也有可能是某个业务本身需要占用大量内存引起内存不足频繁GC, 那么调大应用的可用内存再观察一段时间
些