第一章, Java性能调优概述
对Web服务器而言,服务器的响应时间和吞吐量是两个重要的性能参数。
一般来说,程序性能通过以下几个方面来表现:
- 执行速度:程序的反应是否迅速,响应时间是否足够短。
- 内存分配:内存分配是否合理,是否过多的消耗内存或者存在泄露。
- 启动时间:程序到启动到可以正常处理业务需要花费多久时间。
- 负载承受能力:当系统压力上升时,系统的执行速度,响应时间的上升曲线是否平缓。
性能的参考指标:
- 执行时间:一段代码从开始运行到运行结束,所使用的时间
- CPU时间:函数或线程占用CPU的时间。
- 内存分配:程序在运行时占用的内存空间。
- 磁盘吞吐量:描述IO的使用情况
- 网络吞吐量:描述网络的使用情况。
- 响应时间:系统对某用户行为或事件作出响应的时间。
系统瓶颈的分析:
- 磁盘IO:读写速度比内存慢,
- 网络操作:依赖于网络环境,可能比磁盘IO更慢
- CPU:
- 异常:对异常的处理会很占用系统资源,如果频繁的处理异常,会拖累系统性能。
- 数据库:
- 锁竞争,
- 内存
性能调优的层次:
- 设计调优:从宏观层面的“质”的优化,可以规避某一个组件的性能问题,而非改良该组件的实现。
- 代码调优:微观层面的代码优化。
- JVM调优:调整JVM的参数,
- 数据库调优:
- 操作系统调优:
性能调优,一般的做法,从白盒的角度,首先需要做好系统的调研工作,了解系统架构,模块之间的协作和接口,通过对接口之间的监测,可以定位出现性能问题的具体模块,逐渐缩小scope,最终定位问题。
从黑盒的角度分析,可以通过一系列的工具,系统工具,或者Java性能监测工具,从宏观的层度来观测系统的性能问题。通过这些工具,一般能获取系统存在哪方面的性能问题,能为问题的最终定位提供指示性的方向。