测者的性能测试手册:JVM的监控利器

每次聊起性能测试,最后的终结话题就是怎么做优化。其实在Java的复杂项目中都会有内存不足问题、内存泄露问题、线程死锁问题、CPU问题。这些问题工程测试或者是小压力的情况下有可能并不明显,很容易被忽视。但是到了生产环境,问题就暴露了,各种非功能bug会让你头疼不已。

今天,测者就把自己针对JVM监控、分析常用的工具发给总结一下,也许你就能找打一个你喜欢的。

jstat

jstat是JVM统计监测工具,主要用来监视java虚拟机的各种运行状态的工具。通过他可以监控虚拟机中class的装载、内存状况、GC、以及jit编译等很多运行时数据,是一个定位运行时过程的jvm性能重要工具。

  1. jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
  2. generalOption - 单个的常用的命令行选项,如-help, -options, 或 -version。
  3. outputOptions -一个或多个输出选项,由单个的statOption选项组成,可以和-t, -h, and -J等选项配合使用。
参数 作用 备注
class 用于查看类加载情况的统计 jstat -class pid:显示加载class的数量,及所占空间等信息。
compiler 查看HotSpot中即时编译器编译情况的统计 jstat -compiler pid:显示VM实时编译的数量等信息。
gccapacity 查看新生代、老生代及持久代的存储容量情况 jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小
gccause 查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因。 jstat -gccause:显示gc原因
gcnew 查看新生代垃圾收集的情况 jstat -gcnew pid:new对象的信息
gcnewcapacity 用于查看新生代的存储容量情况 jstat -gcnewcapacity pid:new对象的信息及其占用量
gcold 用于查看老生代及持久代发生GC的情况 jstat -gcold pid:old对象的信息
gcoldcapacity 用于查看老生代的容量 jstat -gcoldcapacity pid:old对象的信息及其占用量
gcpermcapacity 用于查看持久代的容量 jstat -gcpermcapacity pid: perm对象的信息及其占用量
gcutil 查看新生代、老生代及持代垃圾收集的情况 jstat -util pid:统计gc信息统计
printcompilation HotSpot编译方法的统计 jstat -printcompilation pid:当前VM执行的信息

jmap

jmap是java内存映射工具,jmap用于生成堆转储快照(heapdump文件或者dump文件),打印出制定java进程的内存情况。除了可以获取dump文件,还可以查询finalize执行队列以及JVM的堆和永久代的详细信息。

  1. jmap [ option ] pid
  2. jmap [ option ] executable core
  3. jmap [ option ] [server-id@]remote-hostname-or-IP

其中,参数如下(如果运行在64位JVM上,可能需要指定-J-d64命令选项参数):

  1. -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
  2. -finalizerinfo 打印正等候回收的对象的信息.
  3. -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
  4. -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
  5. -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
  6. -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
  7. -h | -help 打印辅助信息
  8. -J 传递参数给jmap启动的jvm.

jstack

jstack 可以针对当前java进程状态生产快照。该快照是当前Java虚拟机中每一条进程正在执行的方法堆栈的记录。是快速定位线程出现死锁、死循环、外部资源等待等长时间停止状态问题的很好的方法。

  1. jstack [ option ] pid
  2. jstack [ option ] executable core
  3. jstack [ option ] [server-id@]remote-hostname-or-IP

参数如下:

  1. -F当’jstack [-l] pid’没有相应的时候强制打印栈信息
  2. -l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
  3. -m打印java和native c/c++框架的所有栈信息.
  4. -h | -help打印帮助信息
  5. pid 需要被打印配置信息的java进程id,可以用jps查询.

jps

jps主要用来输出JVM中运行的进程状态信息。语法格式如下:

  1. jps [options] [hostid]

如果不指定hostid就默认为当前主机或服务器。参数如下:

  1. -q 不输出类名、Jar名和传入main方法的参数
  2. - l 输出main类或Jar的全限名
  3. -m 输出传入main方法的参数
  4. - v 输出传入JVM的参数

jinfo

jinfo可以获取java配置信息,比如:获取一些当前进程的jvm运行和启动信息等。命令格式:

  1. jinfo[option] pid

参数如下:

  1. -flag name 输出对应名称的参数
  2. -flag [+|-]name 开启或者关闭对应名称的参数
  3. -flag name=value 设定对应名称的参数
  4. -flags 输出全部的参数
  5. -sysprops 输出系统属性

