当前位置:   article > 正文

linux Java问题诊断和排查工具(查看JVM参数、内存使用情况及分析等)_linux 查看jvm内存使用情况

linux 查看jvm内存使用情况

主要针对Linux环境的jvm 内存问题排查

1、找出排查的Jar包pid

 指令  jps -l 查看本机java进程信息

       

         innovent-boss-service.jar 是需要排查的java应用

        jps -ml查看更详细的运行参数

        

  1. 126912 innovent-boss-service.jar --spring.profiles.active=prod --server.port=9320 --spring.redis.host=10.0.2.81 --spring.redis.port=6379 -XX:+UseParallelGC
  2. 63347 -- process information unavailable
  3. 36787 innovent-mic-service.jar --spring.profiles.active=test --server.port=9323 --spring.redis.host=10.0.2.81 --spring.redis.port=6379 -XX:+UseParallelGC
  4. 64340 innovent-system-extend.jar --spring.profiles.active=prod --spring.cloud.nacos.discovery.server-addr=171.16.0.190:8848 --spring.cloud.nacos.config.server-addr=172.16.21.190:8848 --server.port=9213
  5. 86215 sun.tools.jps.Jps -ml

2、接着看jvm内存分配情况

    指令 jmap -heap 126912 查看jar包的内存分配情况

  1. using thread-local object allocation.
  2. Parallel GC with 2 thread(s) //使用的垃圾收集器 Parallel GC
  3. Heap Configuration: //堆内存初始化配饰
  4. MinHeapFreeRatio = 0 //堆最小空闲比率
  5. MaxHeapFreeRatio = 100//堆最大空闲比率
  6. MaxHeapSize = 4294967296 (4096.0MB)//堆最大大小
  7. NewSize = 1431306240 (1365.0MB)//堆新生代的默认大小
  8. MaxNewSize = 1431306240 (1365.0MB)//堆新生代的最大大小
  9. OldSize = 2863661056 (2731.0MB)//老年代大小
  10. NewRatio = 2//新生代和老年代的大小比率
  11. SurvivorRatio = 8//年轻代中Eden区域survivor区的大小比率
  12. MetaspaceSize = 21807104 (20.796875MB)// 元空间大小
  13. CompressedClassSpaceSize = 1073741824 (1024.0MB)//压缩空间大小
  14. MaxMetaspaceSize = 17592186044415 MB// 最大元空间大小
  15. G1HeapRegionSize = 0 (0.0MB)
  16. Heap Usage:
  17. PS Young Generation
  18. Eden Space:
  19. capacity = 1393557504 (1329.0MB)
  20. used = 1344963592 (1282.6572341918945MB)
  21. free = 48593912 (46.34276580810547MB)
  22. 96.51295968336302% used
  23. From Space:
  24. capacity = 18350080 (17.5MB)
  25. used = 12300992 (11.73114013671875MB)
  26. free = 6049088 (5.76885986328125MB)
  27. 67.03508649553571% used
  28. To Space:
  29. capacity = 18874368 (18.0MB)
  30. used = 0 (0.0MB)
  31. free = 18874368 (18.0MB)
  32. 0.0% used
  33. PS Old Generation
  34. capacity = 2863661056 (2731.0MB)
  35. used = 92418968 (88.1375961303711MB)
  36. free = 2771242088 (2642.862403869629MB)
  37. 3.2273012131223395% used
  38. 48060 interned Strings occupying 4988304 bytes.

3.查看堆中对象数量和大小

[root@Dashboard-Boss01 ~]# jstack 126912

  1. 126912: Unable to open socket file: target process not responding or HotSpot VM not loaded
  2. The -F option can be used when the target process is not responding

我们报错了 是应为当前是用户root ,而我是用jenkins发布的应用 所以得用发布应用的用户执行

