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

文档评论(0)

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

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

1亿VIP精品文档

相关文档