jps、jinfo、jstat、jstack、jmap、jconsole等命令简介

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

JDK提供了几个很实用的工具,如下:

jinfo:观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数,java class path等信息。命令格式:jinfo 进程pid
jps:用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。命令格式:jps   或 jps 远程服务ip地址    (默认端口1099)
jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。

jstack:可以观察到jvm中当前所有线程的运行情况和线程当前状态。, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。命令格式:jstack 进程pid
当程序出现死锁的时候,使用命令:jstack 进程ID < jstack.log,然后在jstack.log文件中,搜索关键字“BLOCKED”,定位到引起死锁的地方。

jmap:观察运行中的jvm物理内存的占用情况(如:产生哪些对象,及其数量)。命令格式:jmap [option] pid

      option参数如下:
             -heap
:打印jvm heap的情况
             -histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。
             -histo:live :同上,但是只答应存活对象的情况
             -permstat:打印permanent generation heap情况

       使用jmap进行 heap dump的例子: jmap -dump:format=b,file=   

       打印内存统计图:jmap -histo:live

       结果中每行显示了当前堆中每种类类型的信息,包含被分配的实例个数及其消耗的字节数。选项“live”,表示只统计存活的对象

需要注意的是,jmap不是运行分析工具,在生成统计图时JVM可能会暂停,因此当生成统计图时需要确认这种暂停对程序是可接受的。
jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。

这些命令的使用,见官方文档:
jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html
jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html

jstack:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html
jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html
jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html

 jstat的一些参数:

参数名称

描述

class

统计class loader行为信息。命令例子:jstat -class pid 1000 10 (每隔1秒监控一次,一共做10次),输出内容,含义如下:

Loaded Number of classes loaded.
Bytes Number of Kbytes loaded.
Unloaded Number of classes unloaded.
Bytes Number of Kbytes unloaded.
Time Time spent performing class load and unload operations.

compile

统计编译行为信息。

gc

输出每个堆区域的当前可用空间以及已用空间(伊甸园,幸存者等等),GC执行的总次数,GC操作累计所花费的时间。

gccapactiy

输出每个堆区域的最小空间限制(ms)/最大空间限制(mx),当前大小,每个区域之上执行GC的次数。(不输出当前已用空间以及GC执行时间)。

gccause

输出-gcutil提供的信息以及最后一次执行GC的发生原因和当前所执行的GC的发生原因

gcnew

输出新生代空间的GC性能数据

gcnewcapacity

输出新生代空间的大小的统计数据。

gcold

输出老年代空间的GC性能数据。

gcoldcapacity

输出老年代空间的大小的统计数据。

gcpermcapacity

输出持久带空间的大小的统计数据。

gcutil

输出每个堆区域使用占比,以及GC执行的总次数和GC操作所花费的事件。

你可以只关心那些最常用的命令,你会经常用到 -gcutil (或-gccause), -gc and –gccapacity。

·         -gcutil 被用于检查堆间的使用情况,GC执行的次数以及GC操作所花费的时间。

·         -gccapacity以及其他的参数可以用于检查实际分配内存的大小。

不同的jstat参数输出不同类型的列,如下表所示,根据你使用的”jstat option”会输出不同列的信息。

