有時我們會發現開發的應用在cpu核數一樣的虛擬伺服器上效能表現出較大的差異,這是為什麼呢?上次有童鞋問到我這樣乙個問題,所以我根據自己的理解給大家簡說下!
cpu生產商為了提高cpu的效能,通常做法是提高cpu的時鐘頻率和增加快取容量。不過目前cpu的頻率越來越快,如果再通過提公升cpu頻率和增加快取的方法來提高效能,往往會受到製造工藝上的限制以及成本過高的制約。於是出現了超執行緒技術。
超執行緒技術:將一顆具hyper-threading功能的「實體」處理器變成兩個「邏輯」處理器。
linux命令:我們先看來虛擬伺服器1的cpu配置資訊:cat /proc/cpuinfo
引數解釋:
processor 邏輯處理器的id
physical id 物理封裝的處理器的id
core id 每個核心的id
cpu cores 位於相同物理封裝的處理器中的核心數量
siblings 位於相同物理封裝的處理器中的邏輯處理器的數量
cpu mhz 主頻
cache size 快取大小(kb)
說明:該伺服器主機有2個物理封裝的處理器(physical id),每個處理器有1個處理核心(cpu cores),每個處理核心劃分成2個邏輯處理器(processor),可以看出此處使用了超執行緒技術,如下所示:
再看來虛擬伺服器2的cpu配置資訊:
說明:該伺服器主機有1個物理封裝的處理器(physical id),每個處理器有4個處理核心(cpu cores),每個處理核心劃分成1個邏輯處理器(processor),可以看出此處未使用超執行緒技術,如下所示:
上述2臺虛擬機器,從cpu的角度講哪台效能會發揮地更好呢?
答:從邏輯處理器數量來看,2臺虛擬機器都是4個,但從主頻和快取大小可以看出,虛擬機器2的效能應該比虛擬機器1好。
如果2臺虛擬機器的主頻和快取大小一樣呢,從cpu的角度看哪台效能更好呢?
答:從邏輯處理器數量來看,2臺虛擬機器一樣,而虛擬機器1使用了超執行緒技術,理論上講虛擬機器1的效能比較靠近虛擬機器2的效能,前提的是我們開發應用要支援超執行緒技術,否則也無法發揮出良好的效能!這裡面其實還有乙個誤區:
比如說,我們的應用使用多執行緒技術開發的,那麼在cpu層面開啟了超執行緒技術,一定會提高效能嗎?答案是否定的!只有當應用程式使用的執行緒數大於cpu的核數,效能才能提高上去!
伺服器效能監控 cpu
最近伺服器load較高,後來排查是死迴圈 這可要命了,下面介紹乙個普通排查方法 top 檢視pid 負載較高的那個 當然 jps也可以 然後 定位 這個程序ip下面的執行緒耗時情況 ps mp pid o thread,tid,time 看time 可能有乙個執行緒執行時間特別長 幾十分鐘或者更長 ...
高效能伺服器之epoll
什麼是epoll epoll是什麼?是為處理 大批量控制代碼 而作了改進的poll。它 幾乎具備了之前所說的 一切優點,被公認為linux2.6下效能最好的多路i o就緒通 知 方法。epoll的相關系統調 用 epoll只有epoll create,epoll ctl,epoll wait 3個系...
高效能伺服器之select
系統提供select函式來實現多路復 用輸 入 輸出模型。select系統調 用是 用來讓我們的程式監視 多個 檔案控制代碼的狀態變化的。程式會停在select這 裡等待,直到被監視的 檔案控制代碼有 乙個或 多個發 生了狀態改變 int select int nfds,fd set readfds...