效能調優攻略

2021-06-07 07:01:33 字數 1848 閱讀 7156

關於效能優化這是乙個比較大的話題,在《由12306.cn談談**效能技術》中我從業務和設計上說過一些可用的技術以及那些技術的優缺點,今天,想從一些技術細節上談談效能優化,主要是一些**級別的技術和方法。本文的東西是我的一些經驗和知識,並不一定全對,希望大家指正和補充。

在開始這篇文章之前,大家可以移步去看一下以前發表的《**優化概要》,這篇文章基本上告訴你——要進行優化,先得找到效能瓶頸!但是在講如何定位系統效能瓶勁之前,請讓我講一下系統效能的定義和測試,因為沒有這兩件事,後面的定位和優化無從談起。

一、系統效能定義

讓我們先來說說什麼是系統效能。這個定義非常關鍵,如果我們不清楚什麼是系統效能,那麼我們將無法定位之。我見過很多朋友會覺得這很容易,但是仔細一問,其實他們並沒有乙個比較系統的方法,所以,在這裡我想告訴大家如何系統地來定位效能。總體來說,系統效能就是兩個事:

throughput吞吐量。也就是每秒鐘可以處理的請求數,任務數。

latency系統延遲。也就是系統在處理乙個請求或乙個任務時的延遲。

一般來說,乙個系統的效能受到這兩個條件的約束,缺一不可。比如,我的系統可以頂得住一百萬的併發,但是系統的延遲是2分鐘以上,那麼,這個一百萬的負載毫無意義。系統延遲很短,但是吞吐量很低,同樣沒有意義。所以,乙個好的系統的效能測試必然受到這兩個條件的同時作用。有經驗的朋友一定知道,這兩個東西的一些關係:

二、系統效能測試

經過上述的說明,我們知道要測試系統的效能,需要我們收集系統的throughput和latency這兩個值。

再多說一些

效能測試有很多很復要的東西,比如:burst test等。這裡不能一一詳述,這裡只說了一些和效能調優相關的東西。總之,效能測試是一細活和累活。

三、定位效能瓶頸

有了上面的鋪墊,我們就可以測試到到系統的效能了,再調優之前,我們先來說說如何找到效能的瓶頸。我見過很多朋友會覺得這很容易,但是仔細一問,其實他們並沒有乙個比較系統的方法。

3.1檢視作業系統負載

首先,當我們系統有問題的時候,我們不要急於去調查我們**,這個毫無意義。我們首要需要看的是作業系統的報告。看看作業系統的cpu利用率,看看記憶體使用率,看看作業系統的io,還有網路的io,網路鏈結數,等等。windows下的perfmon是乙個很不錯的工具,linux下也有很多

1)先看cpu利用率,如果cpu利用率不高,但是系統的throughput和latency上不去了,這說明我們的程式並沒有忙於計算,而是忙於別的一些事,比如io。(另外,cpu的利用率還要看核心態的和使用者態的,核心態的一上去了,整個系統的效能就下來了。而對於多核cpu來說,cpu 0是相當關鍵的,如果cpu 0的負載高,那麼會影響其它核的效能,因為cpu各核間是需要有排程的,這靠cpu0完成)

2)然後,我們可以看一下io大不大,io和cpu一般是反著來的,cpu利用率高則io不大,io大則cpu就小。關於io,我們要看三個事,乙個是磁碟檔案io,乙個是驅動程式的io(如:網絡卡),乙個是記憶體換頁率。這三個事都會影響系統效能。

3)然後,檢視一下網路頻寬使用情況,在linux下,你可以使用iftop,iptraf,ntop,tcpdump這些命令來檢視。或是用wireshark來檢視。

4)如果cpu不高,io不高,記憶體使用不高,網路頻寬使用不高。但是系統的效能上不去。這說明你的程式有問題,比如,你的程式被阻塞了。可能是因為等那個鎖,可能是因為等某個資源,或者是在切換上下文。

通過了解作業系統的效能,我們才知道效能的問題,比如:頻寬不夠,記憶體不夠,tcp緩衝區不夠,等等,很多時候,不需要調整程式的,只需要調整一下硬體或作業系統的配置就可以了。

效能調優攻略

摘要 關於效能優化這是乙個比較大的話題,在 由12306.cn談談 效能技術 中我從業務和設計上說過一些可用的技術以及那些技術的優缺點,今天,想從一些技術細節上談談效能優化,主要是一些 級別的技術和方法。關於效能優化這是乙個比較大的話題,在 由12306.cn談談 效能技術 中我從業務和設計上說過一...

調優 Nginx效能調優

一.nginx優化配置 1.主配置檔案優化 注 部分配置詳解 worker processes 8 nginx程序數,建議按照cpu數目來指定,一般為它的倍數。worker cpu affinity 00000001 00000010 00000100 00001000 00010000 00100...

Spark效能調優 JVM調優

通過一張圖讓你明白以下四個問題 1.jvm gc機制,堆記憶體的組成 2.spark的調優為什麼會和jvm的調優會有關聯?因為scala也是基於jvm執行的語言 3.spark中oom產生的原因 4.如何在jvm這個層面上來對spark進行調優 補充 spark程式執行時 jvm堆記憶體分配比例 r...