1 基于JDK命令行工具的监控

1.1 JVM的参数类型

1.1.1 标准参数

  在JVM的各个版本基本上保持不变,很稳定的。

  -help

  -server -client

  -version -showversion

  -cp -classpath

1.1.2 X参数

  非标准化参数

  -Xint: 解释执行

  -Xcomp: 第一次使用就编译成本地代码

  -Xmixed: 混合模式,JVM自己来决定是否编译成本地代码

1.1.3 XX参数

  非标准化参数

  相对不稳定

  主要用于JVM调优和Debug

  Boolean类型

  格式:-XX:[+-]<name>表示启用或者禁用name属性

  比如:-XX:+UseConcMarkSweepGC

     -XX:+UseG1GC

  非Boolean类型

  格式:-XX:<name>=<value>表示name属性的值是value

  比如:-XX:MaxGCPauseMillis=500

     -XX:GCTimeRatio=19

  -Xmx  -Xms

  -Xms等价于-XX:InitialHeapSize

  -Xmx等价于-XX:MaxHeapSize

  

命令 作用
ps -ef|grep java 查看java的进程相关信息,以及启动的配置信息
jinfo -flag MaxHeapSize pid 查看该pid的JVM最大的堆内存大小
jinfo -flag ThreadStackSize pid 查看该pid的JVM每个线程的栈大小

1.2 运行时JVM参数查看

  -XX:+PrintFlagsInitial

    初始值

  -XX:+PrintFlagsFinal

    最终值

  

  =  表示默认值

  :=  被用户或者JVM修改后的值

  -XX:+UnlockExperimentalVMOptions  解锁实验参数

  -XX:+UnlockDiagnosticVMOptions    解锁诊断参数

  -XX:+PrintCommandLineFlags     打印命令行参数

  jps

  类似与Linux服务器上的ps功能。

  相关命令:

  jps -help  查看帮助

  jps -l  查看正在运行的列表

  jps命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html

    jinfo命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html#BCGEBFDD

  jstack命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html#BABGJDIF

  jmap命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html#CEGCECJB

  jinfo

  查看正在运行的JVM里面的参数值。

  相关命令:jinfo -flag MaxHeapSize pid  查看正在运行的进程为PID的JVM的最大堆内存

       jinfo -flags pid  查看正在运行的进程为PID的JVM的已经被修改过的JVM的参数值

  查看最大内存

  

  查看垃圾回收器

  

1.3 jstat查看虚拟机统计信息

    类装载

    jstat命令详细参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html#BEHHGFAE

    参考命令:jstat -class pid  查看类加载的信息

         jstat -class pid 1000 10  每隔1000ms打印一次类加载信息,打印10次。

    垃圾收集

    参考命令:jstat -gc pid  查看进程号为pid的JVM的垃圾收集信息,具体响应详细参数jstat命令详细参考

         jstat -gc pid 1000 10  每隔1000ms打印一次进程号为pid的JVM的垃圾收集信息,打印10次。

    JIT编译

    参考指令:jstat -compiler pid  查看进程号为pid的JVM的即时编译信息。

2 Jmap+MAT实战内存溢出

2.1 模拟对内存溢出的代码参考:

  

2.2 如何导出内存映像文件

2.2.1 内存溢出自动导出

  程序启动的时候,设置以下参数

  -XX:+HeapDumpOnOutOfMemoryError

  -XX:HeapDumpPath=./

2.2.2 使用jmap命令手动导出

  jmap -dump:format=b,file=heap.hprof pid  导出进程号为pid的JVM的dump文件

  jmap -heap pid               打印进程号为pid的JVM的堆信息

  jmap命令

  option: -heap, -clstats, -dump:<dump-options>, -F

  更多详细命令参考:jmap命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html#CEGCECJB

2.3 MAT分析内存溢出

  MAT工具下载地址:http://www.eclipse.org/mat/downloads.php

  将步骤2.2导出的dump文件,用MAT工具打开分析。  

2.4 JAVA线程状态

  NEW  WAITING  RUNNABLE  TIMED_WAITING  BLOCKED  TERMINATED

  更多详细信息参考:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr034.html

