Java程序性能调优步骤.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java程序性能调优步骤

Java程序性能调优步骤 2013年06月20日 09:18供稿中心: 互联网运营部 摘要:Java程序性能调优步骤 1、性能调优的步骤1.1、衡量系统现状包括请求次数、响应时间、资源消耗等;如:A系统目前95%的请求响应为1s。1.2、设定调优目标根据用户所能接受的响应速度、系统现有的机器、所支撑的用户量制定出来的,因此通常会设定调优目标:95%的 请求在500ms内返回。1.3、寻找性能瓶颈在【2、寻找性能瓶颈】会专门介绍。通常性能瓶颈的表像是:1.3.1、资源消耗过多(CPU、文件IO、网络IO、内存)1.3.2、外部系统处理不足(所调用的其他系统提供的功能——多数情况也是资源消耗过多、数据的操作响应速度 不够——根据数据库SQL执行速度、数据库机器的IOPS、数据库的Active Sessions等分析出来的)1.3.3、程序代码运行效率不够高,未充分使用资源或程序结构不合理。1.4、性能调优在后面的【3、性能调优】会专门介绍1.5、衡量是否达到目标值优化部署后,达到目标则结束,如果没有则重复1.3、1.4步骤2、寻找性能瓶颈2.1、CPU消耗分析(top、pidstat等方式查看cpu消耗状况;vmstat查看cpu的上下文切换、运行队列、利用率)在Linux中,CPU消耗主要用于中断、内核以及用户进程的任务处理。优先级为:中断内核用户进程。cpu消耗严重时,主要体现在:①us—用户进程所占的%过高的原因:1、线程一直处于可运行(Runnable)状态,通常线程在执行无阻塞、循环、正则或纯粹的计算等动作引起的。2、频繁的GC操作引起。如:每次请求需要分配较多内存,当访问量高的时,就不断的进行GC,系统响应速度下降。进而造成堆积的请求更多,消耗内存更严重,最严重的时候可能导致系统 不断的进行FULL GC。可通过JVM内存的消耗分析来查找原因。可通过kill -3 [javapid]、jstack [pid] | grep nid=0X.... 的方式dump出应用的java线程信息。通过转换出的十六进制的值就可以找到对应的nid值的线程。该线程即为消耗CPU的线程。在采样时多执行几次上诉过程,以确保找到真实的消耗CPU的线程。也可以通过intel vtune 这样的商业软件进行分析②sy—内核线程所占的%过高的原因:Linux花费更多的时间在进行线程切换。Java应用造成这个原因是:因为启动了的线程比较多,且这些线程多数都处于不断的阻塞(锁等待、IO等待状态)和执行状态的变化过程,导致了操作系统需要不断的切换执行的线程。从而产生大量的上下文切换。可通过kill -3 [javapid]、jstack -1 [javapid] 的方式dump出Java应用线程信息,查看线程的状态、锁信息找出等待状态或锁竞争过多的线程。结合vvmstat 查看CPU消耗状况。如cs(上下文切换)、sy等。③ni—被nice命令改变优先级的任务所占的%④id—CPU空闲时间所占的%⑤wa—执行过程中等待io所占的%⑥hi—硬件中断所占的%⑦si—软件中断所占的%2.2、文件IO消耗分析(通过pidstat、iostat命令分析)Java应用造成io消耗严重主要是:① 多个线程需要大量内容写入(如频繁的log写入)动作;② 磁盘设备本身的处理速度慢③ 文件系统慢④ 操作的文件本身已经很大2.3、网络IO消耗分析(通过sar命令,如需跟着TCP/IP通信过程的信息,则可通过tcpdump来进行)对于分布式Java应用而言,网络IO的消耗非常值得关注,尤其要注意网络中断是不是均衡地分配到各CPU的(通过cat/proc/interrupts命令查看)。对于网卡只分配到一个CPU的现象采用修改kernle方法(Google使用)、 采用支持MSI-X的网卡进行修复。由于没办法分析具体每个线程所消耗的网络IO,因此当网络IO消耗高时,对于Java应用而言只能对线程进dump。查找产生大量网络IO操作的线程,这些线程的特征是读取或写入网络流,在Java网络通信时,通常要对对象进行序列化为字节流,进行发送,或者读取。并反序列化为对象。这个过程要消耗JVM堆内存,JVM对内存通常是有限的。因此,Java应用一般不会造成网络IO消耗严重。2.4、内存消耗分析(vmstat、sar、pidstat、top)目前Java应用只有在创建线程和使用Direct ByteBuffer时才会操作JVM堆意外的内存。对于JVM堆以外的内存方面消耗,最为值得关注的是swpd的消耗以及物理内存的消耗(可通过vmstat、sar、top、pidstat等方式查看swap和物理内存的消耗状况)。2.5、消耗资源不多,在访问量不大的情况。但程序执行慢的原因,主要有3方面① 锁竞争

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档