JAVA 应用性能监控基础

jopen 10年前

一、序言

这里简单介绍了JAVA 应用程序部署linux 服务器上的一些常用监控信息,虽然现在很多自动化监控的东西,但是一些基本的东西,我们还是需要了解。这里是简单记录一下:

二、操作过程

1.我习惯性先看看 CPU 和内存的使用情况,做一个简单的关注

命令:top 可以关注运行状态

命令:大写P:按CPU 使用排序,大写M:按内存使用排序,小写c:详细显示应用

比如A应用出现

VIRT:虚拟内存总共2G,RES:物理已经内存占用:1.8G,并且有持续上升趋势,有可能内存溢出

关于JDK 自带命令,可以参考:http://blog.csdn.net/fenglibing/article/details/6411953

2.jstack -l -pid 查看堆栈信息

当然我习惯性输出到文件:jstack 1234 > jstack_1234.txt

一般我用来分析死锁:看看有什么blocked 之类的,如果有就具体分析对象吧

3.查询内存信息 到文件

jmap -histo > jmap_1234.txt

# 会出现类似的东西,这里里面会出现 对象实例个数大小,含义相信都能看懂  # 如果有溢出危险,可以看看是不是有些不应该存在的对象过多,或者泄露~。~  num   #instances   #bytes  class name  ----------------------------------------------    1:   5639055  314750880  [C    2:   5090750  122178000  java.lang.String    3:    634655   50563800  [B    4:    132871   49959496  com.taobao.api.domain.Trade    5:    535513   30530896  [Ljava.lang.Object;    6:    457581   27420936  [I    7:    421408   23598848  com.taobao.api.domain.MsgList  #...  # 上面关注的对象,发现订单Trade 占 49959496/8/1024/2024 = 5.95   # 至于合理性,要根据自己系统进行判断,如果是内存不够,需要调大JVM内存  # jmap -histo:live 这是存活的对象   # 当然如果你应用挂了,你可以jmap -dump  jmap -head 看下内存快照  # 正常情况不建议这么做,生成快照的时候应用会stop 一下!

4.关注GC信息

jstat -gcutil > jstat_1234.txt

# 会出现类似以下信息  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT      38.69   0.00  90.60  79.89  59.31 150460 1693.925   609  137.180 1831.105    # 我喜欢主要关注FGC 的次数:609 当然这个要配合运行时间去看,你可以5-10分#钟运行几次,看看FGC 的增长率,快了肯定的调节    #当然你还可以观察新生代 、老年代、永久代详细信息,具体参数看上面的链接

小结:

1.虽然很多大部分情况下,公司有运维或者专门的监控工具做这些了,但是了解一下还是有好处的,当然基本的得清楚JVM 的一些分布、原理基础。

2.关于一些常用调优手段,有机会结合实际场景 再分享吧,脱离场景的 都感觉 不太好。

3.也可以用远程的一些工具去操作这些

原文  http://greemranqq.iteye.com/blog/2190684

</div>