微博熱報:關於性能調優

 轉自http://www.testroad.net/bbs/dispbbs.asp?boardid=16&id=1193&move=next

左耳朵耗子在微博中說:“每每一和人說到性能調優的東西,就會聽到人馬上說要建個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調度、業務熱點賬戶,流程設計的熱點),通過測試來尋找瓶頸是代價非常高昂的方式,測試很多時候只是用來驗證,而不是尋找!沒有針對性的優化,沒有經過測試找到瓶頸。

  一線天色天宇星辰:往往測試一把,解決影響性能的最主要因素,就能解決問題了,十全十美的設計是不可能的,把可能遇到的性能問題都測試一把,挑主要的解決掉,否則過度設計會搞死自己的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章