通過執行以下命令,可以在1分鍾內對系統資源使用情況有個大致的了解。
uptime
dmesg
|
tail
vmstat
1
mpstat
-P
ALL
1
pidstat
1
iostat
-xz
1
free
-m
sar
-n
DEV
1
sar
-n
TCP,ETCP
1
top
其中一些命令需要安裝sysstat包,有一些由procps包提供。這些命令的輸出,有助於快速定位性能瓶頸,檢查出所有資源(CPU、內存、磁碟IO等)的利用率(utilization)、飽和度(saturation)和錯誤(error)度量,也就是所謂的USE方法。
下面我們來逐一介紹下這些命令,有關這些命令更多的參數和說明,請參照命令的手冊。
B. 如何解決磁碟io造成的系統卡頓問題
具體問題具體分析,舉例來說明為什麼磁碟IO成瓶頸資料庫的性能急速下降了。
為什麼當磁碟IO成瓶頸之後, 資料庫的性能不是達到飽和的平衡狀態,而是急劇下降。為什麼資料庫的性能有非常明顯的分界點,原因是什麼?
相信大部分做資料庫運維的朋友,都遇到這種情況。 資料庫在前一天性能表現的相當穩定,資料庫的響應時間也很正常,但就在今天,在業務人員反饋業務流量沒有任何上升的情況下,資料庫的變得不穩定了,有時候一個最簡單的insert操作, 需要幾十秒,但99%的insert卻又可以在幾毫秒完成,這又是為什麼了?
dba此時心中有無限的疑惑,到底是什麼原因呢? 磁碟IO性能變差了?還是業務運維人員反饋的流量壓根就不對? 還是資料庫內部出問題?昨天不是還好好的嗎?
當資料庫出現響應時間不穩定的時候,我們在操作系統上會看到磁碟的利用率會比較高,如果觀察仔細一點,還可以看到,存在一些讀的IO. 資料庫伺服器如果存在大量的寫IO,性能一般都是正常跟穩定的,但只要存在少量的讀IO,則性能開始出現抖動,存在大量的讀IO時(排除配備非常高速磁碟的機器),對於在線交易的資料庫系統來說,大概性能就雪崩了。為什麼操作系統上看到的磁碟讀IO跟寫IO所帶來的性能差距這么大呢?
如果親之前沒有注意到上述的現象,親對上述的結論也是懷疑。但請看下面的分解。
在寫這個文章之前,作者閱讀了大量跟的IO相關的代碼,如非同步IO線程的相關的,innodb_buffer池相關的,以及跟讀數據塊最相關的核心函數buf_page_get_gen函數以及其調用的相關子函數。為了將文章寫得通俗點,看起來不那麼累,因此不再一行一行的將代碼解析寫出來。
咱們先來提問題。buf_page_get_gen函數的作用是從Buffer bool裡面讀數據頁,可能存在以下幾種情況。
提問. 數據頁不在buffer bool 裡面該怎麼辦?
回答:去讀文件,將文件中的數據頁載入到buffer pool裡面。下面是函數buffer_read_page的函數,作用是將物理數據頁載入到buffer pool, 圖片中顯示
buffer_read_page函數棧的頂層是pread64(),調用了操作系統的讀函數。
通過解析buf_wait_for_read函數的下層函數,我們知道其實通過首先自旋加鎖pin的方式,超過設定的自旋次數之後,進入等待,等待IO完成被喚醒。這樣節省不停自旋pin時消耗的cpu,但需要付出被喚起時的開銷。
再繼續擴展問題: 如果會話線程A 經過物理IO將數據頁1001讀入buffer之後,他需要修改這個頁,而在會話線程A之後的其他的同樣需要訪問數據頁1001的會話線程,即使在數據頁1001被入讀buffer pool之後,將仍然處於等待中。因為在數據頁上讀取或者更新的時候,同樣需要上鎖,這樣才能保證數據頁並發讀取/更新的一致性。
由此可見,當一個高並發的系統,出現了熱點數據頁需要從磁碟上載入到buffer pool中時,造成的延遲,是難以想像的。因此排在等待熱點頁隊列最後的會話線程最後才得到需要的頁,響應時間也就越長,這就是造成了一個簡單的sql需要執行幾十秒的原因。
再回頭來看上面的問題,mysql資料庫出現性能下降時,可以看到操作系統有讀IO。 原因是,在資料庫對數據頁的更改,是在內存中的,然後通過檢查點線程進行非同步寫盤,這個非同步的寫操作是不堵塞執行sql的會話線程的。所以,即使看到操作系統上有大量的寫IO,資料庫的性能也是很平穩的。但當用戶線程需要查找的數據頁不在buffer pool中時,則會從磁碟上讀取,在一個熱點數據頁不是非常多的情況下,我們設置足夠大的innodb_buffer_pool的size, 基本可以緩存所有的數據頁,因此一般都不會出現缺頁的情況,也就是在操作系統上基本看不到讀的IO。 當出現讀的IO時,原因時在執行buf_read_page_low函數,從磁碟上讀取數據頁到buffer pool, 則資料庫的性能則開始下降,當出現大量的讀IO,資料庫的性能會非常差。
C. 如何監測windows伺服器的性能
Windows伺服器中自帶的性能監控工具叫做Performance Monitor,
在開始-運行中輸入『perfmon』,然後回車即可運行。Performance
Monitor本身也是一個進程,運行起來也要佔用一定的系統資源。所以你看到的資源的使用量應該比實際的要稍微高一點。這個工具在幫助管理員判斷系統性能瓶頸時非常有用。舉個列子來說,今天有個用戶抱怨說他們項目組的伺服器(這是一台虛擬機)運行起來非常慢,但也不知道具體問題出在什麼地方。任務管理器里顯示CPU和內存的使用量都不算高,但伺服器的相應就是非常慢。打開Performance
Monitor,讓其運行一段時間後(因為參考平均值會比較准確),發現average disk
queue的值比較高,這就說明物理伺服器的硬碟負荷太重,I/O操作的速度跟不上系統的要求。關掉虛擬機,將其轉移到另一台硬碟負載比較小的主機上,再打開虛擬機。問題就解決了!
這里我簡單列舉幾個常用參數的參考值,需要更多的信息你可以google一把。
CPU:
% Processor Time:表示CPU的使用率,如果值大於80表示CPU的處理調度能力偏低。
硬碟:
% Disk Time:表示硬碟的I/O操作的頻率(繁忙時間),如果值大於80表示硬碟I/O調度能力偏低。
Average Disk Queue
Length:表示硬碟I/O操作等待隊列的長度,如果值大於2表示硬碟I/O調度能力偏低。
內存
Pages/Sec:表示系統對虛擬內存每秒鍾的訪問次數,如果值大於20表示有內存方面的問題。(有可能是物理內存偏低,也有可能是虛擬內存沒有配置正確。一般情況下虛擬內存應為物理內存的1.5-2倍)
Committed Bytes and Available Bytes:Committed
Bytes表示虛擬內存的大小,Available Bytes表示剩餘可用內存的大小。正常情況下,Available
Bytes減少,pages(頁面數)應該增加,提供頁面交換。如果Available
Bytes的值很小表示物理內存偏低。當關閉一些應用以後,Committed Bytes應該減少,Available
Bytes應該增加。因為關閉的進程釋放了之前佔用的內存資源。如果相應的值沒有發生變化,那麼該進程就可能造成了內存泄漏。
Cache Bytes:表示系統緩存的大小。如果值大於4M表示物理內存偏低。
D. 如何測量伺服器網路帶寬,延遲,抖動和丟包率
帶寬:最簡單的方式就是做下載測試,帶寬/8=最大理論傳輸速度,10M帶寬的話下載速度再1.25M/S左右,但實際情況都是偏小一些。
延遲和丟包率:ping測試,開始-運行-cmd-ping+空格+ip地址+空格+-t,可測試伺服器的延遲以及丟包率。但是ping測試只是最簡單的測試一下伺服器的網路,影響ping值的原因有很多,ping值高或者丟包並不一定是伺服器的問題,還是要看用戶具體的體驗度。
抖動:沒明白什麼意思,請詳細描述一下。
耀磊數據解答
E. 如何檢查linux伺服器cpu,內存性能
1.查看系統負載
(1)uptime
這個命令可以快速查看機器的負載情況。
在Linux系統中,這些數據表示等待CPU資源的進程和阻塞在不可中斷IO進程(進程狀態為D)的數量。
命令的輸出,load average表示1分鍾、5分鍾、15分鍾的平均負載情況。
通過這三個數據,可以了解伺服器負載是在趨於緊張還是趨於緩解。
如果1分鍾平均負載很高,而15分鍾平均負載很低,說明伺服器正在命令高負載情況,需要進一步排查CPU資源都消耗在了哪裡。
反之,如果15分鍾平均負載很高,1分鍾平均負載較低,則有可能是CPU資源緊張時刻已經過去。
(2)W
Show who is logged on and what they are doing.
可查詢登錄當前系統的用戶信息,以及這些用戶目前正在做什麼操作
其中的load average後面的三個數字則顯示了系統最近1分鍾、5分鍾、15分鍾的系統平均負載情況
注意:
load average這個輸出值,這三個值的大小一般不能大於系統邏輯CPU的個數。
如果輸出中系統有4個邏輯CPU,如果load average的三個值長期大於4時,說明CPU很繁忙,負載很高,可能會影響系統性能,
但是偶爾大於4時,倒不用擔心,一般不會影響系統性能。相反,如果load average的輸出值小於CPU的個數,則表示CPU還有空閑
2.dmesg | tail
該命令會輸出系統日誌的最後10行。
這些日誌可以幫助排查性能問題.
3.vmstat
vmstat Virtual Meomory Statistics(虛擬內存統計),用來獲得有關進程、虛存、頁面交換空間及 CPU活動的信息。這些信息反映了系統的負載情況。
後面跟的參數1,表示每秒輸出一次統計信息,表頭提示了每一列的含義
(1)監控進程procs:
r:等待在CPU資源的進程數。
這個數據比平均負載更加能夠體現CPU負載情況,數據中不包含等待IO的進程。如果這個數值大於機器CPU核數,那麼機器的CPU資源已經飽和(出現了CPU瓶頸)。
b:在等待io的進程數 。
(2)監控內存memoy:
swpd:現時可用的交換內存(單位KB)
free:系統可用內存數(以千位元組為單位)
buff: 緩沖去中的內存數(單位:KB)。
cache:被用來做為高速緩存的內存數(單位:KB)。
(3)監控swap交換頁面
si: 從磁碟交換到內存的交換頁數量,單位:KB/秒。
so: 從內存交換到磁碟的交換頁數量,單位:KB/秒。
如果這個數據不為0,說明系統已經在使用交換區(swap),機器物理內存已經不足。
(4)監控 io塊設備
bi: 發送到塊設備的塊數,單位:塊/秒。
bo: 從塊設備接收到的塊數,單位:塊/秒。
(5)監控system系統
in: 每秒的中斷數,包括時鍾中斷。
cs: 每秒的環境(上下文)轉換次數。
(6)監控cpu中央處理器:
us:用戶進程使用的時間 。以百分比表示。
sy:系統進程使用的時間。 以百分比表示。
id:中央處理器的空閑時間 。以百分比表示。
us, sy, id, wa, st:這些都代表了CPU時間的消耗,它們分別表示用戶時間(user)、系統(內核)時間(sys)、空閑時間(idle)、IO等待時間(wait)和被偷走的時間(stolen,一般被其他虛擬機消耗)。
這些CPU時間,可以讓我們很快了解CPU是否出於繁忙狀態。
註:
如果IO等待時間很長,那麼系統的瓶頸可能在磁碟IO。
如果用戶時間和系統時間相加非常大,CPU出於忙於執行指令。
如果有大量CPU時間消耗在用戶態,也就是用戶應用程序消耗了CPU時間。這不一定是性能問題,需要結合r隊列,一起分析。
4.mpstat -P ALL 1
該命令可以顯示每個CPU的佔用情況,如果有一個CPU佔用率特別高,那麼有可能是一個單線程應用程序引起的。
MultiProcessor Statistics的縮寫,是實時系統監控工具
其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPUs系統里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。
格式:mpstat [-P {|ALL}] [internal [count]]
-P {|ALL} 表示監控哪個CPU, cpu在[0,cpu個數-1]中取值
internal 相鄰的兩次采樣的間隔時間
count 采樣的次數,count只能和delay一起使用
all : 指所有CPU
%usr : 顯示在用戶級別(例如應用程序)執行時CPU利用率的百分比
%nice :顯示在擁有nice優先順序的用戶級別執行時CPU利用率的百分比
%sys : 現實在系統級別(例如內核)執行時CPU利用率的百分比
%iowait : 顯示在系統有未完成的磁碟I/O請求期間CPU空閑時間的百分比
%irq : 顯示CPU服務硬體中斷所花費時間的百分比
%soft : 顯示CPU服務軟體中斷所花費時間的百分比
%steal : 顯示虛擬機管理器在服務另一個虛擬處理器時虛擬CPU處在非自願等待下花費時間的百分比
%guest : 顯示運行虛擬處理器時CPU花費時間的百分比
%idle : 顯示CPU空閑和系統沒有未完成的磁碟I/O請求情況下的時間百分比
系統有兩個CPU。如果使用參數 -P 然後緊跟CPU編號得到指定CPU的利用率。
( Ubuntu安裝: apt-get install sysstat)
5.pidstat 1
pidstat命令輸出進程的CPU佔用率,該命令會持續輸出,並且不會覆蓋之前的數據,可以方便觀察系統動態
6.iostat -xz 1
iostat命令主要用於查看機器磁碟IO情況
r/s, w/s, rkB/s, wkB/s:分別表示每秒讀寫次數和每秒讀寫數據量(千位元組)。讀寫量過大,可能會引起性能問題。
await:IO操作的平均等待時間,單位是毫秒。這是應用程序在和磁碟交互時,需要消耗的時間,包括IO等待和實際操作的耗時。如果這個數值過大,可能是硬體設備遇到了瓶頸或者出現故障。
avgqu-sz:向設備發出的請求平均數量。如果這個數值大於1,可能是硬體設備已經飽和(部分前端硬體設備支持並行寫入)。
%util:設備利用率。這個數值表示設備的繁忙程度,經驗值是如果超過60,可能會影響IO性能(可以參照IO操作平均等待時間)。如果到達100%,說明硬體設備已經飽和。
註:如果顯示的是邏輯設備的數據,那麼設備利用率不代表後端實際的硬體設備已經飽和。值得注意的是,即使IO性能不理想,也不一定意味這應用程序性能會不好,可以利用諸如預讀取、寫緩存等策略提升應用性能
7.free -m
free命令可以查看系統內存的使用情況,-m參數表示按照兆位元組展示。
最後兩列分別表示用於IO緩存的內存數,和用於文件系統頁緩存的內存數。
註:
第二行-/+ buffers/cache,看上去緩存佔用了大量內存空間。這是Linux系統的內存使用策略,盡可能的利用內存,如果應用程序需要內存,這部分內存會立即被回收並分配給應用程序。
如果可用內存非常少,系統可能會動用交換區(如果配置了的話),這樣會增加IO開銷(可以在iostat命令中提現),降低系統性能。
8.sar -n DEV 1
sar命令在這里可以查看網路設備的吞吐率。
在排查性能問題時,可以通過網路設備的吞吐量,判斷網路設備是否已經飽和。
9.sar -n TCP,ETCP 1
sar命令在這里用於查看TCP連接狀態,其中包括:
active/s:每秒本地發起的TCP連接數,既通過connect調用創建的TCP連接;
passive/s:每秒遠程發起的TCP連接數,即通過accept調用創建的TCP連接;
retrans/s:每秒TCP重傳數量;
TCP連接數可以用來判斷性能問題是否由於建立了過多的連接,進一步可以判斷是主動發起的連接,還是被動接受的連接。TCP重傳可能是因為網路環境惡劣,或者伺服器壓力過大導致丟包。
10.top
top命令包含了前面好幾個命令的檢查的內容。比如系統負載情況(uptime)、系統內存使用情況(free)、系統CPU使用情況(vmstat)等。
因此通過這個命令,可以相對全面的查看系統負載的來源。同時,top命令支持排序,可以按照不同的列排序,方便查找出諸如內存佔用最多的進程、CPU佔用率最高的進程等。
但是,top命令相對於前面一些命令,輸出是一個瞬間值,如果不持續盯著,可能會錯過一些線索。這時可能需要暫停top命令刷新,來記錄和比對數據。
F. 怎麼 檢查是否伺服器性能過差
1遠程進入伺服器,打開
任務管理器
,檢查程序正常運行情況下的CPU和內存使用情況。是否一直處於90%以上。
2.通過硬體檢查軟體
檢查CPU,內存,硬碟等硬體是否正常。
3.觀察伺服器的帶寬使用情況,看帶寬是否跑滿。峰值是否跑高。
G. 怎麼判斷伺服器的性能
Windows伺服器中自帶的性能監控工具叫做Performance Monitor,
在開始-運行中輸入『perfmon』,然後回車即可運行。Performance
Monitor本身也是一個進程,運行起來也要佔用一定的系統資源。所以你看到的資源的使用量應該比實際的要稍微高一點。這個工具在幫助管理員判斷系統性能瓶頸時非常有用。舉個列子來說,今天有個用戶抱怨說他們項目組的伺服器(這是一台虛擬機)運行起來非常慢,但也不知道具體問題出在什麼地方。任務管理器里顯示CPU和內存的使用量都不算高,但伺服器的相應就是非常慢。打開Performance
Monitor,讓其運行一段時間後(因為參考平均值會比較准確),發現average disk
queue的值比較高,這就說明物理伺服器的硬碟負荷太重,I/O操作的速度跟不上系統的要求。關掉虛擬機,將其轉移到另一台硬碟負載比較小的主機上,再打開虛擬機。問題就解決了!
這里我簡單列舉幾個常用參數的參考值,需要更多的信息你可以google一把。
CPU:
% Processor Time:表示CPU的使用率,如果值大於80表示CPU的處理調度能力偏低。
硬碟:
% Disk Time:表示硬碟的I/O操作的頻率(繁忙時間),如果值大於80表示硬碟I/O調度能力偏低。
Average Disk Queue
Length:表示硬碟I/O操作等待隊列的長度,如果值大於2表示硬碟I/O調度能力偏低。
內存
Pages/Sec:表示系統對虛擬內存每秒鍾的訪問次數,如果值大於20表示有內存方面的問題。(有可能是物理內存偏低,也有可能是虛擬內存沒有配置正確。一般情況下虛擬內存應為物理內存的1.5-2倍)
Committed Bytes and Available Bytes:Committed
Bytes表示虛擬內存的大小,Available Bytes表示剩餘可用內存的大小。正常情況下,Available
Bytes減少,pages(頁面數)應該增加,提供頁面交換。如果Available
Bytes的值很小表示物理內存偏低。當關閉一些應用以後,Committed Bytes應該減少,Available
Bytes應該增加。因為關閉的進程釋放了之前佔用的內存資源。如果相應的值沒有發生變化,那麼該進程就可能造成了內存泄漏。
Cache Bytes:表示系統緩存的大小。如果值大於4M表示物理內存偏低。
H. linux 性能 抖動 怎麼分析
LR 監控 UNIX/Linux 系統方法 一、准備工作: 1. 可以通過兩種方法驗證伺服器上是否配置 rstatd 守護程序: ①使用 rup 命令,它用於報告計算機的各種統計信息,其中就包括 rstatd 的配置信息。使用命 令 rup 10.130.61.203, 此處 10.130.61.203 ...
I. 如何用命令檢查Linux伺服器性能
1、查看物理cpu個數:
cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l
2、查看每個物理cpu中的core個數:
cat /proc/cpuinfo |grep "cpu cores"|wc -l
3、邏輯cpu的個數:
cat /proc/cpuinfo |grep "processor"|wc -l
物理cpu個數*核數=邏輯cpu個數(不支持超線程技術的情況下)
J. linux下怎麼查看伺服器性能
1.1 cpu性能查看
1、查看物理cpu個數:
cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l
2、查看每個物理cpu中的core個數:
cat /proc/cpuinfo |grep "cpu cores"|wc -l
3、邏輯cpu的個數:
cat /proc/cpuinfo |grep "processor"|wc -l
物理cpu個數*核數=邏輯cpu個數(不支持超線程技術的情況下)
1.2 內存查看
1.3 硬碟查看
1、查看硬碟及分區信息:
fdisk -l
2、查看文件系統的磁碟空間佔用情況:
df -h
3、查看硬碟的I/O性能(每隔一秒顯示一次,顯示5次):
iostat -x 1 5
iostat是含在套裝systat中的,可以用yum -y install systat來安裝。
常關注的參數:
如%util接近100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁碟可能存在瓶頸。如idle小於70%,I/O的壓力就比較大了,說明讀取進程中有較多的wait。
4、查看linux系統中某目錄的大小:
-sh /root
如發現某個分區空間接近用完,可以進入該分區的掛載點,用以下命令找出佔用空間最多的文件或目錄,然後按照從大到小的順序,找出系統中佔用最多空間的前10個文件或目錄:
-cksh *|sort -rn|head -n 10
以上命令的詳細介紹可如下查詢: