seo常用优化技巧 网站代码优化工具( 八 )


一个更细致的观察方法就是通过内核ftrace、perf-event来动态观测Linux内核 。比如记录写块设备的起始和返回时间,这样我们就可以知道磁盘写是否有延时,也可以统计写磁盘时间耗费分布 。有一个开源的工具包perf-tools里面包含着iolatency, iosnoop等工具 。
4.如何定位锁的问题?
大家都知道锁会引入额外开销,但锁的开销到底有多大,估计很多人没有实测过,我可以给一个数据,一般单次加解锁100 cycles,spinlock或者cas更快一点 。
使用锁的时候,要注意锁的粒度,但锁的粒度也不是越小越好,太大会增加撞锁的概率,太小会导致代码更难写 。
多线程场景下,如果cpu利用率上不去,而系统吞吐也上不去,那就有可能是锁导致的性能下降,这个时候,可以观察程序的sys cpu和usr cpu,这个时候通过perf如果发现lock的开销大,那就没错了 。
如果程序卡住了,可以用pstack把堆栈打出来,定位死锁的问题 。
5. 如何提?Cache利用率?
内存/Cache问题是我们常见的负载瓶颈问题,通常可利用perf等一些通用工具来辅助分析,优化cache的思想可以从两方面来着手,一个是增加局部数据/代码的连续性,提升cacheline的利用率,减少cache miss,另一个是通过prefetch,降低miss带来的开销 。
通过对数据/代码根据冷热进行重排分区,可提升cacheline的有效利用率,当然触发false-sharing另当别论,这个需要根据运行trace进行深入调整了;说到prefetch,用过的人往往都有一种体会,现实效果比预期差的比较远,确实无论是数据prefetch还是代码prefetch,不确定性太大,指望编译器更靠谱点 。
小结
性能优化是一项细致的工作,工程师们曾致力于寻找一劳永逸解决性能问题的捷径,但遗憾的是,没有银弹,但这并不意味着性能优化无章可循 。软件工程师们在性能优化方面积累了大量的经验,包括架构、缓存、预取、工具、编译器与编程语言,代码重构等实践经验方方面面,这些方法和探讨都具有借鉴意义 。性能优化也是一个系统性工程,出现性能瓶颈再优化是一种先污染后治理的思路 。更好的方式是将性能贯穿于软件的整个生命周期之中,在设计之初即把性能作为一项需求甚至关键目标加以考虑,开发中持续监控性能的变化并严格遵从高性能编码规范,后期维护将性能纳入维护体系 。
严格的说,性能优化和性能设计有所不同,性能优化通常是在现有系统和代码基础上做改进,它并非推倒重来,考验的是开发者反向修复的能力,而性能设计考验的是设计者的正向设计能力,但性能优化的方法可以指导性能设计,两者互补 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: