测者的性能测试手册:JVM的监控利器
测者的性能测试手册:JVM的监控利器
每次聊起性能测试,最后的终结话题就是怎么做优化。其实在Java的复杂项目中都会有内存不足问题、内存泄露问题、线程死锁问题、CPU问题。这些问题工程测试或者是小压力的情况下有可能并不明显,很容易被忽视。但是到了生产环境,问题就暴露了,各种非功能bug会让你头疼不已。
今天,测者就把自己针对JVM监控、分析常用的工具发给总结一下,也许你就能找打一个你喜欢的。
jstat
jstat是JVM统计监测工具,主要用来监视java虚拟机的各种运行状态的工具。通过他可以监控虚拟机中class的装载、内存状况、GC、以及jit编译等很多运行时数据,是一个定位运行时过程的jvm性能重要工具。
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]generalOption - 单个的常用的命令行选项,如-help, -options, 或 -version。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的堆和永久代的详细信息。
jmap [ option ] pidjmap [ option ] executable corejmap [ option ] [server-id@]remote-hostname-or-IP
其中,参数如下(如果运行在64位JVM上,可能需要指定-J-d64命令选项参数):
-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.-finalizerinfo 打印正等候回收的对象的信息.-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.-h | -help 打印辅助信息-J 传递参数给jmap启动的jvm.
jstack
jstack 可以针对当前java进程状态生产快照。该快照是当前Java虚拟机中每一条进程正在执行的方法堆栈的记录。是快速定位线程出现死锁、死循环、外部资源等待等长时间停止状态问题的很好的方法。
jstack [ option ] pidjstack [ option ] executable corejstack [ option ] [server-id@]remote-hostname-or-IP
参数如下:
-F当’jstack [-l] pid’没有相应的时候强制打印栈信息-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.-m打印java和native c/c++框架的所有栈信息.-h | -help打印帮助信息pid 需要被打印配置信息的java进程id,可以用jps查询.
jps
jps主要用来输出JVM中运行的进程状态信息。语法格式如下:
jps [options] [hostid]
如果不指定hostid就默认为当前主机或服务器。参数如下:
-q 不输出类名、Jar名和传入main方法的参数- l 输出main类或Jar的全限名-m 输出传入main方法的参数- v 输出传入JVM的参数
jinfo
jinfo可以获取java配置信息,比如:获取一些当前进程的jvm运行和启动信息等。命令格式:
jinfo[option] pid
参数如下:
-flag name 输出对应名称的参数-flag [+|-]name 开启或者关闭对应名称的参数-flag name=value 设定对应名称的参数-flags 输出全部的参数-sysprops 输出系统属性
测者的性能测试手册:JVM的监控利器的更多相关文章
- 测者的性能测试手册:Yourkit 监控JettyYourkit 监控Jetty
Yourkit是收费工具,每一个email可以免费试用15天,觉得好的朋友可以自行选择购买 服务器端下载yourkit(java) Windows安装yourkit Java Profiler 201 ...
- 测者的性能测试手册:Web压力测试工具webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: wget http:/ ...
- 测者的性能测试手册:快速安装LoadRunner Linux上的Generator
安装和初始化 安装包 上传Linux.zip(LoadRunner Generator for Linux.zip,后台回复loadrunner获取下载地址),然后通过如下命令: unzip Linu ...
- JVM进阶:JVM的监控利器
每次聊起性能测试,最后的终极话题就是怎么做优化.其实在Java的复杂项目中都会有内存不足问题.内存泄露问题.线程死锁问题.CPU问题.这些问题在小压力的情况下有可能并不明显,很容易被忽视.但是真正到了 ...
- 【性能测试】:JVM内存监控策略的方法,以及监控结果说明
JVM内存监控主要在稳定性压测期间,监控应用服务器内存泄露等问题: [JVM远程监控设置] 1.打开WAS控制台:https://ip:port/ibm/console/login.do 2.进入路径 ...
- jvm性能监控与故障处理工具
jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具 类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功 ...
- Java虚拟机性能管理神器 - VisualVM(1) 简介 - JVM轻量级监控分析神器
目录(?)[-] 一VisualVM是什么 二如何获取VisualVM 三获取那个版本 四VisualVM能做什么 显示JAVA应用程序配置和运行时环境 显示本地和远程JAVA应用程序运行状态 监控应 ...
- 第八章 JVM性能监控与故障处理工具(2)
注意:该篇博客主要记录自<深入理解java虚拟机(第二版)> 说明:关于命令行的JVM性能监控与故障处理工具见<第七章 JVM性能监控与故障处理工具(1)> 1.图像化的故障处 ...
- 老技术新谈,Java应用监控利器JMX(2)
各位坐稳扶好,我们要开车了.不过在开车之前,我们还是例行回顾一下上期分享的要点. 上期由于架不住来自于程序员内心的灵魂的拷问,于是我们潜心修炼,与 Java 应用监控利器 JMX 正式打了个照面. J ...
随机推荐
- AspNetCore taghelpers标签的使用
下面介绍几种常用的Tag标签 asp-for 类似于name asp-validation-for 类似于mvc下的验证,将的验证来源于model的验证特性 asp-validation-summar ...
- Visual Studio 2017中使用SourceLink调试ASP.NET Core源码
背景 当我们在学习ASP.NET Core或者调试ASP.NET Core程序的时候,有时候需要调试底层代码,但是当我们在Visual Studio中调试程序的时候,由于一些基础库或者第三方库缺少pd ...
- IIS 部署.netcore 500.19错误
错误原因,没有安装 DotNetCore.2.0.5-WindowsHosting.exe 即托管程序,具体可以先检查IIS模块中有没有AspNetCoreModule,有则说明已安装,反正则无
- Python爬虫入门教程 22-100 CSDN学院课程数据抓取
1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了,选择恐惧症使得我不知道该拿谁下手,找来找去,算了,还是抓取CSDN学院吧,CSDN学院的网站为 https://edu.csdn.net/ ...
- JavaScript 中 正则替换 replace
本文初步介绍 replace 在 js 中,我们常常会遇到 用来 解决开发中常会遇到的 问题的 知识总结, 如果你已经 非常熟悉,又可以绕道了. 定义和用法 replace() 方法用于在字符串中常用 ...
- 微服务SpringCloud—Config Server对称加密
配置内容的加解密在Git仓库中明文存储配置属性的.很多场景下,对于某些敏感的配置内容(例如数据库账号.密码等),应当加密存储. Config对称加解密1.安装JCE默认情况下我们的JRE自带了JCE, ...
- Android事件机制之二:onTouch详解
<Android事件机制之一:事件传递和消费>一文总结了Android中的事件传递和消费机制. 在其中对OntachEvent中的总结中,不是很具体.本文将主要对onTach进行总结. o ...
- C#简单接口和继承示例详解——快速入门
上一篇中我们说到继承,其实他们之间是差不多的. 接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口. C#中接口可以多继承,接口之间可以相互继承和多继承.一个类可以同时继承一个类和多个 ...
- WEB项目挂载到IIS session过期
莫名丢失问题: 1.可能是因为系统内部连续的抛出了5次以上的异常 导致进程重启(当前所有在线用户) 2.IIS6 以上默认配置进程,session存在进程内其实是在W3wp.exe中这个进程不稳定,在 ...
- PHP中使用 fsockopen curl 模拟异步处理
PHP它最大缺点就是无法实现多线程管理,其程序的执行都是从头到尾,按照逻辑一路执行下来,不可能出现分支,这一点是限制php在主流程序语言中往更高级的语言发展的原因之一. 在PHP中我们有的时候其实希望 ...