测者的性能测试手册:JVM的监控利器的更多相关文章

  1. 测者的性能测试手册:Yourkit 监控JettyYourkit 监控Jetty

    Yourkit是收费工具,每一个email可以免费试用15天,觉得好的朋友可以自行选择购买 服务器端下载yourkit(java) Windows安装yourkit Java Profiler 201 ...

  2. 测者的性能测试手册:Web压力测试工具webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: wget http:/ ...

  3. 测者的性能测试手册:快速安装LoadRunner Linux上的Generator

    安装和初始化 安装包 上传Linux.zip(LoadRunner Generator for Linux.zip,后台回复loadrunner获取下载地址),然后通过如下命令: unzip Linu ...

  4. JVM进阶:JVM的监控利器

    每次聊起性能测试,最后的终极话题就是怎么做优化.其实在Java的复杂项目中都会有内存不足问题.内存泄露问题.线程死锁问题.CPU问题.这些问题在小压力的情况下有可能并不明显,很容易被忽视.但是真正到了 ...

  5. 【性能测试】:JVM内存监控策略的方法,以及监控结果说明

    JVM内存监控主要在稳定性压测期间,监控应用服务器内存泄露等问题: [JVM远程监控设置] 1.打开WAS控制台:https://ip:port/ibm/console/login.do 2.进入路径 ...

  6. jvm性能监控与故障处理工具

    jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具  类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功 ...

  7. Java虚拟机性能管理神器 - VisualVM(1) 简介 - JVM轻量级监控分析神器

    目录(?)[-] 一VisualVM是什么 二如何获取VisualVM 三获取那个版本 四VisualVM能做什么 显示JAVA应用程序配置和运行时环境 显示本地和远程JAVA应用程序运行状态 监控应 ...

  8. 第八章 JVM性能监控与故障处理工具(2)

    注意:该篇博客主要记录自<深入理解java虚拟机(第二版)> 说明:关于命令行的JVM性能监控与故障处理工具见<第七章 JVM性能监控与故障处理工具(1)> 1.图像化的故障处 ...

  9. 老技术新谈,Java应用监控利器JMX(2)

    各位坐稳扶好,我们要开车了.不过在开车之前,我们还是例行回顾一下上期分享的要点. 上期由于架不住来自于程序员内心的灵魂的拷问,于是我们潜心修炼,与 Java 应用监控利器 JMX 正式打了个照面. J ...

随机推荐

  1. HBase篇--初始Hbase

    一.前述 1.HBase,是一个高可靠性.高性能.面向列.可伸缩.实时读写的分布式数据库.2.利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量 ...

  2. java代码之美(8)---guava字符串工具

    guava字符串工具 在java开发过程中对字符串的处理是非常频繁的,google的guava工具对字符串的一些处理进行优化,使我们开发过程中让自己的代码看去更加美观,清爽. 一.Joiner 根据给 ...

  3. 如何通过js调用接口

    例如一个接口的返回值如下:var returnCitySN = {"cip": "221.192.178.158", "cid": &quo ...

  4. Android中,粗暴的方式,修改字体

    序 在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究. 那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我 ...

  5. Educational Codeforces Round 48 (Rated for Div. 2)——A. Death Note ##

    A. Death Note time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  6. Java开发知识之Java控制语句

    Java开发知识之Java控制语句 一丶复合语句 不管任何语言都有控制语句 if else if else whie do  while  for .... 首先讲解的是java的复合语句 1.什么是 ...

  7. Linux 文件权限于目录配置

    用户与用户组 我們以王三毛為例,王三毛這個『檔案』的擁有者為王三毛,他屬於王大毛這個群組, 而張小豬相對於王三毛,則只是一個『其他人(others)』而已. 不過,這裡有個特殊的人物要來介紹的,那就是 ...

  8. Linux find常用用法示例

    在此处只给出find的基本用法示例,都是平时我个人非常常用的搜索功能.如果有不理解的部分,则看后面的find运行机制详解对于理论的说明,也建议在看完这些基本示例后阅读一遍理论说明,它是本人翻译自fin ...

  9. nginx错误界面优化和日志管理

    nginx错误界面优化 在进行web访问的时候,经常会遇到网站打不开报错的情况,nginx默认的界面并不美观,我们可以通过重定向到自定义的错误页面,提升用户体验,比如淘宝的错误页面还有商品信息和广告. ...

  10. 第42章 发现(discovery) - Identity Server 4 中文文档(v1.0.0)

    可以在*https://baseaddress/.well-known/openid-configuration*找到发现文档.它包含有关IdentityServer的端点,密钥材料和功能的信息. 默 ...