jvm 性能优化(指令篇)

1 性能优化的步骤

  • 性能监控

  • 性能分析

  • 性能调优

2 性能评价指标

  • 停顿时间(响应时间)
    提交请求和返回该请求的响应之间使用的时间

  • 吞吐量

  • 对单位时间内完成的工作(请求)量

  • 在gc中,运行用户代码时间占总运行时间的比例

  • 并发数
    同一时刻,对服务器有实际交互的请求数

  • 内存占用
    java 堆区所占的内存大小

3 性能监控

3.1 查看当前运行的java进程

jps
  -m 输出给虚拟机进程启动时传递给主类的参数
  -v 列出虚拟机进程启动时的jvm参数

注意:进程的本地虚拟机id与操作系统的进程id是一致的

3.2 查看jvm统计信息

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
  • 与类装载相关

  • class:显示ClassLoader相关信息:类的装载,卸载

  • 垃圾回收相关

  • gc:显示与gc相关的堆信息

  • gcutil: 显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比

3.3 怎样判断是否出现oom

  • 我们可以比较java进程启动时间以及总gc时间(gct)比例,得出gc时间占运行时间的比例

  • 比例超过20%,说明目前堆的压力较大,超过90%说明随时都可能抛出oom异常

命令为

jstat - gc -t pid 1000 10 表示的是每隔1000毫秒,进行显示进程号为pid的gc信息,共显示十次

3.4 jstat 判断内存溢出

  • 使用jstat获取多行性能数据,取数据中ou列(即已占用的老年代内存)的最小值

  • 获取多组ou最小值,如果呈现上涨趋势,则说明老年代使用量不断上涨,因此有可能存在内存泄露

3.5 实时查看并修改jvm参数配置

3.5.1 查看曾经赋过值的一些参数
jinfo -flags PID
3.5.2 查看某个java进程的具体参数的值
jinfo  -flag  具体参数 PID
3.5.3 修改boolean类型的值
jinfo -flag [+][-] 具体参数 PID
3.5.4 针对非boolean类型的值
jinfo -flag 具体参数=值 PID

3.6 扩展

3.6.1 查看jvm参数启动的初始值
java -XX:+PrintFlagsInitial
3.6.2 查看所有jvm参数的最终值
java -XX:+PrintFlagsFinal
3.6.3 查看被用户设置过的详细信息
java -XX:+PrintCommandLineFlags

3.7 jmap 的使用

3.7.1 生成dump文件
jmap -dump 
3.7.2 输出堆空间的信息
jmap -heap 
3.7.3 输出堆中对象的统计信息
jmap -histo
3.7.4 怎样导出dump文件
  • 主动使用
jmap -dump:format=b,file=<file文件> PID

抓取存活(常用)

jmap -dump:live,format=b,file=<file文件> PID
  • 自动方式

常用在报oom时使用,导出应用程序的当前堆快照

-XX:+HeapDumpOnOutOfMemoryError

指定对快照的保存位置

-XX:HeapDumpPath=<filename.hprof>

3.8 jvm线程快照

jstack PID

主要有以下状态

  • 死锁(Deadlock)

  • 等待资源(waiting on condition)

  • 等待获取监视器 (waiting on monitor entry)

  • 阻塞 (blocked)

  • 执行中 (runnable)

  • 暂停 (suspended)

3.9 jcmd

jcmd 可以替换jmap

查看支持的操作

jcmd PID help

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值