查看应用执行用户 ps -aux|grep innovent-boss-service.jar

  1. [root@Dashboard-Boss01 ~]# ps -aux|grep innovent-boss-service.jar
  2. root 86275 0.0 0.0 112812 992 pts/0 S+ 17:25 0:00 grep --color=auto innovent-boss-service.jar
  3. jenkins 126912 1.2 11.5 7038584 1915508 ? Sl Dec03 109:34 java -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=innovent-boss-service -Xms4g -Xmx4g -jar innovent-boss-service.jar --spring.profiles.active=prod --server.port=9320 --spring.redis.host=10.0.2.81 --spring.redis.port=6379 -XX:+UseParallelGC

可以看到我的执行用户是jenkins

切换用户 jenkins

4、查看垃圾回收情况

        jstat指令 6秒打印一次显示20行

  1. [root@Dashboard-Boss01 ~]# jstat -gc 126912 6000 20
  2. S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
  3. 17920.0 17408.0 8673.0 0.0 1362432.0 66175.5 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  4. 17920.0 17408.0 8673.0 0.0 1362432.0 66175.5 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  5. 17920.0 17408.0 8673.0 0.0 1362432.0 66175.5 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  6. 17920.0 17408.0 8673.0 0.0 1362432.0 67017.3 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  7. 17920.0 17408.0 8673.0 0.0 1362432.0 67025.5 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  8. 17920.0 17408.0 8673.0 0.0 1362432.0 71978.9 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  9. 17920.0 17408.0 8673.0 0.0 1362432.0 72292.7 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  10. 17920.0 17408.0 8673.0 0.0 1362432.0 72320.4 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  11. 17920.0 17408.0 8673.0 0.0 1362432.0 73537.7 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  12. 17920.0 17408.0 8673.0 0.0 1362432.0 73537.7 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  13. 17920.0 17408.0 8673.0 0.0 1362432.0 75100.9 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  14. 17920.0 17408.0 8673.0 0.0 1362432.0 75100.9 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746
  15. 17920.0 17408.0 8673.0 0.0 1362432.0 75100.9 2796544.0 90376.2 124120.0 116553.5 15360.0 14086.8 162 3.086 4 0.660 3.746

 S0C:年轻代第一个survivor的容量(字节)
S1C:年轻代第二个survivor的容量(字节)
S0U:年轻代第一个survivor已使用的容量(字节)
S1U:年轻代第二个survivor已使用的容量(字节)
EC:年轻代中Eden的空间(字节)
EU:年代代中Eden已使用的空间(字节)
OC:老年代的容量(字节)
OU:老年代中已使用的空间(字节)
PC:永久代的容量
PU:永久代已使用的容量
YGC:从应用程序启动到采样时年轻代中GC的次数
YGCT:从应用程序启动到采样时年轻代中GC所使用的时间(单位:S)
FGC:从应用程序启动到采样时老年代中GC(FULL GC)的次数
FGCT:从应用程序启动到采样时老年代中GC所使用的时间(单位:S)

 5、GC日志分析-我们先通过一条《深入理解java虚拟机》一书中的一个例子gc日志来回顾一下gc日志的基本知识,下面是一条gc日志:

        从左至右,各个信息的意思为:

  1. 33.125: 自虚拟机启动以来经过的秒数,单位为秒;
  2. GC: 垃圾收集的停顿类型为不需要STW(Stop The World )。如果是Full GC说明发生了STW。如果是Full GC (System)说明是调用System.gc()方法所触发的收集。
  3. DefNew:表示GC发生的区域在新生代。这个名称和所使用的收集器密切相关。可以有Tenured、Perm、ParNew、PSYoungGen等等。其中hotspot虚拟机使用的是PSYoungGen代表新生代
  4. 3324k->152k(3712k):GC前该区域(DefNew)已使用容量->GC后该区域已使用容量(该内存区域总容量)
  5. 0.0025925 secs:该内存区域(DefNew)GC所占用的时间。
  6. 3324k->152k(11904k):GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/554184
推荐阅读
相关标签
  

闽ICP备14008679号