- JVM 常用指令
jmap -heap pid. hprof文件
JProfile, Arthas.
jvisualvm. 导入 hprof文件,dump后分析
jstack 分析死锁
top -p pid. 找出内存占用情况.
top -p -pid 找出进程号
转为16进制得到xxx,此时线程id的16进制表示为.
jstack pid | grep -A 10 xxx ,线程id. 可以查看堆栈信息中导致cpu飙升的原因.
废弃了,Arthas好用.
jinfo 也可以用jvisualvm代替。 可以查看当前的jvm参数.
- 评估gc压力
jstat -gc -pid 1000(时间间隔) 100(获取多少次)
Screenshot 2024-12-02 at 22.32.50.png
-
jstat gccapacity pid
堆内存统计 -
jstat -gcnew pid
新生代垃圾回收统计
-XX:CICompilerCount=4 -XX:ConcGCThreads=3 -XX:G1ConcRefinementThreads=10
-XX:G1HeapRegionSize=1048576
-XX:InitialHeapSize=268435456
-XX:MarkStackSize=4194304
-XX:MaxHeapSize=4294967296
-XX:MaxNewSize=2576351232
-XX:MinHeapDeltaBytes=1048576
-XX:NonNMethodCodeHeapSize=5835340 -XX:NonProfiledCodeHeapSize=122911450 -XX:ProfiledCodeHeapSize=122911450 -XX:ReservedCodeCacheSize=251658240
-XX:+SegmentedCodeCache
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC
-
新生代垃圾回收统计
Screenshot 2024-12-02 at 22.49.04.png
-
老年代垃圾回收统计
Screenshot 2024-12-02 at 22.47.23.png
-参数介绍:
S0C 第一个幸存者大小,MC方法区大小,MU方法区使用的空间.
YGC 年轻代垃圾回收次数
FGC 老年代回收次数.
- 优化思路就是让每次youngc之后存活的对象小于survivor的50%. 尽可能留在年轻代,不触发空间担保进入老年代,减少fullgc频率,避免频繁fullgc对于jvm的影响.
minor gc后,对象会从eden区域移动到s0区域,s0满了之后放到s1区域,如果younggc过后,s0,s1区域还是放不下,触发老空间担保,放入到老年代中.
首先是对象放在Eden区:之后存满了之后进行垃圾回收(YGC)之后放入到s0区,之后满了在进行回收放入到s1区域,往复,之后超过十五次放入到老年代中,如果比较大对象那么先放入到Eden中之后s0,1放不下那么放入到老年代,如果超大对象(文件)直接放入到老年代。









网友评论