點擊返回架構師成長之路html
監控入門:linux
預中級監控須要作:sql
中級監控須要作:數據庫
進階監控須要作:安全
[A] 上下文切換: 性能優化
目前流行的CPU在同一時間內只能運行一個線程,超線程的處理器能夠在同一時間運行多個線程(包括多核CPU),Linux內核會把多核 的處理器看成多個單獨的CPU來識別。
一個標準的Linux內核能夠支持運行50~50000個進程運行,對於普通的CPU,內核會調度和執行這些進程。每一個進程都會分到CPU的時間片來運行,當一個進程用完時間片或者被更高優先級的進程搶佔後,它會備份 到CPU的運行隊列中,同時其餘進程在CPU上運行。這個進程切換的過程被稱做上下文切 換。過多的上下文切換會形成系統很大的開銷。網絡
[B] 運行隊列(負載):
數據結構
每一個CPU都會維持一個運行隊列,理想狀況下,調度器會不斷讓隊列中的進程運行。進程不是處在sleep狀態就是runable狀態。若是CPU過載,就會出現調度器跟不上系統的要求,致使可運行的進程會填滿隊列。隊列愈大,程序執行時間就愈長。多線程
補充:關於時間片和動態優先級架構
時間片對於CPU來講是很關鍵的參數,若是時間片太長,就會使系統的交互性能變差,用戶感受不到並行。若是過短,又會形成系統頻繁的上下文切換,使性能 降低。對於IO Bound的系統來說並不須要太長的 時間片,由於系統主要是IO操做;而對於CPU Bound的系統來講須要長的時間片以保持cache的有效性。
每個進程啓動的時候系統都會給出一個默認的優先級,但在運行過程當中,系統會根據進程的運行情況不斷調整優先級,內核會升高或下降進程的優先級(每次增長或下降5),判斷標準是根據進程處於sleep狀態的時間。
IO Bound進程大部分時間在sleep狀態,因此內核會調高它的優先級,CPU Bound進程會被內核懲罰下降優先級。所以,若是一個系統上即運行IO Bound進程,又運行CPU Bound進程,會發現,IO Bound進程的性能不會降低,而CPU Bound進程性能會不斷降低。
[C] CPU使用率:
CPU使用的百分比。對於上下文切換要結合CPU使用率來看,若是CPU使用知足上述分佈,大量的上下文切換也是能夠接受的。
補充:內核態與用戶態
intel x86 CPU有四種不一樣的執行級別0-3,linux只使用了其中的0級和3級分別來表示內核態和用戶態。
內核態與用戶態是操做系統的兩種運行級別。
運行在用戶態下的程序不能直接訪問操做系統內核數據結構和程序。
當咱們在系統中執行一個程序時,大部分時間是運行在用戶態下的,在其須要操做系統幫助完成某些它沒有權力和能力完成的工做時就會切換到內核態。
這兩種狀態的主要差異是:
補充:用戶態和內核態的轉換
1)用戶態切換到內核態的3種方式
這3種方式是系統在運行時由用戶態轉到內核態的最主要方式,其中系統調用能夠認爲是用戶進程主動發起的,異常和外圍設備中斷則是被動的。
2)具體的切換操做
從觸發方式上看,能夠認爲存在前述3種不一樣的類型,可是從最終實際完成由用戶態到內核態的切換操做上來講,涉及的關鍵步驟是徹底一致的,沒有任何區別,都至關於執行了一箇中斷響應的過程,由於系統調用實際上最終是中斷機制實現的,而異常和中斷的處理機制基本上也是一致的,關於它們的具體區別這裏再也不贅述。關於中斷處理機制的細節和步驟這裏也不作過多分析,涉及到由用戶態切換到內核態的步驟主要包括:
【A】CPU密集型(CPU-bound)
CPU密集型也叫計算密集型,指的是系統的硬盤、內存性能相對CPU要好不少,此時,系統運做大部分的情況是CPU Loading 100%,CPU要讀/寫I/O(硬盤/內存),I/O在很短的時間就能夠完成,而CPU還有許多運算要處理,CPU Loading很高。
在多重程序系統中,大部份時間用來作計算、邏輯判斷等CPU動做的程序稱之CPU bound。例如一個計算圓周率至小數點一千位如下的程序,在執行的過程中絕大部份時間用在三角函數和開根號的計算,即是屬於CPU bound的程序。
CPU bound的程序通常而言CPU佔用率至關高。這多是由於任務自己不太須要訪問I/O設備,也多是由於程序是多線程實現所以屏蔽掉了等待I/O的時間。
【B】IO密集型(I/O bound)
IO密集型指的是系統的CPU性能相對硬盤、內存要好不少,此時,系統運做,大部分的情況是CPU在等I/O (硬盤/內存) 的讀/寫操做,此時CPU Loading並不高。
I/O bound的程序通常在達到性能極限時,CPU佔用率仍然較低。這多是由於任務自己須要大量I/O操做,而pipeline作得不是很好,沒有充分利用處理器能力。
CPU密集型適合C語言多線程,I/O密集型適合腳本語言開發的多線程。
經驗總結:
【A】top 命令
P CPU使用率排序
W 內存使用率排序
【B】sysstat工具包
vmstat(Virtual Memory Statistics 虛擬內存統計) 命令用來顯示Linux系統虛擬內存狀態,也能夠報告關於進程、內存、I/O等系統總體運行狀態。
mpstat:其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPUs系統裏,其不但能查看全部CPU的平均情況信息,並且可以查看特定CPU的信息。
分紅頁 每頁4KB
[A] 內存尋址:
內存尋址是指CPU容許支持的內存大小。雙通道內存技術實際上是一種內存控制和管理技術,它依賴於芯片組的內存控制器發生做用,在理論上可以使兩條同等規格內存所提供的帶寬增加一倍。當計算機面臨大量的數據流時,32位的寄存器和指令集不能及時進行相應的處理運算。
計算機管理內存的基本方式有兩種:段式管理和頁式管理。
而在使用80x86微處理器時,內存地址分爲三個不一樣的地址:邏輯地址,線性地址,物理地址。
邏輯地址:包含在機器語言指令中用來指定一個操做數或一條指令的地址,每一個邏輯地址都由一個段和偏移量組成,表示爲[段標識符:段內偏移量]。例如,在C/C++程序中咱們使用指針對變量地址操做,該地址就是邏輯地址(準確的應該說是邏輯地址的段內偏移量)。對應上述段式管理,邏輯地址是段式管理轉換前的程序地址。
[B] 內存空間:
內存是計算機系統中一個主要部件, 用於保存進程運行時的程序和數據,也稱可執行存儲器。在計算機中,內存空間通常是指主存儲器空間(物理地址空間)或系統爲一個用戶程序分配內存空間。擴展內存空間的方法通常有增長內存大小和虛擬內存。
free命令
IOPS: IOPS(Input/Output Operations Per Second)是一個用於計算機存儲設備(如硬盤(HDD)、固態硬盤(SSD)或存儲區域網絡(SAN))性能測試的量測方式,能夠視爲是每秒的讀寫次數。
隨機訪問(隨機IO)、順序訪問(順序IO)
隨機訪問和順序訪問一樣是有應用決定的。如數據庫、小文件的存儲的業務,大可能是隨機IO。而視頻類業務、大文件存取,則大多爲順序IO。
選取合理的觀察指標:
以上各指標中,不用的應用場景須要觀察不一樣的指標,由於應用場景不一樣,有些指標甚至是沒有意義的。
iotop 命令:監控硬盤IO的使用狀況
iftop命令 查看實時的網絡流量,監控TCP/IP鏈接等
因爲安裝好的EPEL沒有iftop,因此沒法使用yum install iftop直接安裝,因此測試的時候採用編譯安裝。
yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz tar zxvf iftop-0.17.tar.gz cd iftop-0.17 ./configure make && make install
經常使用的參數:
上圖說明:
....