java程序性能调优步骤

java程序性能调优步骤

ID:32585430

大小:59.71 KB

页数:6页

时间:2019-02-13

java程序性能调优步骤_第1页
java程序性能调优步骤_第2页
java程序性能调优步骤_第3页
java程序性能调优步骤_第4页
java程序性能调优步骤_第5页
资源描述:

《java程序性能调优步骤》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、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、外部系统处理不足(所调用的其他系

2、统提供的功能一一多数情况也是资源消耗过多、数据的操作响应速度不够一一根据数据库SQL执行速度、数据库机器的IOPS、数据库的ActiveSessions等分析出来的)1.3.3、程序代码运行效率不够高,未充分使用资源或程序结构不合理。1.4、性能调优在后面的【3、性能调优】会专门介绍1.5、衡量是否达到目标值优化部署后,达到目标则结束,如果没有则重复1.3、1.4步骤2、寻找性能瓶颈2.1、CPU消耗分析(top、pidstat等方式查看cpu消耗状况;vmstat查看cpu的上下文切换、运行队列、利用率)在Linux中,CPU消耗主要用于

3、中断、内核以及用户进程的任务处理。优先级为:中断〉内核〉用户进程。cpu消耗严重时,主要体现在:①US—用户进程所占的%过高的原因:1、线程一直处于可运行(Runnable)状态,通常线程在执行无阻塞、循环、正则或纯粹的计算等动作引起的。2、频繁的GC操作引起。如:每次请求需要分配较多内存,当访问量高的吋,就不断的进行GC,系统响应速度下降。进而造成堆积的请求更多,消耗内存更严重,故严重的时候可能导致系统不断的进行FUI丄GCo可通过JVH内存的消耗分析来査找原因。可通过kill-3[javapid]、jstack[pid]

4、grep'ni

5、d二OX.的方式dump出应用的java线程信息。通过转换出的十六进制的值就可以找到对应的nid值的线程。该线程即为消耗CPU的线程。在采样时多执行几次上诉过程,以确保找到真实的消耗CPU的线程。也可以通过intelvtune这样的商业软件进行分析①sy—内核线程所占的%过高的原因:Linux花费更多的时间在进行线程切换。Java应用造成这个原因是:因为启动了的线程比较多,H这些线程多数都处于不断的阻塞(锁等待、10等待状态)和执行状态的变化过程,导致了操作系统需要不断的切换执行的线程。从而产生大量的上下文切换。可通过kill-3[java

6、pid]>jstack-1[javapid]的方式dump出Java应用线程信息,查看线程的状态、锁信息找出等待状态或锁竞争过多的线程。结合vvmstat查看CPU消耗状况。如cs(上下文切换)、sy等。②ni—被nice命令改变优先级的任务所占的%③id-CPU空闲时间所占的%④wa—执行过程中等待io所占的%@hi—硬件中断所占的%⑦si—软件中断所占的%2.2、文件10消耗分析(通过pidstat、iostat命令分析)Java应用造成io消耗严重主要是:①多个线程需耍大量内容写入(如频繁的log写入)动作;②磁盘设备本身的处理速度慢

7、③文件系统慢④操作的文件本身已经很大2.3、网络10消耗分析(通过sar命令,如需跟着TCP/IP通信过程的信息,则可通过tcpdump來进行)对于分布式Java应用而言,网络10的消耗非常值得关注,尤其要注意网络中断是不是均衡地分配到各CPU的(通过cat/proc/interrupts命令查看)。对于网卡只分配到一个CPU的现彖采用修改kernle方法(Google使用)、采用支持MSI-X的网卡进行修复。由于没办法分析具体每个线程所消耗的网络10,因此当网络10消耗高时,对于Java应用而言只能对线程进dump。查找产生大量网络【0操

8、作的线程,这些线程的特征是读取或写入网络流,在Java网络通信时,通常要对对彖进行序列化为字节流,进行发送,或者读取。并反序列化为对象。这个过程要消耗JYM堆内存,JVM对内存通常是有限的。因此,Jo溜应用一般不会造成网络10消耗严重。2.4、内存消耗分析(vmstat>sar、pidstat、top)冃前Java应用只有在创建线程和使用DirectByteBuffer时才会操作JVM堆意外的内存。对于JVM堆以外的内存方面消耗,最为值得关注的是swpd的消耗以及物理内存的消耗(可通过vmstal、sar、top.pidstat等方式查看s

9、wap和物理内存的消耗状况)。2.5、消耗资源不多,在访问量不大的情况。但程序执行慢的原因,主要有3方面①锁竞争激烈(如:数据库连接池数,但是请求数多于连接池数)②未充分使用硬件

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。