ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

jvm 性能优化(指令篇)

2021-07-15 20:02:31  阅读:147  来源: 互联网

标签:java 查看 3.7 3.5 参数 指令 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

标签:java,查看,3.7,3.5,参数,指令,jvm,优化
来源: https://blog.csdn.net/ytsydmx/article/details/118767191

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有