服務器調優

部分內容轉自:如何優化服務器的性能 - 南風軒 - 博客園

網絡內核參數:blog.csdn.net/ysdaniel/article/details/7307091

陳皓性能調優攻略:coolshell.cn/articles/7490.html

1、系統資源

CPU 內存 磁盤IO 網絡IO

2、性能調優

性能調優一般從以下幾個方面入手。

(1)先看load(w,top,uptime),如果load高,說明系統某些資源出現了瓶頸,可以通過dstat和vmstat查看cpu,memory,IO哪些出現瓶頸,然后再具體看原因。

(2)有可能load不高,但就是響應時間比較長,這種情況可能是由于阻塞造成的,常見的比如工作線程都在等待某個事件發生,導致不能及時處理請求。

(3)還有一種情況是沒有利用多核并發,比如某個耗時的任務只有一個線程處理,導致這個線程處理不過來造成流程上的阻塞,這種可以通過mpstat查看是不是集中在某一個或某幾個核上。

(4)還有一種原因是內核代碼導致的,比如不支持多隊列的網卡上沒有打開RFS,導致內核處理網絡的邏輯沒有負載在多個核上,這時候需要調整內核參數。

CPU

1)使用多線程 或多進程編程,充分利用多核CPU。老的線程庫效率太低,需要升級用NPTL 。

2)進(線)程數不要遠超cpu數,減少進程無味的切換。

3)慎重選擇阻塞性IO,阻塞會導致進程切換,浪費CPU資源。

4)事件發生的時間無法估計或比較長,則不應該使用輪詢的方式,盡量用異步方式等待事件就緒。

5)謹慎用鎖,盡量把數據分配到各個線程,減少共享資源,減少競爭,lockfree。

6)類中有聯系的數據盡量放在相鄰的位置,可以放到一個cacheline里。

7)慎用字符串操作,比如sprintf,snprintf,因為%d %s等等都需要CPU資源去做詞法分析,數量多的話,也是不菲的開銷減少系統調用,例如time,主要消耗在用戶態和內核態之間的切換。

8)優化算法,減少遍歷操作。

9)優化架構,把系統管道調整到統一的半徑,解決瓶頸。

10)使用一些靜態池技術,比如內存池,線程池,連接池等,用空間換時間。

一個好的架構,服務器的CPU總消耗總是平均的分布在各個cpu上,CPU的消耗在70%左右。

內存

程序需要多少內存需要在設計的時候估計清楚,如果占用的內存接近物理內存,將會使用交換分區,影響性能。

網絡IO

1)使用epoll代替select

2)使用非阻塞的模式來開發

3)減少消息交互次數

4)數據流使用長鏈接

5)優化應用層協議

6) ? 使用DPDK

磁盤IO

1)內存中緩存寫入磁盤的數據,批量寫磁盤,減少寫入次數

2)利用順序寫,減少尋道次數

3)內存緩存熱點數據,緩解磁盤讀壓力

4)對磁盤IO密集型的服務使用SSD盤

3、常用命令

1)dstat (綜合)

dstat 是一個可以取代vmstat,iostat,netstat和ifstat這些命令的多功能產品。dstat克服了這些命令的局限并增加了一些另外的功能,增加了監控項,也變得更靈活了。dstat可以很方便監控系統運行狀況并用于基準測試和排除故障。

2)vmstat (綜合)

vmstat是一個很全面的性能分析工具,可以觀察到系統的進程狀態、內存使用、虛擬內存使用、磁盤的IO、中斷、上下文切換、CPU使用等。

Procs:

r:運行的和等待(CPU時間片)運行的進程數,這個值也可以判斷是否需要增加CPU(長期大于1)

b:處于不可中斷狀態的進程數,常見的情況是由IO引起的

Memory: 類似free命令

Swap:

si: 交換內存使用,由磁盤調入內存

so: 交換內存使用,由內存調入磁盤

內存夠用的時候,這2個值都是0,如果這2個值長期大于0時,系統性能會受到影響。磁盤IO和CPU資源都會被消耗。

IO:

bi: 從塊設備讀入的數據總量(讀磁盤) (KB/s),

bo: 寫入到塊設備的數據總理(寫磁盤) (KB/s)

隨機磁盤讀寫的時候,這2個 值越大,能看到CPU在IO等待的值也會越大

System:

in: 每秒產生的中斷次數

cs: 每秒產生的上下文切換次數

上面這2個值越大,會看到由內核消耗的CPU時間會越多

CPU:

us: 用戶進程消耗的CPU時間百分比

us 的值比較高時,說明用戶進程消耗的CPU時間多

sy: 內核進程消耗的CPU時間百分比

sy 的值高時,說明系統內核消耗的CPU資源多,這并不是良性的表現,我們應該檢查原因。

wa: IO等待消耗的CPU時間百分比

wa 的值高時,說明IO等待比較嚴重,這可能是由于磁盤大量作隨機訪問造成,也有可能是磁盤的帶寬出現瓶頸(塊操作)。

id: CPU處在空閑狀態時間百分比

3) top (CPU&內存)

可以查看系統中運行的進程的狀況,CPU使用狀況,系統負載,內存使用等。它是檢查系統進程運行狀況最方便的工具了,它默認顯示部分活動的進程,并且按照進程使用CPU的多少排序。它可以顯示全部CPU的使用狀況,也可以顯示每個進程都運行在那個CPU上面。

主要可以用top來看哪些進程或者那類進程占用CPU和內存資源最多,以此迅速定位存在性能問題的進程,以及運行異常的進程。

load average: 0.06, 0.60, 0.48 - 系統負載,即任務隊列的平均長度。 三個數值分別為? 1分鐘、5分鐘、15分鐘前到現在的平均值。這個值最好小于0.7,一般大于0.7說明需要調優。

%CPU這個字段在多線程多核的環境中會超過100。

4)mpstat (CPU)

它能實時監測多處理器上每個CPU的使用情況。

5)perf (CPU)

perf top命令可以查看哪些內核調用或用戶調用的性能。另外perf stat通過概括精簡的方式提供被調試程序運行的整體情況和匯總數據。

6)strace (CPU)

可以用來查看一個進程在執行過程中的系統調用和所接收的信號。

7)gprof (CPU)

程序中每個函數的CPU使用時間。

每個函數的調用次數。并提供簡單調用關系圖。

使用步驟:

用gcc或g++編譯程序時,使用-pg參數

執行編譯得到的運行程序,會產生一個gmon.out文件

使用gprof命令。查看結果信息。(gprof -b proc_name gmon.out | less)

8)lsof (文件)

它能列出當前系統打開的文件描述符,可以看到哪些進程打開了哪些文件。文件描述符有兩個層次的概念:用戶級限制和系統限制,用戶級限制可以通過ulimit

-n查看,系統級限制可以通過sysctl

-a命令查看,其中fs.file-max是整個系統共能打開的文件描述符,epoll.max_user_watches是一個用戶能往epoll內核事件表中注冊的事件總量,往epoll內核事件表中注冊一個事件,在32位系統上大概消耗90字節的內核空間,在64位系統上則消耗160字節的內核空間。

9)free (內存)

free命令顯示系統內存的使用狀況(物理內存和交換內存)通過這個命令我們可以看到系統進程實際使用的物理內存,buffer和cache使用的物理內存。

第二行的used/free是OS角度,包括buffer和cache使用的內存。

第三行的used/free是用戶角度,不包括buffer和cache使用的內存。

10)netstat (網絡)

可以打印本地網卡接口上的全部連接,路由表信息,網卡接口信息等,一般用netstat -apn

11)ifstat (網絡)

它是一個網絡流量監測工具,可以輸出各個網卡的in/out流量信息。

12) tcpdump (網絡網絡)

linux下的抓包工具。可以把抓下來的信息重定向到文件里。使用wireshark打開。

13)iostat (磁盤)

它主要用于監控系統設備的IO負載情況。

14)nc (調試工具)

主要用來快速構建網絡連接。可以讓它以服務器方式運行,監聽某個端口并接收客戶連接,可以用于調測客戶端程序。也可以使之以客戶端方式運行,向服務器發起連接并收發數據,可以用于調試服務器程序。

4、開發運維

代碼中跟服務器資源相關的參數,包括連接數(內存 64G 200萬),線程數(虛擬cpu數),qps(cpu busy),各種緩存(buffer)首先要做到可以靜態配置,再高一點要求要做到動態配置,最終要做到代碼可以根據服務器資源使用情況智能調整,同時還要有有效的服務降級策略,保證服務可用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數據革命閱讀 12,228評論 2 33
  • 又來到了一個老生常談的問題,應用層軟件開發的程序員要不要了解和深入學習操作系統呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,172評論 0 23
  • 這篇文章主要介紹一些常用的linux服務器性能監控命令,包括命令的常用參數、指標的含義以及一些交互操作。 幾個問題...
    dancingking閱讀 8,391評論 6 22
  • 作者:五月媽的生活 都說北京有三怪:人跑的比車快,花的要比掙得快,孫子孫女姥姥帶。 哈哈~真是哭笑不得,作為北京長...
    五月成長日記閱讀 1,092評論 2 2
  • 柳永才情絕世,卻又是不折不扣的酒色之徒;他放蕩不羈,卻又是一個生就的情種;他滿腹經綸,卻終生抑郁,大志不伸;他自詡...
    博慧bohui閱讀 1,086評論 0 6