jvm内存调优

本文详细介绍了JVM内存调优的过程,包括如何查看JVM内存设置、监控垃圾回收情况,以及如何处理内存溢出。通过jps、jstat、jmap和jstack等工具分析内存和线程状态。探讨了JVM调优原则,如优先调整堆大小,选择合适的垃圾收集器(如CMS、G1),并调整CMS和G1的相关参数以优化性能。此外,还提到了内存分析工具如MAT,以及在线GC分析平台和工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jps # 查看java所有项目的主进程id
jinfo -flags 12345 #查看具体进程的jvm设置的参数
jstat -gc 12345 1000 10 # 1s钟一次打映10次当前java项目的jvm内存空间的动态垃圾回收 情况

s0c s1c s0u s1u s0区总量与使用量,s1区总量与使用量
ec eu new区总量与使用量
oc ou old区总量 与使用量
mc mu metaspace区总量 与 使用量
ygc ygct yang gc的次数 yang gc 耗时
fgc fgct full gc的次数 fullgc的耗时
gct gc的总耗时间

jmap -dump:format=b,fiile=123.hprof 12345 oom的时候可以通过jmap -dump出内存溢出影像,然后通过mat工具分析,或者在项目启动的时候加入命令,在发生内存溢出的时候也会dump出内存的影像。可以通过mat工具进行分析找出原因;
上面 12345 就是 jps 下的主进程id

jstack 12345 查找死循环与死锁,通过jstack 导出jvm里面的所有线程信息。如果发现cpu标高,很有可能就是因为发生了死循环之类的, 哪这个时候就需要jstack定位是哪个线程出了问题。
先通过top -p 12345 -H 找到当前java系统所有的线程id
然后结合jstack 12345 > 12345线程.txt 导出的线程信息比对,top里面比较高cpu的线程id由10进制转换成16进制的id号,再到导出文件里面去找具体的详细信息,再查出具体的原因。

JVM 调优原则:
1.优先调整堆的大小让服务器自己来选择,然后设置最大,最小堆空间的值的,设置相同的两个值,防止内存抖动。
2.如果内存小于100,使用串行手机器
3.如果是单核,并且没有停顿时间的要求,串行或者让jvm自己选 。
4.如果我们容许停顿时间超过1秒,选择并行(年轻代 parell scaverge, 老年代用parell old的垃圾收集器)或者jvm自己选(其实java8 默认的也是这两个收集器)。
5.如果响应时间最重要,停顿时间不能超过1秒,则使用并发收集器(cms),使用cms作 为老年代收集器的时候,年轻代用parellnew 收集器, 或者用g1 收集器,g1既可以用来做老年代,也可以用来做年轻代的垃圾收集器,但是cms是采用的是标记清楚的算法,所以会存在内存碎片,所以cms适合老年代对像比较固定的系统。

cms的参数命令有哪些:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值