About me

我的照片
目前就职于杭州某电子商务公司,工作兴趣包括高并发分布式架构,JVM性能优化等方面。

2012年1月29日星期日

JAVA程序的性能瓶颈

常见的性能瓶颈
  • CPU
  • 内存:频繁的ygc和fgc
  • 异常程序不断处理异常信息
  • 同步:程序等待共享资源被释放
  • 本地IO和网络IO:等待数据读写到磁盘或网络,或者数据库操作


系统性能与调优的关系

Ø调优的作用:在当前的系统基础上,找出性能(内存)瓶颈点,寻找解决方案(二八规则:百分二十以下的代码消耗了80%的系统性能)
Ø系统性能:一个高性能的应用不是靠后期调优调出来的。以下要素必不可少:
l一个正确的总体设计策略;
lJava编码技巧,遵循java编码规范;
l编码完成后对应用关键点的调优;



问题在哪里

l性能:哪些方法被调用消耗Cpu时间最多;因素有两个
n单次运行耗时
n方法在应用服务时的运行次数
l内存:内存中的对象主要是哪些,数量有多少;
n内存常驻对象;
n方法体中生成的运行期对象;



找到原因

Ø找出系统数据(内存消耗分布、代码Cpu耗时比例)后进行针对的代码分析,看是否是正常的消耗。
Ø工具能够引导你把注意力集中到关键点上,但系统调优是否有效还在于你在分析对应点的代码后,是否能够找到更好的解决方案。
Ø性能跟踪工具仅仅是一个度量工具,最宝贵的还是你的头脑,技术上的思路&对业务的熟悉度。
Ø仔细读代码,代码是否有问题!有没有不必要的开销
Ø认真分析业务,看有没有其他的实现方式


制定对策

Ø集中力量优化占用80%性能、内存的代码段
Ø优化后,系统性能瓶颈会发生转变(性能开销比例发生变化),需要重新采集数据



案例
ØList页面的调优,页面展示会是一个大问题,Url的渲染!
l大量链接的渲染,通过建立一个链接渲染工具来实现(建立参数基准),生成时从内部缓存快速拼接生成;
Ø大量内存中的缓存对象: 性能与内存占用的权衡
lObject – 成员变量的类型 尽量使用简单类型
l不要建立空的容器对象 list<***> 

没有评论:

发表评论