微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