JVM实践及排查总结

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,双非大四,春招努力找工作中…”);
📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正!共同进步,共同成长✊”);
🌟System.out.println(“💡如果文章对您有所帮助,希望您可以三连支持一下博主噢🔥”);
🌈System.out.println("🚀正在完成计划中:努力找工作 ");

JVM是什么

jvm是运行Java二进制字节码的环境
好处:一次编写,到处执行;自动内存管理,垃圾回收

组成部分:类加载子系统、运行时数据区、执行引擎、本地方法接口

运行流程

  1. 源代码编译成clss文件后,由类加载子系统进行对class文件编译成二进制字节码文件;
  2. 运行时数据区会把字节码文件加载到内存空间;
  3. 执行引擎会把字节码翻译成底层的系统指令;
  4. 本地方法接口会调用本地方法完成指令的执行。

JVM调优的参数值在哪里可以设置

war包部署可以在tomacat中设置

  • 修改TOMCAT_HOME/bin/catalina.sh文件

jar包部署可以在启动参数中设置

  • 通常在linux系统下直接加参数启动springboot项目

常用的JVM调优参数有什么

堆大小的设置: 物理内存的1/64 ~ 1/4
-Xms:堆初始大小
-Xmx:堆最大大小

虚拟机栈的设置: 每个线程默认1m的内存,但一般256k够用
-Xss线程栈大小,-Xss256k

年轻代空间比例设置: 默认8:1:1
-XXSurvivorRatio=8,表示survivor:eden=2:8

年轻代晋升老年代阈值:默认15,大小0~15
-XX:MaxTenuringThreshold=15

设置垃圾回收器
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseG1GC

常用的JVM调优工具

命令工具

  • jps:进程状态信息
  • jstack:查看Java进程内线程的堆栈信息
  • jmap:查看堆栈信息
  • jhat:堆转储快照分析工具
  • jstat:JVM统计监测工具

可视化工具

  • jconsole:对jvm的内存、线程、类的监控
  • VisualVM:监控线程、内存情况

使用示例

  • 查看Java进程:jps
  • 查看Java进程6563的堆栈信息:jstack 6563
  • 查看Java进程6563的堆信息:jmap - heap 6563
  • 输出Java进程6563的dump文件:map -dump:format=b,file=myheap.hprof 6563

JVM内存溢出的排查思路

  1. 获取堆内存快照dump
  2. visualVM分析dump文件
  3. 通过对信息的情况,定位内存溢出问题

怎么获取dump文件?
方法一:利用jvm参数

  • -XX:+HeapDumpOutOfMemoryError -XX:HeapDumpPath=/home/app/dumps/

方法二:利用jmap命令

  • jmap -dump:format=b,file=heap.hprof pid进程号

方法三:利用arthas命令

  • heapdump /path/xiaofu.hprof

CPU飙高的排查思路

  1. top命令定位是哪个进程占用cpu过高
  2. ps H -eo pid,tid,%cpu | grep 进程pid号 定位这个进程中的哪个线程占用cpu
  3. jstack 进程pid号
  4. 将定位到的线程id转换成16机制,在第三步中查找对用的线程

cpu飙高发生的原因可能有什么?

  1. while的无限循环会导致CPU使用率飙升
  2. 频繁的Young GC会导致CPU使用率飙升
  3. System.currentTimeMillis() 做计时,大概占用了10-20%cpu,会不停的调用CPU,占用率飙升

最后

慢慢的来,别着急!学会有质量的走过每一步


我是代码不会敲的小符,希望认识更多有经验的大佬,也在努力摸索出自己的道路
欢迎添加小符微信:A13781678921,一起加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码不会敲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值