常见的性能瓶颈
- 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<***>

没有评论:
发表评论