1. 程式人生 > >Linux效能優化之CPU、記憶體、IO優化

Linux效能優化之CPU、記憶體、IO優化

 Linux 的效能進行監測,以下是 VPSee 常用的工具:
工具    簡單介紹
top    檢視程序活動狀態以及一些系統狀況
vmstat    檢視系統狀態、硬體和系統資訊等
iostat    檢視CPU 負載,硬碟狀況
sar    綜合工具,檢視系統狀況
mpstat    檢視多處理器狀況
netstat    檢視網路狀況
iptraf    實時網路狀況監測
tcpdump    抓取網路資料包,詳細分析
tcptrace    資料包分析工具
netperf    網路頻寬工具

dstat    綜合工具,綜合了 vmstat, iostat, ifstat, netstat 等多個資訊


前言

何為效能優化?個人認為,效能優化是為了提高應用程式或系統能力為目的。那麼如何才能實現對應用程式的效能調優呢?這裡很設計到很多的內容,包括Linux核心、CPU架構以及Linux核心對資源的分配以及管理,瞭解程序的建立過程等。這方面由於篇幅較多,所以我的文章就不過多介紹。接下來的幾篇文章中,都是講解如何發現應用程式故障根源為目標講解,這也是每一個系統工程師應該具備的能力。廢話不多說,我直接進入主題。

常用術語

  延時:延時是描述操作之後用來等待返回結果的時間。在某些情況下,它可以指的是整個操作時間,等同於響應時間。

  IOPS:每秒發生的輸入/輸出操作的次數,是資料傳輸的一個度量方法。對於磁碟的讀寫,IOPS指的是每秒讀寫的次數。

  響應時間:一般操作完成的時間。包括用於等待和服務的時間,也包括用來返回結果的時間。

  使用率:對於服務所請求的資源,使用率描述在所給定時間區間內資源的繁忙程度。對於春初資源來說,使用率指的就是所消耗的儲存容量。

  飽和度:指的就是某一資源無法滿足服務的排隊工作量。

  吞吐量:評價工作秩序的速率,尤其是在資料傳輸方面,這個屬於用於資料傳輸速度(位元組/秒和位元/秒)。在某些情況下,吞吐量指的是操作的速度。

Linux核心功能

  CPU排程級別:各種先進的CPU排程演算法,非一直儲存訪問架構(NUMA);

  I/O排程界別:I/O排程演算法,包括deadline/anticipatory和完全公平佇列(CFQ);

  TCP網路阻塞:TCP擁堵演算法,允許按需選擇;

常見問題

程序、執行緒和任務之間的區別是什麼?

  程序通常定義為程式的執行。用以執行使用者級別程式的環境。它包括記憶體地址空間、檔案描述符、執行緒棧和暫存器。
  執行緒是某一程序中單獨執行的程式。也就是說執行緒在程序之中。
  任務是程式完成的某一活動,可以使一個程序,也可以是一個執行緒。

參考連線:http://blog.chinaunix.net/uid-25100840-id-271078.html

什麼是上下文切換?

  執行一段程式程式碼,實現一個功能的過程介紹,當得到CPU的時候,相關的資源必須也已經就位,就是顯示卡、記憶體、GPS等,然後CPU開始執行。這裡除了CPU以外所有的就構成了這個程式的執行環境,也就是我們所定義的程式上下文。當這個程式執行完或者分配給他的CPU執行時間用完了,那它就要被切換出去,等待下一次CPU的臨幸。在被切換出去的最後一步工作就是儲存程式上下文,因為這個是下次他被CPU臨幸的執行環境,必須儲存。

I/O密集型和CPU密集型工作負載之間的區別?

  I/O密集型指的是系統的CPU耗能相對硬碟/記憶體的耗能能要好很多,此時,系統運作,大部分的狀況是 CPU 在等 I/O(硬碟/記憶體)的讀/寫,此時CPU負載不高。CPU密集型指的是系統的硬碟/記憶體耗能相對CPU的耗能要好很多,此時,系統運作,大部分的狀況是 CPU負載 100%,CPU 要讀/寫 I/O (硬碟/記憶體),I/O在很短的時間就可以完成,而CPU還有許多運算要處理,CPU負載很高。一般而言CPU佔用率相當高,大部份時間用來做計算、邏輯判斷等CPU動作的程式。

應用程式效能技術

1.選擇I/O尺寸
  執行I/O的開銷包括初始化緩衝區、系統呼叫、上下文切換、分配核心元資料、檢查程序許可權和限制、對映地址到裝置、執行核心和驅動程式碼來執行I/O,以及在最後釋放元資料和緩衝區。增加I/O尺寸是應用程式提高吞吐量的常用策略。
2.快取
  作業系統用快取提高檔案系統的讀效能和記憶體的分配效能,應用程式使用快取也處於類似的原因。將經常執行的操作結果儲存在本地快取中以備後用,而非總是執行開銷較高的操作。
3.緩衝區
  為了提高寫操作效能,資料在送入下一層級之前會合並並放在緩衝區中。這樣會增加寫延時,因為第一次寫入緩衝區後,在傳送之前,還要等待後續的寫入。
4. 併發和並行
  並行:裝在和開始執行多個可執行程式的能力(比如,同時接電話和吃飯)。為了利用多核處理器系統的優勢,應用程式需要在同一時間執行在多顆CPU上,這種方式稱為並行。應用程式通過多程序或多執行緒實現。
  併發:有處理多個任務的能力,不一定要同時。比如,接完電話在去吃飯,存在資源搶佔;
  同步原語:同步原語監管記憶體的訪問,當不允許訪問時,就會引起等待時間(延時)。常見三種類型:
  mutex鎖:只有鎖持有者才能操作,其他執行緒會阻塞並等待CPU;
  自旋鎖:自旋鎖允許鎖持有者操作,其他的需要自旋鎖的執行緒會在CPU上迴圈自選,檢查鎖是否被釋放。雖然這樣可以提供低延時的訪問,被阻塞的執行緒不會離開CPU,時刻準備著執行知道鎖可用,但是執行緒自旋、等待也是對CPU資源的浪費。
  讀寫鎖:讀/寫鎖通過允許多個讀者或者只允許一個寫者而沒有讀者,來保證資料的完整性。
  自適應自旋鎖:低延遲的訪問而不浪費CPU資源,是mutex鎖和自旋鎖的混合。
5.繫結CPU

關於CPU效能分析

uptime:
  系統負載,通過彙總正在執行的執行緒數和正在排隊等待執行的執行緒數計算得出。分別反映1/5/15分鐘以內的負載。現在的平均負載不僅用來表示CPU餘量或者飽和度,也不能單從這個值推斷出CPU或者磁碟負載。

vmstat:
  虛擬記憶體統計資訊命令。最後幾列列印系統全域性範圍內的CPU使用狀態,在第一列顯示可執行程序數。如下所示:

1 2 3 4 [[email protected] ~]# vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r  b   swpd   free   buff   cache   si   so    bi    bo   in   cs us sy id  wa  st 0  0   0    14834208 158384 936512  0     0     0     0    1   3   0  0 100  0  0

提示:

  r: 執行佇列長度和正在執行的執行緒數;

  b: 表示阻塞的程序數;

  swpd: 虛擬記憶體已使用的大小,如果大於0,表示你的機器實體記憶體不足了,如果不是程式記憶體洩露的原因,那麼你該升級記憶體了或者把耗記憶體的任務遷移到其他機器;

  si: 每秒從磁碟讀入虛擬記憶體的大小,如果這個值大於0,表示實體記憶體不夠用或者記憶體洩露了,要查詢耗記憶體程序解決掉。我的機器記憶體充裕,一切正常。

  so: 每秒虛擬記憶體寫入磁碟的大小,如果這個值大於0,同上;

  bi: 塊裝置每秒接收的塊數量,這裡的塊裝置是指系統上所有的磁碟和其他塊裝置,預設塊大小是1024byte,我本機上沒什麼IO操作,所以一直是0,但是我曾在處理拷貝大量資料(2-3T)的機器上看過可以達到140000/s,磁碟寫入速度差不多140M每秒;

  bo: 塊裝置每秒傳送的塊數量,例如我們讀取檔案,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整;

  in: 每秒CPU的中斷次數,包括時間中斷;

  cs:  每秒上下文切換次數,例如我們呼叫系統函式,就要進行上下文切換,執行緒的切換,也要程序上下文切換,這個值要越小越好,太大了,要考慮調低執行緒或者程序的數目,例如在apache和nginx這種web伺服器中,我們一般做效能測試時會進行幾千併發甚至幾萬併發的測試,選擇web伺服器的程序可以由程序或者執行緒的峰值一直下調,壓測,直到cs到一個比較小的值,這個程序和執行緒數就是比較合適的值了。系統呼叫也是,每次呼叫系統函式,我們的程式碼就會進入核心空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁呼叫系統函式。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。

  st: cpu在虛擬化環境上在其他租戶上的開銷;

