`
greemranqq
  • 浏览: 965824 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

JAVA 应用性能监控基础

阅读更多

一、序言

       这里简单介绍了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.也可以用远程的一些工具去操作这些

    

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics