如何使用JDK自带jvisualvm监控工具

(jconsole、jvisualvm插件可查看堆内存变化情况,线程状态,CPU使用情况,分析线程死锁等,可监控本地和远程服务器的JVM,本地监控无须进行配置,下面是笔者实际操作的远程监控的配置步骤)

,其中port=9999,可自行设置,注意添加一个未使用的端口即可

2、修改linux服务器中jdk目录的配置文件

输入地址和端口,和用户名密码,其中端口为catalina.sh文件中配置的远程服务端口;用户名和口令为jmxremote.password文件中的账号信息

 连接可查看监控信息

(备注:参考资料:《全栈性能测试修炼宝典JMeter实战》9.8 JVM监控)

JDK发展至今已经非常强大,除了我们用来开发使用外实际上还提供了一系列的工具!

JDK很多小工具名字和Linux的命令比较像,jps就是其中的典型,和Linux的ps很像,功能也像。

命令详解:jps还可以通过RMI协议查询开启了RMI服务的运行虚拟机进程状态,参数hostid为RMI注册表中注册的主机名。

-q:只输出LVMID,省略主类的名称;

-m:输出虚拟机进程启动传递给主类main()方法的参数;

-l:输出主类全名,如果进程执行的是jar包,输出jar路径;

-v:输出虚拟机启动时的JVM参数;

监视虚拟机各种运行状态信息,可以显示本地或者远程虚拟机进程中的欸类加载、内存、垃圾收集、即时编译等运行数据.

其中interval和count表示间隔时间和间隔次数,省略表示查询一次。

-class:监视类加载、卸载数量、总空间以及类转正所耗费的时间;

-gc:监视Java堆状况,包括Eden区、2个Survivor区、老年代、等容量,已用空间,垃圾收集时间;

-gccapacity:与-gc参数基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间;

-gcutil:与-gc基本相同,输出的是Java堆已使用空间占总空间百分比;

S0、S1、E表示的是2个survivor和Eden使用比例,O、M表示老年代和元空间使用比例,CCS压缩使用比例,YGC、YGCT分别表示Young GC的次数和时间,FGC、FGCT同理,GCT则表示总时间。这些参数如果知道英语名字就能很好的记住。

用于生成虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每条线程正在执行的方法堆栈集合。可以用来定位线程长时间停顿的原因。

-F:当正常输出的请求不被响应时,强制输出线程堆栈;

-l:除堆栈外,显示关于锁的附加线程;

-m:如果调用到本地方法栈的话,可以显示C/C++的堆栈;

虚拟机监控工具,可以选择指定的进程进行观察,运行如下图:

选择进去过后就可以看到监控结果了,如下图:

是jdk自带的可视化监控工具,功能很强大,同时还可以安装各种扩展插件,运行如下图:

JDK发展至今已经有很多这类的工具了,在JDK的bin目录下基本上都是。这里只是简单介绍了几个简单好用的作为入门学习,更多的工具大家有兴趣可以去测试运行一下。

Java程序员日常学习笔记,如理解有误欢迎各位交流讨论!

jdk自己就给咱们提供了能够查询jvm的指令java

查看正在运行的Java应用程序的扩展参数eclipse