mpstat:
  多處理器統計資訊工具,能夠報告每個CPU的統計資訊。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [[email protected] ~]# mpstat -P ALL 1 Linux 2.6.32-573.el6.x86_64 (zbredis-30104)     09/14/2017  _x86_64_    (12 CPU) 03:14:03 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle

相關推薦

Android應用效能測試CPU記憶體佔用

 最近發現自己學的很多東西沒有做好積澱的工作,也萌生了寫一些東西的念頭。本人也沒有寫部落格的習慣,下邊就寫一下手機端的效能測試。   最近公司,要我們從事對競品的效能測試,我負責CPU和記憶體的效能測試,下面就和大家來分享一下android應用程式的CPU和記憶體的效能

Linux效能優化CPU記憶體IO優化

 Linux 的效能進行監測,以下是 VPSee 常用的工具: 工具    簡單介紹 top    檢視程序活動狀態以及一些系統狀況 vmstat    檢視系統狀態、硬體和系統資訊等 iostat    檢視CPU 負載,硬碟狀況 sar    綜合工具,檢視

python功能模組psutil------ Linux效能CPU磁碟記憶體網絡卡)監控

採集系統的基本效能資訊包括CPU、記憶體、磁碟、網路等,可以完整描述當前系統的執行狀態及質量。psutil模組已經封裝了這些方法,使用者可以根據自身的應用場景,呼叫相應的方法來滿足需求,非常簡單實用。 (1)CPU資訊 Linux作業系統的CPU利用率有以下幾個部分:

linux調優:按照CPU記憶體磁碟IO網路效能監測

系統優化是一項複雜、繁瑣、長期的工作,優化前需要監測、採集、測試、評估,優化後也需要測試、採集、評估、監測,而且是一個長期和持續的過程,不 是說現在優化了,測試了,以後就可以一勞永逸了,也不是說書本上的優化就適合眼下正在執行的系統,不同的系統、不同的硬體、不同的應用優化的重點也不同、 優化的

Linux按照CPU記憶體磁碟IO網路效能監測(強烈推薦)

系統優化是一項複雜、繁瑣、長期的工作,優化前需要監測、採集、測試、評估,優化後也需要測試、採集、評估、監測,而且是一個長期和持續的過程,不 是說現在優化了,測試了,以後就可以一勞永逸了,也不是說書本上的優化就適合眼下正在執行的系統,不同的系統、不同的硬體、不同的應用優化的重

Linux下java獲取CPU記憶體磁碟IO網路頻寬使用率

原文地址:https://www.cnblogs.com/gisblogs/p/3985393.html 一、CPU 使用proc檔案系統,"proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式可以通過p

linux下檢視CPU記憶體磁碟資訊,資料夾資訊,GPU資訊

1、檢視CPU資訊 # 總核數 = 物理CPU個數 X 每顆物理CPU的核數  # 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超執行緒數 # 檢視物理CPU個數 cat /proc/cpuinfo| grep "physical id"| sort| uniq| w

Linux效能優化CPU上下文切換上

  程序在競爭 CPU 的時候並沒有真正執行,為什麼還會導致系統的負載升高 呢?看到今天的主題,你應該已經猜到了,CPU 上下文切換就是罪魁禍首。 我們都知道,Linux 是一個多工作業系統,它支援遠大於 CPU 數量的任務同時執行。當然, 這些任務實際上並不是真的在同時執行,而是因為系統在很短的