说明 Jstat参数
S0C 输出Survivor0空间的大小。单位KB。 -gc
-gccapacity
-gcnew
-gcnewcapacity
S1C 输出Survivor1空间的大小。单位KB。 -gc
-gccapacity
-gcnew
-gcnewcapacity
S0U 输出Survivor0已用空间的大小。单位KB。 -gc
-gcnew
S1U 输出Survivor1已用空间的大小。单位KB。 -gc
-gcnew
EC 输出Eden空间的大小。单位KB。 -gc
-gccapacity
-gcnew
-gcnewcapacity
EU 输出Eden已用空间的大小。单位KB。 -gc
-gcnew
OC 输出老年代空间的大小。单位KB。 -gc
-gccapacity
-gcold
-gcoldcapacity
OU 输出老年代已用空间的大小。单位KB。 -gc
-gcold
PC 输出持久代空间的大小。单位KB。 -gc
-gccapacity
-gcold
-gcoldcapacity
-gcpermcapacity
PU 输出持久代已用空间的大小。单位KB。 -gc
-gcold
YGC 新生代空间GC时间发生的次数。 -gc
-gccapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccause
YGCT 新生代GC处理花费的时间。 -gc
-gcnew
-gcutil
-gccause
FGC full GC发生的次数。 -gc
-gccapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccause
FGCT full GC操作花费的时间 -gc
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccause
GCT GC操作花费的总时间。 -gc
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccause
NGCMN 新生代最小空间容量,单位KB。 -gccapacity
-gcnewcapacity
NGCMX 新生代最大空间容量,单位KB。 -gccapacity
-gcnewcapacity
NGC 新生代当前空间容量,单位KB。 -gccapacity
-gcnewcapacity
OGCMN 老年代最小空间容量,单位KB。 -gccapacity
-gcoldcapacity
OGCMX 老年代最大空间容量,单位KB。 -gccapacity
-gcoldcapacity
OGC 老年代当前空间容量制,单位KB。 -gccapacity
-gcoldcapacity
PGCMN 持久代最小空间容量,单位KB。 -gccapacity
-gcpermcapacity
PGCMX 持久代最大空间容量,单位KB。 -gccapacity
-gcpermcapacity
PGC 持久代当前空间容量,单位KB。 -gccapacity
-gcpermcapacity
PC 持久代当前空间大小,单位KB -gccapacity
-gcpermcapacity
PU 持久代当前已用空间大小,单位KB -gc
-gcold
LGCC 最后一次GC发生的原因 -gccause
GCC 当前GC发生的原因 -gccause
TT 老年化阈值。被移动到老年代之前,在新生代空存活的次数。 -gcnew
MTT 最大老年化阈值。被移动到老年代之前,在新生代空存活的次数。 -gcnew
DSS Adequate size of survivor in KB
幸存者区所需空间大小,单位KB。
-gcnew
参考文章:http://www.importnew.com/2057.html

下面内容,摘自:http://jameswxx.javaeye.com/blog/731763

在本机执行 jstat -gcutil 340 10000,这个命令是每个10秒钟输出一次jvm的gc信息,10000指的是间隔时间为10000毫秒。屏幕上显示如下信息(我只取了第一行,因为是按的一定频率显示,所以实际执行的时候,会有很多行):

   S0       S1       E        O          P       YGC     YGCT    FGC    FGCT     GCT  
 54.62   0.00  42.87  43.52  86.24   1792    5.093     33       7.670   12.763

[xhtml] view plain copy
  1. S0:新生代的susvivor0区,空间使用率为54..62%  
  2. S1:新生代的susvivor1区,空间使用率为0.00%(因为还没有执行第二次minor收集)  
  3. E:eden区,空间使用率42.87%  
  4. O:旧生代,空间使用率43.52%  
  5. P:持久带,空间使用率86.24%  
  6. YGC:minor gc执行次数1792次  
  7. YGCT:minor gc耗费的时间5.093毫秒  
  8. FGC:full gc执行次数33  
  9. FGCT:full gc耗费的时间7.670毫秒  
  10. GCT:gc耗费的总时间12.763毫秒   
</p>

如果young gc和full gc能够正常发生,而且都能有效回收内存,常驻内存区变化不明显,则说明java内存释放情况正常,垃圾回收及时,java内存泄露的几率就会大大降低。但也不能说明一定没有内存泄露。


每次young gc消耗的时间,可以用相间隔的两行YGCT相减得到。每次full gc消耗的时间,可以用相隔的两行FGCT相减得到

官方文档的一个例子:

[plain] view plain copy 派生到我的代码片
  1. Using the gcutil option  
  2. This example attaches to lvmid 21891 and takes 7 samples at 250 millisecond intervals and displays the output as specified by the -gcutil option.  
  3. jstat -gcutil 21891 250 7  
  4.   S0     S1     E      O      P     YGC    YGCT    FGC    FGCT     GCT  
  5.  12.44   0.00  27.20   9.49  96.70    78    0.176     5    0.495    0.672  
  6.  12.44   0.00  62.16   9.49  96.70    78    0.176     5    0.495    0.672  
  7.  12.44   0.00  83.97   9.49  96.70    78    0.176     5    0.495    0.672  
  8.   0.00   7.74   0.00   9.51  96.70    79    0.177     5    0.495    0.673  
  9.   0.00   7.74  23.37   9.51  96.70    79    0.177     5    0.495    0.673  
  10.   0.00   7.74  43.82   9.51  96.70    79    0.177     5    0.495    0.673  
  11.   0.00   7.74  58.11   9.51  96.71    79    0.177     5    0.495    0.673  
  12. The output of this example shows that a young generation collection occurred between the 3rd and 4th sample. The collection took 0.001 seconds and promoted objects from the eden space (E) to the old space (O), resulting in an increase of old space utilization from 9.49% to 9.51%. Before the collection, the survivor space was 12.44% utilized, but after this collection it is only 7.74% utilized.  

转载于:https://my.oschina.net/guoenzhou/blog/389687

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读《底层逻辑》

《底层逻辑》本书作者是刘润&#xff0c;他在得到上开设了课程《5 分钟商学院》&#xff0c;我也是在得到上知道的这本书&#xff0c;这本书在豆瓣上的评分不是很高&#xff0c;褒贬不一&#xff0c;不过我看着觉得挺好。看了一些豆瓣的评论&#xff0c;觉得这本书不好有这么几…

2016年:勒索病毒造成损失预估超过10亿美元

根据趋势科技公布的最新报告&#xff08;PDF&#xff09;&#xff0c;2016年是敲诈勒索软件频发的一年&#xff0c;同比增长752%&#xff0c;预测由Locky、Goldeneye等勒索病毒所造成的损失超过10亿美元。报告中同时指出企业和个人是勒索软件的重灾区&#xff0c;而且勒索病毒还…

python3.6字典有序_为什么从Python 3.6开始字典有序并效率更高

在Python 3.5&#xff08;含&#xff09;以前&#xff0c;字典是不能保证顺序的&#xff0c;键值对A先插入字典&#xff0c;键值对B后插入字典&#xff0c;但是当你打印字典的Keys列表时&#xff0c;你会发现B可能在A的前面。 但是从Python 3.6开始&#xff0c;字典是变成有顺序…

Linux的进程/线程间通信方式总结

2019独角兽企业重金招聘Python工程师标准>>> Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程通信方式&#xff1a;包括信号量(Semaphore), 消息队列(Me…

开源作者去世后,代码谁来继承?

文 | 肖滢出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013)2008 年初&#xff0c;澳大利亚一对兄弟 Simon Zerner 和 Toby Zerner 开始了 esoTalk 的开发。不幸的是&#xff0c; esoTalk 尚处于 Alpha 阶段&#xff0c;主力开发人员哥哥 Simon 就在 2009 年年中去世。…

项目中使用CLR编程

1、创建自己的项目 2、右键“解决方案。。。”→添加→新建项目→C#→数据库→SQL Server项目,如下图所示: 3、选择操作数据库

SDN火爆!未来五年年复合增长率达98%

在如今的网络世界&#xff0c;软件定义网络SDN和网络功能虚拟化NFV成为了新的“宠儿”&#xff0c;特别是对于运营商来说&#xff0c;已经将它们视为面向未来转型的关键。因此已经有越来越多的运营商开始尝试引入SDN和NFV技术&#xff0c;尽管它们的标准还尚未完善。 最早采用S…

python桌面程序开发_程序员之路:python3+PyQt5+pycharm桌面GUI开发

先看效果&#xff1a;图 1 没错&#xff0c;学过C#的同学应该很熟悉这个界面&#xff0c;按钮风格和界面风格很相似&#xff0c;万万没想到&#xff0c;python也可以做出这样的界面&#xff0c;简直了&#xff01;&#xff08;图 1&#xff09; 正文开始 一、安装python 为啥要…

转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)

2019独角兽企业重金招聘Python工程师标准>>> ‍‍相关参考资料&#xff1a;MySQL 赋予用户权限命令的简单格式可概括为&#xff1a;grant 权限 on 数据库对象 to 用户一、grant 普通数据用户&#xff0c;查询、插入、更新、删除 数据库中所有表数据的权利。 grant s…