3 实战死循环导致CPU飙高

  查找死循环导致CPU飙高问题的常用指令:

    top -p pid -H          #打印该进程的所有线程,查看占用CPU资源超高的线程ID,该线程ID为10进制,要用下面的命令将其转换为16进制,然后在stack信息中查找详细信息

    printf "%x" 十进制的线程id    #将十进制的线程id转换为16进制

    jstack pid               #打印程序的stack信息,从中找出CPU占用超过的线程ID的stack信息

  也可以参考:https://www.cnblogs.com/alsodzy/p/10188691.html,来排查CPU飙高的问题。

Java虚拟机性能监控与调优的更多相关文章

  1. Java虚拟机性能监控与调优实战

    From:  https://c.m.163.com/news/a/D7B0C6Q40511PFUO.html?spss=newsapp&fromhistory=1 Java虚拟机性能监控与调 ...

  2. Java项目性能监控和调优工具-Javamelody的学习总结

    1.简介: JavaMelody能够在运行环境监测Java或Java EE应用程序服务器.并以图表的形式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http ...

  3. JAVA性能监控与调优参考文档链接

    JAVA性能监控与调优参考文档链接 jdk8工具集 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmlTroub ...

  4. Java生产环境下性能监控与调优详解

    1:JVM字节码指令与 javapjavap <options> <classes>cd monitor_tuning/target/classes/org/alanhou/m ...

  5. Java生产环境下性能监控与调优详解视频教程 百度云 网盘

    集数合计:9章Java视频教程详情描述:A0193<Java生产环境下性能监控与调优详解视频教程>软件开发只是第一步,上线后的性能监控与调优才是更为重要的一步本课程将为你讲解如何在生产环境 ...

  6. <JVM下篇:性能监控与调优篇>补充:使用OQL语言查询对象信息

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  7. <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  8. <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  9. <JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

随机推荐

  1. Android工程导入Unity3D(避坑版)

    最近与各种牛逼的项目管理软件打交道,比如SourceTree,要看英文版的才看得懂,中文反而不会用!... 这篇博客适合没怎么接触过安卓的小伙伴们,网上也有很多相关的教程,但是大多都没有具体的操作或则 ...

  2. 第十四次ScrumMeeting博客

    第十四次ScrumMeeting博客 本次会议于12月3日(日)22时整在3公寓725房间召开,持续30分钟. 与会人员:刘畅.辛德泰.张安澜.方科栋. 1. 每个人的工作(有Issue的内容和链接) ...

  3. 探路者 FInal冲刺中间产物

    版本控制 https://git.coding.net/clairewyd/toReadSnake.git 版本控制报告 http://www.cnblogs.com/linym762/p/79976 ...

  4. C++:构造函数3——浅拷贝和深拷贝

    一.默认拷贝构造函数 拷贝构造函数是一种特殊的构造函数(详情见:http://www.cnblogs.com/duwenxing/p/7429777.html),如果用户在定义类时没有显式地编写拷贝构 ...

  5. 新手学ajax2

    今天主要解决了一个困扰两天的ajax问题,就是关于从服务器获取数据时的同步和异步问题 , xhr.open("GET", url,false): 这里有三个参数“GET”表示获取的 ...

  6. Wpf+数据库代码封装+策略模式封装

    运行界面: 数据库保存的题: 数据库封装代码: using System; using System.Collections.Generic; using System.Linq; using Sys ...

  7. SDPA: Toward a Stateful Data Plane in Software-Defined Networking

    文章名称:SDPA: Toward a Stateful Data Plane in Software-Defined Networking 发表时间:2017 期刊来源:IEEE/ACM Trans ...

  8. beat冲刺(4/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(4/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 ppt模板 接下来的计划 做好机动. ...

  9. 1001. A+B Format (20)的解题思路以及多源代码文件的尝试编写

    前言 这几天刚学了多源代码文件的编译,因为想尝试使用一下这种方法,所以想用此编写这次作业的程序.正好可以learning by doing,在做当中学习新知识.(编译器为Dev-C++) github ...

  10. MongoDB中的数据导出为excel CSV 文件

    1.打开命令行,进入我们所安装的mongodb路径下的bin文件夹 2.我们采用bin文件夹下的mongoexport方法进行导出, mongoexport -d myDB -c user -f _i ...