Zabbix4.0.1使用自帶模板監控Linux主機基本選項(CPU記憶體硬碟網絡卡)

zabbix_agent 端            ip : 192.168.1.206      hostname:  www.test3.com   1、新增主機  

Linux效能優化CPU優化(一)

前言 何為效能優化?個人認為,效能優化是為了提高應用程式或系統能力為目的。那麼如何才能實現對應用程式的效能調優呢?這裡很設計到很多的內容,包括Linux核心、CPU架構以及Linux核心對資源的分配以及管理,瞭解程序的建立過程等。這方面由於篇幅較多,所以我的文章就不過多介紹。接下來的幾篇文章中,

簡述效能優化tomcat配置(從記憶體併發快取方面)優化及壓力測試

Tomcat有很多方面,我綜合網上文章和自己的優化過程簡單概括。 一.Tomcat記憶體優化   Tomcat記憶體優化主要是對 tomcat 啟動引數優化,我們可以在 tomcat 的啟動指令碼 catalina.sh 中設定 java_OPTS 引數。   JAVA_OPTS引

jmeter學習------監控linuxcpu記憶體網路等資源佔用曲線圖

需求: 1、瞭解系統執行的機器的資源佔用情況 2、使用jmeter監控機器上的cpu、記憶體、網路等資源佔用曲線圖 3、從資源佔用曲線圖中-預測系統併發量、資料處理量的能力 步驟: 1、這裡使用apache-jmeter-3.1版本 2、加入plugins外掛:

CentOS7.1 KVM虛擬化虛擬機器記憶體CPU調整

一、調小虛擬機器記憶體 調小虛擬機器記憶體可以動態實現,不用關機 1.檢視當前記憶體大小 [plain] view plain copy [[email protected] ~]# virsh dominfo vm1-clone | gr

linux系統cpu記憶體磁碟IO異常查詢方式彙總

對linux系統中cpu、記憶體、磁碟IO異常定位的方式進行梳理總結如下: 1、先記錄下基本的cpu資訊查詢方式: # 總核數 = 物理CPU個數 X 每顆物理CPU的核數 # 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超執行緒數 # 檢視物理CP

效能優化YUICompressor壓縮JSCSS

效能一直是專案中比較重要的一點,尤其入口網站,對頁面的響應要求是很高的,從效能角度上來講,對於Web端的優化其中重要的一點無疑是JS、CSS檔案壓縮,圖片的融合,儘量減小檔案的大小,必免佔加載時佔用過多的頻寬。yuicompressor無疑是一個比較好的壓縮工具

Linux作業系統檢視CPU型號個數核數邏輯CPU位數發行版本核心資訊記憶體伺服器生產廠家

Linux下的CPU資訊全部都在/proc/cpuinfo這個檔案中,可以直接開啟看。  # 總核數 = 物理CPU個數 X 每顆物理CPU的核數 # 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超執行緒數 判斷是否開啟了超執行緒: 如果多個邏輯CP

app專項效能測試——獲取手機cpu記憶體流量

1、Cpu獲取瞭解過騰訊GT工具的原始碼,他們用的是通過讀取/proc/stat的資料,將每一個核的cpu使用跟閒置資料提取。使用率永遠是增量式計算。計算方法為100*(cpu忙時增量-cpu整體增量),從計算方法來看,可能會導致負數出現。 getProcessCpuUsag

Qt linux獲取cpu使用率記憶體網路收發速度磁碟讀寫速度磁碟剩餘空間等

#include "resource_minitor.h" #include "sys/statfs.h" resource_minitor::resource_minitor(QObject *parent) : QObject(parent) { connect(&monito

Oracle 12c系列(四)|資源隔離IO記憶體CPU

伺服器主機提供IO、記憶體、CPU、儲存空間等資源為資料庫使用,Oracle使用Flex Diskgroup為資料庫提供儲存空間並做了相應的資源隔離。下面我們來看下Oracle是如何為不同的PDB做IO、記憶體、CPU限制的。 一、IO 資源隔離 12c

Java 連線遠端Linux 伺服器執行 shell 指令碼檢視 CPU記憶體硬碟資訊

/* * Written by wei.Li and released to the public domain * Welcome to correct discussion as explained at * * ------------------------------------------