JAVA 应用性能监控基础

标签: java 应用 性能 | 发表时间:2015-03-09 07:22 | 作者:greemranqq
分享到:
出处:http://www.iteye.com

一、序言

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

    



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java 应用 性能] 推荐:

JAVA 应用性能监控基础

- - Linux - 操作系统 - ITeye博客
       这里简单介绍了JAVA 应用程序部署linux 服务器上的一些常用监控信息,虽然现在很多自动化监控的东西,但是一些基本的东西,我们还是需要了解.        1.我习惯性先看看 CPU 和内存的使用情况,做一个简单的关注.           命令:top 可以关注运行状态.           命令:大写P:按CPU 使用排序,大写M:按内存使用排序,小写c:详细显示应用       .

基于 PhoneGap 与 Java 开发的 Android 应用的性能对比

- jinn - 搜索研发部官方博客
        此次的调研的重点是针对一个Android应用的基础需求,用phonegap与Java实现的应用在性能及开发成本等方面的对比.        开发一个应用的最基本需求应该是浏览性需求,而在Android开发中ListView比较常用的控件,广泛被用于数据列表的展现上,而且也比较灵活. 所以本次选择用phonegap和Java各自实现一个ListView的内容展现功能的应用;同时引入另外一个常用组件GridView来实现图片浏览的功能应用.

btrace拓展工具-java应用性能诊断优化利器

- - CSDN博客推荐文章
Btrace是一个实时监控工具,可以无需修改应用代码(事实上它修改了字节码),来达到不可告人的秘密. 它可以获取应用程序代码的执行时间,他可以让你无需修改代码,帮你做时间的打点. 但是,你需要编写btrace脚本,它是一个java文件. 在Eclipse中编写java类很简单,在linux上,vm不熟悉的可能就会比较痛苦了,并且脚本可复制性很强.

打造高性能JAVA应用你需要知道的

- - ImportNew
这篇文章节选自《java performance》,对java性能比较关心的同学大概都知道这本书,性能这个东西可能是很多同学在日常写java code的时候很少去关心的,但是在我们写code的过程中确又时时离不开对程序性能的影响,小到我们使用位运算来实现算术运算,大到我们对JAVA代码的总体架构设计,性能其实离我们很近.

Java 性能调优

- - 编程语言 - ITeye博客
1.用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用. 但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法. clone()方法不会调用任何类构造函数. 在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单.

Java 应用发布后,需要关注的7个性能指标

- - SegmentFault 最新的文章
在某个重大发布之后,都需要记录相应的指标,本文介绍了最重要的几个 Java 性能指标,包括响应时间和平均负载等. 为理解应用程序在生产环境中如何运行,就需要遵循一些 Java 性能指标. 在以前,当软件被发布后,开发者是没有方法去了解它在生产环境中的运行情况;而现在,几乎任一个你可以想到的指标都可以被监测和报告.

Java应用运维

- - BlueDavy之技术blog
对于互联网产品或长期运行的产品而言,运维工作非常重要,尤其是在产品复杂了以后,在这篇blog中就来说下Java应用的运维工作(ps:虽然看起来各种语言做的系统的运维工作都差不多,但细节上还是会有很多不同,so本文还是只讲Java的). 苦逼的码农按照需求开发好了一个全新的Java Web应用,该发布上线给用户用了,要把一个Java Web应用发布上线,首先需要搭建运行的环境,运行的环境需要有JDK、APPServer,在已经装好了os的机器上装上JDK和APPServer,开发好的Java Web应用可以用maven直接打成war或ear,将这个打好的包scp或其他方式到目标机器上,准备妥当,就差启动了.

[原]Java性能调优

- - 傲慢的上校的专栏
写Java也有n年了,现在还是有不少的坏的代码习惯,也通过学习别人的代码学到了不少好的习惯. 留给自己做个警戒,提示以后写代码的时候注意. 在文章的后面,会提供整理的原材料下载. 1、尽量少用new生成新对象.         用new创建类的实例时,构造雨数链中所有构造函数都会被自动调用,操作速度较慢.

Java性能调优续

- - 编程语言 - ITeye博客
       下面列出一些常见的关于字符串优化的策略,简单的我就不多作解释了. 1) 使用规则表达式处理字符串匹配代替复杂的字符串查找和复制操作;. 2) 使用不拷贝字符串中字符的高效方法,例如String.subString()方法;. 3) 尽可能不要使用需要拷贝字符串中字符的低效方法,例如String.toUpperCase()和String.toLowercase();.

提升Java的锁性能

- - Java译站
几个月前我们介绍了如何通过 Plumbr来 进行线程锁检测,随后便收到了很多类似的问题,“Hi,文章写得不错,现在我终于知道是什么引发的性能问题了,但是现在我该怎么做. 为了在我们的产品中集成这个解决方案,我们付出了许多努力,不过在本文中,我想给大家分享几个常用的优化技巧,而不一定非要使用我们这款锁检测的工具.