Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27576
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-17 16:06
文章分类

全部博文(13)

文章存档

2017年(5)

2016年(8)

我的朋友

分类: Java

2016-09-13 00:46:27

在java代码运行时,我们需要了解程序的运行状态,尤其是内存使用状态、是否有内存泄漏等。以下几个内容有助于实时了解java程序的状态。
jps:
jps用于获取启动的java程序的进程号(pid),可能存在正在运行的多个java进程。用pid可以细查某个进程的状态。
jmap:
jmap是分析进程内存占用状态的神器,可以查看指定pid的内存使用状态。
jmap [option] {pid}
常用选项包括:
-histo:可以查看该pid占用内存中,各类对象的实例数和占用空间。通过不同类型对象的占用空间,可以初步判断是哪段代码可能出现的内存泄漏(通过判断哪里的代码会大量new出某种对象)。
-histo:live 仅打印活对象的信息。
-dump:[live,]format=b,file={path} 使用hprof二进制形式,输出jvm的heap内容到path下。live可选,和上面一样。
-finalizerinfo 打印正等候回收的对象的信息。
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况。
gc log:
gc log是指java运行时,垃圾回收的日志。默认是关闭状态,在启动程序时可以添加选项打印gc log。选项如下:
-XX:+PrintGC 输出GC日志
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
-Xloggc:{path} 日志文件的输出路径
以上选项可以合并使用。指定gc日志进入的文件,详细记录了gc的日志。每条日志会说明该条日志对应哪个区的gc,前后占用内存,gc用时间等等。

对于新生代回收的一行日志,其基本内容如下:
2014-07-18T16:02:17.606+0800: 611.633: [GC 611.633: [DefNew: 843458K->2K(948864K), 0.0059180 secs] 2186589K->1343132K(3057292K), 0.0059490 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
含义如下:
2014-07-18T16:02:17.606+0800(当前时间戳): 611.633(时间戳): [GC(表示Young GC) 611.633: [DefNew(单线程Serial年轻代GC): 843458K(年轻代垃圾回收前的大小)->2K(年轻代回收后的大小)(948864K(年轻代总大小)), 0.0059180 secs(本次回收的时间)] 2186589K(整个堆回收前的大小)->1343132K(整个堆回收后的大小)(3057292K(堆总大小)), 0.0059490 secs(回收时间)] [Times: user=0.00(用户耗时) sys=0.00(系统耗时), real=0.00 secs(实际耗时)]

老年代回收的日志如下:
2014-07-18T16:19:16.794+0800: 1630.821: [GC 1630.821: [DefNew: 1005567K->111679K(1005568K), 0.9152360 secs]1631.736: [Tenured: 2573912K->1340650K(2574068K), 1.8511050 secs] 3122548K->1340650K(3579636K), [Perm : 17882K->17882K(21248K)], 2.7854350 secs] [Times: user=2.57 sys=0.22, real=2.79 secs]
阅读(604) | 评论(0) | 转发(0) |
0

上一篇:static关键字

下一篇:代码优化思路

给主人留下些什么吧!~~