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