jstat命令能够查看堆内存各部分的使用量,以及加载类的数量。命令的格式以下:spa

  1. Bytes:所占用空间大小
  2. Bytes:未加载占用空间
  1. S0C:第一个幸存区的大小
  2. S1C:第二个幸存区的大小
  3. S0U:第一个幸存区的使用大小
  4. S1U:第二个幸存区的使用大小
  5. EU:伊甸园区的使用大小
  6. MC:方法区大小(元空间)
  7. CCSC:压缩类空间大小
  8. CCSU:压缩类空间使用大小
  9. YGC:年轻代垃圾回收次数
  10. YGCT:年轻代垃圾回收消耗时间
  11. FGC:老年代垃圾回收次数
  12. FGCT:老年代垃圾回收消耗时间
  13. GCT:垃圾回收消耗总时间
  1. NGCMN:新生代最小容量
  2. NGCMX:新生代最大容量
  3. NGC:当前新生代容量
  4. S0C:第一个幸存区大小
  5. S1C:第二个幸存区的大小
  6. OGCMN:老年代最小容量
  7. OGCMX:老年代最大容量
  8. OGC:当前老年代大小
  9. MCMN:最小元数据容量
  10. MCMX:最大元数据容量
  11. MC:当前元数据空间大小
  12. CCSMN:最小压缩类空间大小
  13. CCSMX:最大压缩类空间大小
  14. CCSC:当前压缩类空间大小
  15. YGC:年轻代gc次数
  16. FGC:老年代GC次数
  1. S0C:第一个幸存区的大小
  2. S1C:第二个幸存区的大小
  3. S0U:第一个幸存区的使用大小
  4. S1U:第二个幸存区的使用大小
  5. TT:对象在新生代存活的次数
  6. MTT:对象在新生代存活的最大次数
  7. DSS:指望的幸存区大小
  8. EU:伊甸园区的使用大小
  9. YGC:年轻代垃圾回收次数
  10. YGCT:年轻代垃圾回收消耗时间
  1. NGCMN:新生代最小容量
  2. NGCMX:新生代最大容量
  3. NGC:当前新生代容量
  4. S0CMX:最大幸存1区大小
  5. S0C:当前幸存1区大小
  6. S1CMX:最大幸存2区大小
  7. S1C:当前幸存2区大小
  8. ECMX:最大伊甸园区大小
  9. EC:当前伊甸园区大小
  10. YGC:年轻代垃圾回收次数
  11. FGC:老年代回收次数
  1. CCSC:压缩类空间大小
  2. CCSU:压缩类空间使用大小
  3. YGC:年轻代垃圾回收次数
  4. FGC:老年代垃圾回收次数
  5. FGCT:老年代垃圾回收消耗时间
  6. GCT:垃圾回收消耗总时间
  1. OGCMN:老年代最小容量
  2. OGCMX:老年代最大容量
  3. OGC:当前老年代大小
  4. YGC:年轻代垃圾回收次数
  5. FGC:老年代垃圾回收次数
  6. FGCT:老年代垃圾回收消耗时间
  7. GCT:垃圾回收消耗总时间
  1. MCMN:最小元数据容量
  2. MCMX:最大元数据容量
  3. MC:当前元数据空间大小
  4. CCSMN:最小压缩类空间大小
  5. CCSMX:最大压缩类空间大小
  6. CCSC:当前压缩类空间大小
  7. YGC:年轻代垃圾回收次数
  8. FGC:老年代垃圾回收次数
  9. FGCT:老年代垃圾回收消耗时间
  10. GCT:垃圾回收消耗总时间
  1. S0:幸存1区当前使用比例
  2. S1:幸存2区当前使用比例
  3. YGC:年轻代垃圾回收次数
  4. FGC:老年代垃圾回收次数
  5. FGCT:老年代垃圾回收消耗时间
  6. GCT:垃圾回收消耗总时间

此命令能够用来查看内存信息。

实例个数以及占用内存大小

打开log.txt,文件内容以下:

  1. bytes:占用空间大小

使用VisualVM查看刚刚生成的对内存文件

也能够设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来)

借助一个代码:经过死循环来不断往内存添加数据,同时设置vm的内存大小

运行发生内存溢出的异常,而后会把自动导出dump文件在指定的目录

 而后咱们能够经过借助图形化界面VisualVM来查看dump文件

看到String这三个占的内存那么多,咱们就能够快速定位到发生内存溢出的位置(不要说eclipse也能够看到发生溢出的位置,生产环境可不是运行在eclipse上的)

咱们程序模拟一个死锁的代码

其实VisualVM底层也是走jdk提供的那些命令的,就像数据库的图形化界面同样的意思。

我要回帖

更多关于 手机自带监控在哪里 的文章