当前位置:   article > 正文

java内存及线程问题排查常用命令_java 线程使用内存

java 线程使用内存

0. 观察进程的上下文切换

  1. vmstat 1 3
  2. 代表每秒收集一次性能指标,总共获取3次
  3. procs
  4. r:等待运行的进程数
  5. b:处于非中断睡眠状态的进程数
  6. memory
  7. swpd:虚拟内存使用情况
  8. free:空闲的内存
  9. buff:用来作为缓冲的内存数
  10. cache:缓存大小
  11. swap
  12. si:从磁盘交换到内存的交换页数量
  13. so:从内存交换到磁盘的交换页数量
  14. io
  15. bi:发送到块设备的块数
  16. bo:从块设备接收到的块数
  17. system
  18. in:每秒中断数
  19. cs:每秒上下文切换次数
  20. cpu
  21. us:用户CPU使用时间
  22. sy:内核CPU系统使用时间
  23. id:空闲时间
  24. wa:等待I/O时间
  25. st:运行虚拟机窃取的时间

1. 监测该进程的内存使用情况

  1. pidstat -p 31759 -r 1 3
  2. 其中pidstat的参数-p用于指定进程ID,-r表示监控内存的使用情况,1表示每秒的意思,3则表示采样次数。
  3. Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页;
  4. Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页;
  5. VSZ:虚拟地址大小,虚拟内存使用KB;
  6. RSS:常驻集合大小,非交换区内存使用KB。

2. jstat 监测Java应用程序的实时运行情况

  1. 参数
  2. -class:显示ClassLoad的相关信息;
  3. -compiler:显示JIT编译的相关信息;
  4. -gc:显示和gc相关的堆信息;
  5. -gccapacity:显示各个代的容量以及使用情况;
  6. -gcmetacapacity:显示Metaspace的大小;
  7. -gcnew:显示新生代信息;
  8. -gcnewcapacity:显示新生代大小和使用情况;
  9. -gcold:显示老年代和永久代的信息;
  10. -gcoldcapacity :显示老年代的大小;
  11. -gcutil:显示垃圾收集信息;
  12. -gccause:显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;
  13. -printcompilation:输出JIT编译的方法信息。
  14. 例:jstat -gc 31759
  15. S0C:年轻代中To Survivor的容量(单位KB);
  16. S1C:年轻代中From Survivor的容量(单位KB);
  17. S0U:年轻代中To Survivor目前已使用空间(单位KB);
  18. S1U:年轻代中From Survivor目前已使用空间(单位KB);
  19. EC:年轻代中Eden的容量(单位KB);
  20. EU:年轻代中Eden目前已使用空间(单位KB);
  21. OC:Old代的容量(单位KB);
  22. OU:Old代目前已使用空间(单位KB);
  23. MC:Metaspace的容量(单位KB);
  24. MU:Metaspace目前已使用空间(单位KB);
  25. YGC:从应用程序启动到采样时年轻代中gc次数;
  26. YGCT:从应用程序启动到采样时年轻代中gc所用时间(s);
  27. FGC:从应用程序启动到采样时old代(全gc)gc次数;
  28. FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s);
  29. GCT:从应用程序启动到采样时gc用的总时间(s)。

3. jstack 线程堆栈分析工具

        使用 在线线程分析

 jstack -l 14096 >/mnt/data/thread.txt

4. jmap查看堆内存初始化配置信息以及堆内存的使用情况

  1. jmap -heap 31759
  2. #查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
  3. jmap -histo:live 31759 | more
  4. #导出并使用jvisualvm和mat分析
  5. jmap -dump:format=b,file=heap.hprof 31759

5. GC日志

        在线分析

        gcviewer分析

         gceasy分析 ​​​​​​  ​​​​​​

  1. #开启参数
  2. -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./gclogs
  3. 一个垃圾收集器在不同场景下表现出的性能也不一样,那么如何评价一个垃圾收集器的性能好坏呢?我们可以借助一些指标。
  4. 吞吐量:这里的吞吐量是指应用程序所花费的时间和系统总运行时间的比值。我们可以按照这个公式来计算GC的吞吐量:系统总运行时间=应用程序耗时+GC耗时。如果系统运行了100分钟,GC耗时1分钟,则系统吞吐量为99%。GC的吞吐量一般不能低于95%。
  5. 停顿时间:指垃圾收集器正在运行时,应用程序的暂停时间。对于串行回收器而言,停顿时间可能会比较长;而使用并发回收器,由于垃圾收集器和应用程序交替运行,程序的停顿时间就会变短,但其效率很可能不如独占垃圾收集器,系统的吞吐量也很可能会降低。
  6. 垃圾回收频率:多久发生一次指垃圾回收呢?通常垃圾回收的频率越低越好,增大堆内存空间可以有效降低垃圾回收发生的频率,但同时也意味着堆积的回收对象越多,最终也会增加回收时的停顿时间。所以我们只要适当地增大堆内存空间,保证正常的垃圾回收频率即可

5. jinfo查看jvm运行参数

  1. 示例一: no option
  2. 命令:jinfo pid
  3. 描述:输出当前 jvm 进程的全部参数和系统属性
  4. 示例二: -flag name
  5. 命令:jinfo -flag name pid
  6. 描述:输出对应名称的参数
  7. 使用该命令,可以查看指定的 jvm 参数的值。如:查看当前 jvm 进程是否开启打印 GC 日志。
  8. 例:jinfo -flag XX:PretenureSizeThreshold 16410
  9. 示例三:-flag [+|-]name
  10. 命令:jinfo -flag [+|-]name pid
  11. 描述:开启或者关闭对应名称的参数
  12. 使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。
  13. 例:jinfo -flag +PrintGC 5283
  14. 示例四:-flag name=value
  15. 命令:jinfo -flag name=value pid
  16. 描述:修改指定参数的值。
  17. 同示例三,但示例三主要是针对 boolean 值的参数设置的。如果是设置 value值,则需要使用 name=value 的形式。
  18. 示例五: -flags
  19. 命令:jinfo -flags pid
  20. 描述:输出全部的参数
  21. 示例六:-sysprops
  22. 命令:jinfo -sysprops pid
  23. 描述:输出当前 jvm 进行的全部的系统属性

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

闽ICP备14008679号