- 浏览: 797171 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
huan19900606:
像haskell这些脚本语言很容易定义DSL,实现对应的词法语 ...
DSL的基本介绍(groovy来进行构建) -
express_wind:
https://yq.aliyun.com/album/130 ...
qlexpress规则引擎初探 -
readxuxuegang:
博主你好。如果groovy的代码是保存在数据库里,不是文件,这 ...
在java中使用groovy怎么搞 (java and groovy) -
express_wind:
hi,兄弟,有没有兴趣来阿里巴巴专门做这方面的研究,https ...
qlexpress规则引擎初探 -
langcaiye:
有2个问题请教:1. 这里的base32算法为什么需要以负数的 ...
【原】geohash算法详解
工欲善其事必先利其器,这里把jdk自带的工具熟悉一下,有问题能够直接拿过来用。
JDK自带了几个比较实用的工具,这里汇总用法,主要是介绍一些参数的用法,排查问题的时候很有用的。
常用的是后面三个,需要对于java的内存区域有一定的了解之后用起来会更加的心应手,需要了解java内存模型的可以参照一下我之前系的一篇简单的入门博客。
(1)jsp打印出java的进程号,类似于linux的ps,不是很常用,一般用linux的 ps -ef | grep java来代替
A. -q 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
B. -m 输出传递给main 方法的参数,在嵌入式jvm上可能是null
C. -l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
5098 org.jboss.Main
13785 sun.tools.jps.Jps
D. -v 输出传递给JVM的参数
13837 Jps
-Dapplication.home=/opt/taobao/install/jdk-1.6.0_17 -Xms8m
5098 Main
-Dprogram.name=run.sh -Xms768m -Xmx768m -XX:NewSize=320m -XX:MaxNewSize=320m
-XX:PermSize=96m
-XX:MaxPermSize=256m
-Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -Djava.awt.headless=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 -Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=v012087.sqa.cm4 -XX:+UseCompressedOops -javaagent:/home/admin/depend/classAgent.jar -javaagent:/home/admin/logisticsmap/dtd/btrace/build/btrace-agent.jar=script=/home/admin/logisticsmap/dtd/btrace/build/TrackDTDXSDLoad.class,scriptOutputFile=/home/admin/logisticsmap/logs/dtdxsdloadstatus.log -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs=/opt/taobao/jboss/lib/endorsed
(2)jmap dump出java内存的一些信息,用于分析内存的一些问题,常用
常用的三个参数
dump出java heap的二进制信息到文件,如果加了live这个参数,则只是dump出正在存活的对象的信息,分析文件,可以使用jhat,但是用eclipse的mat更加方便
------------------------------------------------------------------------
-heap
打印java heap的统计信息,gc的使用情况,heap的配置等
------------------------------------------------------------------------
-histo[:live]
打印heap的统计信息,包括每个类,对象,内存。
例子:文件被重定向到heap.log这个文件,5098是java进程的端口号
Dumping heap to /home/admin/heap.log ...
Heap dump file created
eclipse mat的下载地址是:http://www.eclipse.org/mat/downloads.php
(3)jstat 打印出java进程gc的情况,可以打印出内存区域各个区域的具体大小,也可以打印出统计数字
A ) -gc 查看内存区域的整体情况
$ jstat -gc 5098 1000 10
5098为java的进程ID,1000为每隔1s打印一次,10为连续打印10次
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 6976.0 6528.0 0.0 0.0 314176.0 230746.6 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058 6976.0 6528.0 0.0 0.0 314176.0 230746.6 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058 6976.0 6528.0 0.0 0.0 314176.0 230746.6 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058 6976.0 6528.0 0.0 0.0 314176.0 230831.1 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058 6976.0 6528.0 0.0 0.0 314176.0 230831.1 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058 6976.0 6528.0 0.0 0.0 314176.0 231202.0 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058 6976.0 6528.0 0.0 0.0 314176.0 231202.0 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058 6976.0 6528.0 0.0 0.0 314176.0 231202.1 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058 6976.0 6528.0 0.0 0.0 314176.0 231202.1 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058 6976.0 6528.0 0.0 0.0 314176.0 231243.4 458752.0 59883.9 98304.0 84466.1 48 0.894 29 10.165 11.058
EC Current eden space capacity (KB).
EU Eden space utilization (KB).
OC Current old space capacity (KB).
OU Old space utilization (KB).
PC Current permanent space capacity (KB).
PU Permanent space utilization (KB).
YGC Number of young generation GC Events.
YGCT Young generation garbage collection time.
FGC Number of full GC events.
FGCT Full garbage collection time.
GCT Total garbage collection time.
B ) -gcutil 查看内存区域的使用占比情况
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 74.85 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.85 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.85 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.85 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.87 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.87 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.88 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.88 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.88 13.05 85.92 48 0.894 29 10.165 11.058
0.00 0.00 74.88 13.05 85.92 48 0.894 29 10.165 11.058
S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
其他一些不是很常用的参数:
-class:统计class loader行为信息 -compile:统计编译行为信息 -gc:统计jdk gc时heap信息 -gccapacity:统计不同的generations(不知道怎么翻译好,包括新生区,老年区,permanent区)相应的heap容量情况 -gccause:统计gc的情况,(同-gcutil)和引起gc的事件 -gcnew:统计gc时,新生代的情况 -gcnewcapacity:统计gc时,新生代heap容量 -gcold:统计gc时,老年区的情况 -gcoldcapacity:统计gc时,老年区heap容量 -gcpermcapacity:统计gc时,permanent区heap容量 -gcutil:统计gc时,heap情况
(4)jstack 打印出java中线程的情况,用于分析线程相关问题非常有用
-m 打印java线程还有本地线程
-l 打印线程的锁附加信息
例子:查看特定java线程的情况:
(一)通过top命令,查看消耗内存较高的线程的id,
运行top,shift+h来显示所有进程的信息,包含进程中线程的情况,从中找出占用内存最大的那个java线程。
也可直接运行:top -H -p pid 来显示java进程中的各个线程的情况
(二)进制间的转换:
printf '0x%x\n' pid
获取线程ID的另外一中展现形式
(三)dump线程,然后搜搜索线程为上述ID的线程的信息
线程的各个状态截图在这里
发表评论
-
系统分布式情况下最终一致性方案梳理
2015-09-05 19:34 40808前言 目前的应用系 ... -
Storm核心概念剖析
2015-03-20 20:42 3179最近团队中有分析的场 ... -
池和流的两种数据处理方式
2014-11-19 22:59 1322在抽象层面,想了一下,目前很多的数据处理形式,一般分为池和流 ... -
关于CodeReview(java)
2014-10-29 20:42 1836关于codereview,在平时的开发中,经常忽略的环节,参 ... -
java中各种各样的数据结构
2014-07-13 20:26 2399在java中,有非常丰富的数据结构,可能是因为大多数的软件 ... -
关于JVM的ClassLoader(笔记)
2014-07-13 12:19 1795众所周知,java是编译型的语言,写的是java文 ... -
关于事务的几个概念介绍
2014-06-06 22:22 1893啥是事务? 有一组操 ... -
开发中遇到的编码问题
2014-05-22 19:39 17921、说到编码,最大的问题就是乱码了,为啥会有乱码呢 ? 因 ... -
ThreadLocal源代码解析
2014-04-24 17:54 2359最开始的时候,理解的ThreadLocal,我的理解是这样的 ... -
关于单例模式(代码篇)
2014-04-23 10:47 2369很早的时候,转发过一篇单例模式的文章:http://iamz ... -
今天遇到的两个spring相关的两个问题
2014-04-18 21:56 2493今天在项目中写代码,遇到两个Spring的问题,记录一下。再 ... -
Activiti中的命令模式解析
2014-04-11 13:10 3087最近在看Activiti的源代码,发现是基于命令模式进行的开 ... -
关于java中的本地缓存-总结概述
2014-03-31 19:00 18291java中的本地缓存,工作后陆续用到,一直想写,一直无从下 ... -
使用guava中的EventBus构建内存级别的事件引擎
2014-03-25 19:27 6319这个EventBus是guava中比较给力的一个类,从字面 ... -
DSL的基本介绍(groovy来进行构建)
2014-03-04 23:32 16930什么是DSL? 领域特定 ... -
qlexpress规则引擎初探
2014-02-25 22:28 24861qlexpress是啥? 这个是阿里内部的一个开源的jav ... -
在java中使用groovy怎么搞 (java and groovy)
2014-01-15 23:17 10850什么是groovy? 一种基于Java虚拟机的动态语言, ... -
java中记录方法调用时间,结果按照方法的层级树状的输出
2013-12-21 17:36 4624 在java中,最常用的埋点时间的方法就 ... -
一次CMS GC问题排查过程(理解原理+读懂GC日志)
2013-12-14 22:21 41220这个是之前处理过的一个线上问题,处理过程断断续续,经历了两 ... -
令牌桶算法和漏桶算法以及流量控制浅谈
2013-11-27 23:20 20705 在双十一等大促环节,系统需要限流,外部 ...
相关推荐
JDK自带VM分析工具jps,jstat,jmap,jconsole
JDK自带工具分析 1 1、工具分类概括: 2 1.1、基本工具 2 1.2、安全工具 3 1.3、Java国际化工具 3 1.4、远程方法调用工具 3 1.5、Java IDL and RMI-IIOP 工具 3 1.6、Java 部署工具 4 1.7、Java 插件工具 4 1.8、...
使用jdk自带的jar工具打jar包 采用命令行的方式 方便 快捷
JDK自带调试工具doc JDK自带调试工具doc JDK自带调试工具doc
利用jdk自带算法实现的AES加解密工具类及Base64编解码工具类、 文件操作工具类、aes扩展无限制权限策略文件等。 在jdk1.7环境亲测通过。
本案例详细介绍了JDK自带线程池,与spring的线程池相比,其更好,希望对大家有帮助
JDK自带的jarsigner签名工具帮助文档,指导大家用自带的JDK通过控制台签名apk;主要指令如下:jarsigner -verbose -keystore [您的签名存放路径]-signedjar [签名后的文件名] [未签名的文件名] [您的证书名称]
java hprof(文件类型分析器)是一款功能强大的java问题解析软件。可以帮助大家在编辑过程种遇到问题的话就马上解决哦。有兴趣的话赶紧下载!...HPROF是JDK自带的分析工具,虽然只有基本功能,但是同样能提供程序的
JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax
Tomcat开启JMX功能,使jdk自带的JVisvualVM工具连接JVM,轻松进行性能分析(csdn)————
CPU占用过高问题排查,java应用某台机器cpu比较高的情况,而且重启后基本上都会恢复正常。
JDK自带工具之jinfo.docx
支持jdk1.2 jdk1.3 jdk1.4 jdk1.5 jdk1.6 支持目录对目录 支持直接双击class文件看源代码
Jconsole是Sun jdk 1.5以上版本自带的监控工具,可以对JVM进行全面的监控
IBM MAT(Memory Analysis Tools分析工具+JDK8_64位
NULL 博文链接:https://samjavaeye.iteye.com/blog/938657
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI ...
JDK环境变量配置工具,需要手工改变JDK版本路径。特点是一次配置就无忧。缺点是没有加界面选择路径。
注意在Windows下,为了避免在使用命令行的时候出现问题,一般不要选择安装在C:\Program Files\jdk目录下,可以选择文件夹名没有空格的目录来安装,比如我一般安装在C:\Java目录下面。 1. 设置JAVA_HOME,指向jdk的...
JDK一些查询工具