Jvm调优实战笔记

一、基础命令


  1. jps 查看所有java进程

  1. jinfo 进程号 查看该线程相关信息

3、jstat 统计信息(数据跟踪信息)

jstat -gc 进程号 查看该线程在内存中每一块占用的大小

jstat -gc 进程号 时间(毫秒) 更新频率

4、jstack 跟踪线程

jstack 进程号

  1. top 查看当前系统中每个进程占用cpu和内存的信息

top -Hp 进程号 查看当前进程中所有线程的CPU和内存占用情况

CPU飚高生产环境解决思路:

top 查看所有进程中CPU最高的,拿到进程编号

top -HP 进程编号 找到CPU占用最高的线程,拿到线程编号

jstack 进程号 与上一步拿到的线程编号进行对应

看看有问题的线程到底是哪个

找到之后判断起始GC线程还是业务线程

业务线程:查看业务线程中调用了哪些方法,看是哪个方法不断循环占用CPU

GC线程:一定是在频繁的GC,排查原因是什么?

例:双十一秒杀来了一大波流量,撑不住扩机器;内存回收来会回收去总是回收不掉,这种情况就是有内存泄漏

频繁Full GC

6、jmap

作用一:查看堆内存中哪些对象占用情况

jmap -histo 进程号

jmap -histo 4878 | head -20

20表示取前20行

对比两次GC后对象数量

注意:JMAP命令不能再生产环境直接执行,会stp拿出当前进程所有对象信息

方法1:来的访问复制一份,摘下来执行

方法2:测试环境压测

作用二:产生堆内存存储文件

jmap -dump:format=b,file=20230301.hprof 进程号

文件分析工具可以使用jdk自带的

图形界面工具jvisualvm

可以直接读取jmap导出的文件分析,也可以远程连接LInux服务器分析排查问题

图形界面中分析出问题

压测环境中观察出问题

机器做了负载均衡,摘出其中一台,导出其堆存储文件

TCP down复制一份到生产环境,另一份到测试环境

图形界面工具:arthas 阿里开源
1、arthas启动方式 java -jar arthas-boot.jar
  1. help :查看arthas所有命令

dashboard :(仪表盘)

heap dump =》 jmap

thread 列出当前进程所有线程占用CPU和内存情况

thread -b 寻找死锁
jvm 查看各参数设置 =》 jinfo

more 类名.java 读取java文件
jad 类名 反编译

redefine 定义class

可以在不停止项目的情况下,修改java文件,通过javac 类名.java编译 再通过redefine 定义class上传到远程

trace 类名 方法名 :查看该方法执行时间

分布式链路追踪工具:zipkin、skywalking

7、-XX:+HeadDumpOnOutOfMemoryError 什么时候发生OOM了,什么时候自动帮忙导出堆内存存储文件

8、-Xms20M 堆内存

9、-Xmx20M 栈内存

10、-XX:+UseParallelGc 垃圾回收器

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柚几哥哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值