⑴ 請問在linux伺服器上作壓力測試如何監控伺服器的CPU和內存,採集數據並形成圖表(如曲線圖)
vmstat 1,文本顯示,1代表1s刷新一次
想要曲線的話,把vmstat的結果保存到文本里,然後切到excel下繪圖
如果不需要那麼短的周期,可用cacti,通過snmp調用,5分鍾一個周期。
⑵ 如何在linux上執行壓力測試
關鍵是你想測哪部份。 如果你想測GPU的,你可以下載一個opengl的測試程序 如果你想測CPU的壓力,你直接寫while一直運算可以了。 如果你想測外設,那就一直讀寫吧
⑶ 如何在linux操作系統上做介面壓力測試
介紹個http_load壓力測試工具,http_load,類似的工具還有webbench、ab、Siege。
1、下載
官方網站:http://acme.com/software/http_load/
復制代碼
代碼如下:
cd /root
wget http://acme.com/software/http_load/http_load-12mar2006.tar.gz
tar xzf http_load-12mar2006.tar.gz
2、安裝
復制代碼
代碼如下:
cd http_load-12mar2006
make
執行完make,會在當前目錄生成一個http_load二進制文件。
3、使用方法
復制代碼
代碼如下:
root@www:~/http_load-12mar2006# ./http_load --help
usage: ./http_load [-checksum] [-throttle] [-proxy host:port] [-verbose] [-timeout secs] [-sip sip_file]
-parallel N | -rate N [-jitter]
-fetches N | -seconds N
url_file
One start specifier, either -parallel or -rate, is required.
One end specifier, either -fetches or -seconds, is required.
主要參數說明:
-parallel 簡寫-p :含義是並發的用戶進程數。
-rate 簡寫-r :含義是每秒的訪問頻率
-fetches 簡寫-f :含義是總計的訪問次數
-seconds簡寫-s :含義是總計的訪問時間
選擇參數時,-parallel和-rate選其中一個,-fetches和-seconds選其中一個。
示例:
http_load -parallel 50 -s 10 urls.txt
這段命令行是同時使用50個進程,隨機訪問urls.txt中的網址列表,總共訪問10秒。
http_load -rate 50 -f 5000 urls.txt
每秒請求50次,總共請求5000次停止。
4、基本的返回值
(1).49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds
說明在上面的測試中運行了49個請求,最大的並發進程數是2,總計傳輸的數據是289884bytes,運行的時間是10.0148秒
(2).5916 mean bytes/connection
說明每一連接平均傳輸的數據量289884/49=5916
(3).4.89274 fetches/sec, 28945.5 bytes/sec
說明每秒的響應請求為4.89274,每秒傳遞的數據為28945.5 bytes/sec
(4).msecs/connect: 28.8932 mean, 44.243 max, 24.488 min
說明每連接的平均響應時間是28.8932 msecs,最大的響應時間44.243 msecs,最小的響應時間24.488 msecs
(5).msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min
(6).HTTP response codes: code 200 -- 49
說明打開響應頁面的類型,如果403的類型過多,那可能要注意是否系統遇到了瓶頸。
特殊說明:這里,我們一般會關注到的指標是fetches/sec、msecs/connect
他們分別對應的常用性能指標參數Qpt-每秒響應用戶數和response time,每連接響應用戶時間。測試的結果主要也是看這兩個值。當然僅有這兩個指標並不能完成對性能的分析,我們還需要對伺服器的cpu、men進行分析,才能得出結論
5、如果你需要測試https,你必須將 Makefile中
復制代碼
代碼如下:
# CONFIGURE: If you want to compile in support for https, uncomment these
# definitions. You will need to have already built OpenSSL, available at
# <a href="http://www.openssl.org/">http://www.openssl.org/</a> Make sure the SSL_TREE definition points to the
# tree with your OpenSSL installation - depending on how you installed it,
# it may be in /usr/local instead of /usr/local/ssl.
SSL_TREE = /usr
SSL_DEFS = -DUSE_SSL
SSL_INC = -I$(SSL_TREE)/include
SSL_LIBS = -L$(SSL_TREE)/lib -lssl -lcrypto
由於使用到openssl,你必須安裝openssl和相應的開發環境
復制代碼
代碼如下:
apt-get install openssl
apt-get install libssl-dev</p> <p>find -name ssl.h
/usr/include/openssl/ssl.h
⑷ linux內存壓力測試該怎麼做
關鍵是你想測哪部份。如果你想測GPU的,你可以下載一個opengl的測試程序如果你想測CPU的壓力,你直接寫while一直運算可以了。如果你想測外設,那就一直讀寫吧
⑸ 如何檢查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命令刷新,來記錄和比對數據。
⑹ linux 性能優化-- cpu 切換以及cpu過高
本文先介紹了cpu上下文切換的基礎知識,以及上下文切換的類型(進程,線程等切換)。然後介紹了如何查看cpu切換次數的工具和指標的解釋。同時對日常分析種cpu過高的情況下如何分析和定位的方法做了一定的介紹,使用一個簡單的案例進行分析,先用top,pidstat等工具找出佔用過高的進程id,然後通過分析到底是用戶態cpu過高,還是內核態cpu過高,並用perf 定位到具體的調用函數。(來自極客時間課程學習筆記)
1、多任務競爭CPU,cpu變換任務的時候進行CPU上下文切換(context switch)。CPU執行任務有4種方式:進程、線程、或者硬體通過觸發信號導致中斷的調用。
2、當切換任務的時候,需要記錄任務當前的狀態和獲取下一任務的信息和地址(指針),這就是上下文的內容。因此,上下文是指某一時間點CPU寄存器(CPU register)和程序計數器(PC)的內容, 廣義上還包括內存中進程的虛擬地址映射信息.
3、上下文切換的過程:
4、根據任務的執行形式,相應的下上文切換,有進程上下文切換、線程上下文切換、以及中斷上下文切換三類。
5、進程和線程的區別:
進程是資源分配和執行的基本單位;線程是任務調度和運行的基本單位。線程沒有資源,進程給指針提供虛擬內存、棧、變數等共享資源,而線程可以共享進程的資源。
6、進程上下文切換:是指從一個進程切換到另一個進程。
(1)進程運行態為內核運行態和進程運行態。內核空間態資源包括內核的堆棧、寄存器等;用戶空間態資源包括虛擬內存、棧、變數、正文、數據等
(2)系統調用(軟中斷)在內核態完成的,需要進行2次CPU上下文切換(用戶空間-->內核空間-->用戶空間),不涉及用戶態資源,也不會切換進程。
(3)進程是由內核來管理和調度的,進程的切換只能發生在內核態。所以,進程的上下文不僅包括了用戶空間的資源,也包括內核空間資源。
(4)進程的上下文切換過程:
(5)、下列將會觸發進程上下文切換的場景:
7、線程上下文切換:
8、中斷上下文切換
快速響應硬體的事件,中斷處理會打斷進程的正常調度和執行。同一CPU內,硬體中斷優先順序高於進程。切換過程類似於系統調用的時候,不涉及到用戶運行態資源。但大量的中斷上下文切換同樣可能引發性能問題。
重點關注信息:
系統的就緒隊列過長,也就是正在運行和等待 CPU 的進程數過多,導致了大量的上下文切換,而上下文切換又導致了系統 CPU 的佔用率升高。
這個結果中有兩列內容是我們的重點關注對象。一個是 cswch ,表示每秒自願上下文切換(voluntary context switches)的次數,另一個則是 nvcswch ,表示每秒非自願上下文切換(non voluntary context switches)的次數。
linux的中斷使用情況可以從 /proc/interrupts 這個只讀文件中讀取。/proc 實際上是 Linux 的一個虛擬文件系統,用於內核空間與用戶空間之間的通信。/proc/interrupts 就是這種通信機制的一部分,提供了一個只讀的中斷使用情況。
重調度中斷(RES),這個中斷類型表示,喚醒空閑狀態的 CPU 來調度新的任務運行。這是多處理器系統(SMP)中,調度器用來分散任務到不同 CPU 的機制,通常也被稱為處理器間中斷(Inter-Processor Interrupts,IPI)。
這個數值其實取決於系統本身的 CPU 性能。如果系統的上下文切換次數比較穩定,那麼從數百到一萬以內,都應該算是正常的。但當上下文切換次數超過一萬次,或者切換次數出現數量級的增長時,就很可能已經出現了性能問題。這時,需要根據上下文切換的類型,再做具體分析。
比方說:
首先通過uptime查看系統負載,然後使用mpstat結合pidstat來初步判斷到底是cpu計算量大還是進程爭搶過大或者是io過多,接著使用vmstat分析切換次數,以及切換類型,來進一步判斷到底是io過多導致問題還是進程爭搶激烈導致問題。
CPU 使用率相關的重要指標:
性能分析工具給出的都是間隔一段時間的平均 CPU 使用率,所以要注意間隔時間的設置,特別是用多個工具對比分析時,你一定要保證它們用的是相同的間隔時間。比如,對比一下 top 和 ps 這兩個工具報告的 CPU 使用率,默認的結果很可能不一樣,因為 top 默認使用 3 秒時間間隔,而 ps 使用的卻是進程的整個生命周期。
top 和 ps 是最常用的性能分析工具:
這個輸出結果中,第三行 %Cpu 就是系統的 CPU 使用率,top 默認顯示的是所有 CPU 的平均值,這個時候你只需要按下數字 1 ,就可以切換到每個 CPU 的使用率了。繼續往下看,空白行之後是進程的實時信息,每個進程都有一個 %CPU 列,表示進程的 CPU 使用率。它是用戶態和內核態 CPU 使用率的總和,包括進程用戶空間使用的 CPU、通過系統調用執行的內核空間 CPU 、以及在就緒隊列等待運行的 CPU。在虛擬化環境中,它還包括了運行虛擬機佔用的 CPU。
預先安裝 stress 和 sysstat 包,如 apt install stress sysstat。
stress 是一個 Linux 系統壓力測試工具,這里我們用作異常進程模擬平均負載升高的場景。而 sysstat 包含了常用的 Linux 性能工具,用來監控和分析系統的性能。我們的案例會用到這個包的兩個命令 mpstat 和 pidstat。
下面的 pidstat 命令,就間隔 1 秒展示了進程的 5 組 CPU 使用率,
包括:
perf 是 Linux 2.6.31 以後內置的性能分析工具。它以性能事件采樣為基礎,不僅可以分析系統的各種事件和內核性能,還可以用來分析指定應用程序的性能問題。
第一種常見用法是 perf top,類似於 top,它能夠實時顯示佔用 CPU 時鍾最多的函數或者指令,因此可以用來查找熱點函數,使用界面如下所示:
輸出結果中,第一行包含三個數據,分別是采樣數(Samples)如2K、事件類型(event)如cpu-clock:pppH和事件總數量(Event count)如:371909314。
第二種常見用法,也就是 perf record 和 perf report。 perf top 雖然實時展示了系統的性能信息,但它的缺點是並不保存數據,也就無法用於離線或者後續的分析。而 perf record 則提供了保存數據的功能,保存後的數據,需要你用 perf report 解析展示。
1.啟動docker 運行進程:
2.ab工具測試伺服器性能
ab(apache bench)是一個常用的 HTTP 服務性能測試工具,這里用來模擬 Ngnix 的客戶端。
3.分析過程
CPU 使用率是最直觀和最常用的系統性能指標,在排查性能問題時,通常會關注的第一個指標。所以更要熟悉它的含義,尤其要弄清楚:
這幾種不同 CPU 的使用率。比如說:
碰到 CPU 使用率升高的問題,你可以藉助 top、pidstat 等工具,確認引發 CPU 性能問題的來源;再使用 perf 等工具,排查出引起性能問題的具體函數.