kafka控制台模拟消费_Kafka 详解

kafka简介Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最大的特性就是可以实时的处理大量数据以满足各种需…

python在web可以开发吗_Python Web开发

参考原文 WSGI接口 WSGI&#xff08;Web Server Gateway Interface&#xff09;是一个接口&#xff0c;用来屏蔽底部的细节&#xff08;如TCP的建立连接&#xff0c;HTTP原始请求和响应格式等&#xff09;。WSGI接口定义非常简单&#xff0c;只需要Web开发者实现一个函数&#…

更新丨.NET 7 预览版2 中的 ASP.NET Core

点击上方蓝字 关注我们&#xff08;本文阅读时间&#xff1a;6分钟).NET 7 预览版2 现已推出&#xff0c;其中包括对 ASP.NET Core 的许多重大改进。以下是此预览版中新增内容的摘要&#xff1a;• 推断来自服务的 API 控制器操作参数&#xff1b;• SignalR 集线器方法的依赖注…

LoadRunner+Android模所器实现抓包并调试本地服务端

为了测试Android软件的服务端的功能&#xff0c;需要重现某些客户端操作&#xff0c;便于发现功能问题&#xff0c;性能问题。也方便客户端与本机服务端特别是服务端代码进行断点调试。这个时候需要对网络操作进行重现。loadRunner是hp公司开发的压力测试工具。功能比较强大&am…

架构师

系统架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的人。具体来说是一个确认和评估系统需求&#xff0c;给出开发规范&#xff0c;搭建系统实现的核心构架&#xff0c;并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”…

统信uos系统考试题_148款!富士通及旗下晟拓品牌系列打印机适配统信UOS

近日&#xff0c;南京富士通电子信息科技股份有限公司(简称&#xff1a;富士通)及其旗下晟拓子品牌148款主流打印机产品与统信桌面操作系统UOS的适配工作即将完成&#xff0c;这次适配涵盖了富士通及晟拓的常用主流机型。富士通正式成为统信软件产品生态合作伙伴。本次适配&…

手机浏览器html5游戏,移动浏览器都爱 HTML5 ?

目前中国第三方手机浏览器市场竞争正在愈演愈烈&#xff0c;但由于各应用开发商对手机浏览器的内容和资源的整合能力、技术研发能力、战略布局目的等方面均各不相同&#xff0c;浏览器产品也出现了同质化严重、内容匮乏等问题&#xff0c;亮点突出、吸引用户的产品较缺乏&#…

怎么快速了解自己的MySQL服务器?

From: http://www.cnblogs.com/benshan/archive/2013/01/09/2853097.html 1、查看数据库服务器状态&#xff1a;status Linux 下的MySQL服务器状态 该列表中主要包括MySQL的版本&#xff08;为version 5.1.61&#xff09;、运行平台&#xff08;debian-linux-gnu(i686)&#xf…

八类网线和七类网线的区别_什么是七类网线?七类网线水晶头如何制作?

要了解七类网线如何使用&#xff1f;需要掌握这四个问题&#xff1a;1、什么是七类网线&#xff1f;2、七类网线与六类网线有什么区别&#xff1f;3、七类网线用什么水晶头&#xff1f;如何制作7类网线水晶头&#xff1f;4、7类网线的应用场景&#xff1f;带着这四个问题&#…

poj2632 累死了

题意&#xff1a; 给定A*B的格子&#xff0c;放入N个机器人&#xff0c;每个机器人初始位置及朝向给定。给定M条指令。指令类型有三种&#xff1a; 1、L&#xff1a;左转90 2、R&#xff1a;右转90 3、F&#xff1a;前进一格 问执行指令过程中机器人是否发生碰撞&am…

代码生成器原理

整个架设思路分的4个部分&#xff1a;A&#xff1a;底层物理数据库层&#xff0c;主要是存储数据用的。B&#xff1a;数据库访问层&#xff0c;主要是为了写一套代码可以跑在多种数据库上。C&#xff1a;一些辅助工具、基础组件&#xff0c;是为了加强自动产生代码的功能、简化…