微博热报:关于性能调优
作者:网络转载 发布时间:[ 2012/6/7 11:02:31 ] 推荐标签:
左耳朵耗子在微博中说:“每每一和人说到性能调优的东西,会听到人马上说要建个cache或是用个hash table 缓存什么的,我总是觉得并不一定啊。因为cache这个东西到处都有啊,从CPU的L1 L2到RAM都有cache,OS读文件运行程序也有cache,RDBMS也有cache,语言层面JVM里也有cache,网卡上也有cache……,有时候真没必要自己建了。”
大家对此展开了讨论:
jametong:在很多人眼里,速度不行,那上个缓存吧!至于缓存到底是什么?该如何利用各种不同的缓存,他所处理的具体业务场景是否需要缓存?那则是另一个问题!
压力很大同志:缓存也算是一种空间换时间的方法嘛,有的结果明明可以反复用的存起来。业务逻辑部分能得到的为什么非要去RDBMS去走一遭,再说细点CPU的L1、L2也没法缓存业务逻辑需要的数据,不是在一个级别上的东西,要是指着CPU缓存了、IO缓存了、RDBMS缓存了,反正他们都缓存了,我不管了,这跟耍流氓无区别。
kylemick:如果单纯IO角度,应该是要的吧…瓶颈点在那里,不然也不会在这么多层面做了这么多Cache。至于算法调优,都是根据实际情况吧,没有具体情况,调优岂不是了?
steedhorse:我觉得所有的动态规划算法都与Cache机制异曲同工。不过现实中我也对一碰到性能调优想Cache的做法存有疑虑。经典线性规划问题可以用现成算法。其他问题也常可以通过算法和数据结构的改进来减少重复计算。
左耳朵耗子:我这里说的“有时候不需要”。举个例子,某应用有读很多小图片,但又不是很多,比如25万个小图片,大约不到1GB,于是想做一个cache把图片预读到内存以减小磁盘I/O,但是OS的内存管理已经帮你干了,真的没必要自己再干了。
吴尔平-andy:不支持这种说话,换个顺序理解一下,为什么CPU需要L1、L2、L3,为什么有了CPU的这几级还要文件Cache, 要db的Cache。知道为什么有些应用需要有应用级的Cache。
校园猫:如果用OS的cache,需要从内核空间拷贝到用户空间,如果用DBMS的cache,要从数据库进程空间拷贝到用户进程空间,如果对这些时间开销可以容忍,当然可以不需要自己建cache,如果不能容忍,那还得自己建,另外cache的淘汰算法也不能控制,除非完全能装下不考虑淘汰。
steedhorse:这个话题好像说乱了。原因是楼主前半句跟哈希表相提并论的cache指的是“计算结果缓存”,比如很多人都会不太严格地讲“把运算结果cache起来”,这是cache的一种不太正宗的用法。而后半句的cache指的是存储结构上的cache,这个是cache一词的正宗本义。前后两个cache在含义上不太一致,导致了各说各的。
Robin圈:性能问题之所以难解决,通常是我们错过了第一解决时间,搞的自己都不知道问题再哪里了。所以如果性能成为了关键指标,那么应该集成到CI中,如果要求是1s,那么超过了该给个failed。
jametong:瓶颈更多是基于设计、业务来定位的,深入业务、系统,找到有共享资源的点(L1/L2缓存,CPU调度、业务热点账户,流程设计的热点),通过测试来寻找瓶颈是代价非常高昂的方式,测试很多时候只是用来验证,而不是寻找!没有针对性的优化,没有经过测试找到瓶颈。
一线天色天宇星辰:往往测试一把,解决影响性能的主要因素,能解决问题了,十全十美的设计是不可能的,把可能遇到的性能问题都测试一把,挑主要的解决掉,否则过度设计会搞死自己的。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11