試工具stress實(shí)戰(zhàn):從安裝到拷機(jī)一條龍)
簡(jiǎn)介L(zhǎng)inux壓力測(cè)試工具stress 1.0.1源碼資源包面向系統(tǒng)管理員、運(yùn)維工程師與嵌入式開(kāi)發(fā)者用于模擬CPU、內(nèi)存、線程/進(jìn)程等負(fù)載評(píng)估系統(tǒng)在極限場(chǎng)景下的穩(wěn)定性與性能表現(xiàn)。壓縮包整體約199KB共32個(gè)文件以C源碼、configure配置腳本、Makefile構(gòu)建文件為主兼有texinfo文檔、man手冊(cè)及ChangeLog等說(shuō)明材料目錄沿用標(biāo)準(zhǔn)GNU工程結(jié)構(gòu)便于編譯、安裝與二次開(kāi)發(fā)。該工具支持通過(guò)命令行靈活指定負(fù)載類型與線程數(shù)量可模擬計(jì)算密集、內(nèi)存緊張及高并發(fā)進(jìn)程創(chuàng)建等場(chǎng)景。目前已有3031人學(xué)習(xí)下載適合需要驗(yàn)證服務(wù)器承載力、排查資源瓶頸或開(kāi)展性能調(diào)優(yōu)的工程師。借助該包可收獲完整源碼與配套文檔既能直接用于壓測(cè)環(huán)境搭建也能深入研讀stress的核心實(shí)現(xiàn)為自行編寫輕量級(jí)負(fù)載工具提供參考。linux壓力測(cè)試工具stress實(shí)戰(zhàn)從裝庫(kù)到拷機(jī)一條龍做Linux運(yùn)維和系統(tǒng)性能驗(yàn)證的朋友一定繞不開(kāi)一個(gè)場(chǎng)景新買的服務(wù)器到了要驗(yàn)證硬件穩(wěn)不穩(wěn)內(nèi)核打了一個(gè)補(bǔ)丁要確認(rèn)系統(tǒng)不會(huì)跑著跑著就崩部署容器之前要看看資源隔離到底靠不靠譜。這些場(chǎng)景都有一個(gè)共同的底子需求——給系統(tǒng)施加一個(gè)可控的壓力然后在壓力下觀察它的表現(xiàn)。stress就是干這個(gè)的一個(gè)輕量、純粹、用來(lái)給Linux系統(tǒng)制造負(fù)載的小工具我用它做過(guò)不少次拷機(jī)和穩(wěn)定性驗(yàn)證這篇就來(lái)聊聊它的完整玩法。1. 工具選型與核心概念1.1 stress到底是個(gè)什么工具stress是Amos Waterland寫的一個(gè)C語(yǔ)言小工具它的設(shè)計(jì)目標(biāo)非常純粹通過(guò)fork出大量子進(jìn)程分別去消耗CPU、內(nèi)存、磁盤I/O和資源分配能力從而讓系統(tǒng)進(jìn)入一種可量化、可控的高負(fù)載狀態(tài)。說(shuō)人話就是——你告訴它“給我壓出8個(gè)滿負(fù)荷CPU的負(fù)載”它就老老實(shí)實(shí)fork出8個(gè)進(jìn)程每個(gè)進(jìn)程拼命算數(shù)學(xué)題把CPU時(shí)間吃滿。很多人會(huì)把stress和stress-ng搞混。stress-ng是它的加強(qiáng)版包含幾百種壓測(cè)方法功能更強(qiáng)但復(fù)雜度也高。而stress的特點(diǎn)是參數(shù)簡(jiǎn)單、行為直觀、結(jié)果容易判斷適合做快速驗(yàn)證和日??綑C(jī)。我個(gè)人的習(xí)慣是快速驗(yàn)證用stress深度專項(xiàng)壓測(cè)用stress-ng或sysbench但日常工作中stress出現(xiàn)的頻率其實(shí)更高因?yàn)樗銐蜉p量裝完即用不引入太多學(xué)習(xí)成本。1.2 為什么需要給系統(tǒng)制造壓力很多人會(huì)有疑問(wèn)我的服務(wù)已經(jīng)在線上跑了為什么還要額外制造壓力這里有個(gè)概念要分清線上跑業(yè)務(wù)是“實(shí)際負(fù)載”壓測(cè)工具制造的是“人工負(fù)載”。實(shí)際負(fù)載是隨機(jī)的、起伏的、不好控制的而人工負(fù)載是確定的、穩(wěn)定的、可調(diào)節(jié)的。做穩(wěn)定性驗(yàn)證時(shí)你不希望負(fù)載忽高忽低導(dǎo)致結(jié)果無(wú)法解釋你希望CPU穩(wěn)定在100%、內(nèi)存穩(wěn)定占用N個(gè)GB然后觀察系統(tǒng)在這種極端情況下是否還能正常工作。stress的價(jià)值就在這里它把負(fù)載變成了一個(gè)有刻度的儀器讓你能夠在“系統(tǒng)扛不住之前”就掌握系統(tǒng)的邊界在哪里。比如一臺(tái)8核機(jī)器先壓6個(gè)CPU看看是否穩(wěn)定再壓8個(gè)再壓10個(gè)超賣觀察不同負(fù)載級(jí)別下的系統(tǒng)行為。這種測(cè)試在硬件驗(yàn)收、性能基線采集、容器限制驗(yàn)證中都屬于必備環(huán)節(jié)。1.3 適用場(chǎng)景梳理從我實(shí)際接觸過(guò)的使用場(chǎng)景來(lái)看stress主要適合以下幾種情況硬件拷機(jī)新裝機(jī)或購(gòu)買二手服務(wù)器后用CPU和內(nèi)存壓力驗(yàn)證硬件是否有隱性故障。內(nèi)核與驅(qū)動(dòng)驗(yàn)證打了補(bǔ)丁、升級(jí)了內(nèi)核、更換了驅(qū)動(dòng)需要在負(fù)載下確認(rèn)系統(tǒng)不會(huì)panic或死鎖。性能調(diào)優(yōu)前后對(duì)比調(diào)整內(nèi)核參數(shù)、CPU調(diào)頻策略之前和之后用同樣的壓力對(duì)比系統(tǒng)表現(xiàn)。容器與虛擬化資源限制驗(yàn)證確認(rèn)cgroup的CPU限制、內(nèi)存限制是否真正生效。教學(xué)和技術(shù)測(cè)試演示系統(tǒng)負(fù)載、觀察調(diào)度行為時(shí)stress是干凈利落的負(fù)載制造工具。2. 安裝部署與環(huán)境準(zhǔn)備2.1 各主流發(fā)行版的安裝方法stress的安裝非常簡(jiǎn)單官方源里基本都有現(xiàn)成的包。以最常見(jiàn)的幾個(gè)發(fā)行版為例# Debian / Ubuntu sudo apt-get install stress # CentOS / RHEL 7/8/9 sudo yum install stress # Fedora sudo dnf install stress # Arch Linux sudo pacman -S stress如果你用的是極其精簡(jiǎn)的發(fā)行版或者沒(méi)有現(xiàn)成包也可以從源碼編譯安裝。stress的源碼包很小編譯過(guò)程依賴也很少wget https://downloads.your.org/stress/stress-1.0.7.tar.gz tar -xzf stress-1.0.7.tar.gz cd stress-1.0.7 ./configure make sudo make install安裝完成之后驗(yàn)證一下是否成功stress --version能輸出版本號(hào)就說(shuō)明OK了。我在編譯安裝時(shí)踩過(guò)一次坑某些精簡(jiǎn)系統(tǒng)上缺少make和gcc需要先用包管理器裝好基礎(chǔ)編譯工具鏈再執(zhí)行configure。2.2 壓測(cè)前的系統(tǒng)狀態(tài)確認(rèn)在做壓力測(cè)試之前有一件小事經(jīng)常被忽略確認(rèn)CPU調(diào)頻策略?,F(xiàn)在的CPU大多有自動(dòng)調(diào)頻功能空閑時(shí)降頻省電負(fù)載高時(shí)自動(dòng)升頻。如果你不做任何設(shè)置壓測(cè)過(guò)程中CPU頻率可能忽高忽低測(cè)試結(jié)果的一致性會(huì)受影響。建議在壓測(cè)前把CPU調(diào)到最大頻率或性能模式觀察一下當(dāng)前頻率運(yùn)行狀態(tài)# 查看當(dāng)前CPU頻率 cat /proc/cpuinfo | grep MHz # 使用cpupower工具設(shè)置性能模式需要root權(quán)限 cpupower frequency-set -g performance如果發(fā)行版沒(méi)有cpupower命令也可以裝linux-cpupowerDebian/Ubuntu或kernel-toolsCentOS包。當(dāng)然如果你測(cè)試的目的恰恰是要驗(yàn)證調(diào)頻策略本身的行為那就不需要這一步反而應(yīng)該保持默認(rèn)策略去壓具體取決于你的目標(biāo)。另外壓測(cè)前還要確認(rèn)系統(tǒng)負(fù)載基線是干凈的。最好在一臺(tái)沒(méi)有業(yè)務(wù)的機(jī)器上做壓測(cè)或者至少確認(rèn)當(dāng)前top顯示的load average不高避免把別人業(yè)務(wù)的負(fù)載誤算進(jìn)你的測(cè)試結(jié)果里。3. 壓測(cè)方案設(shè)計(jì)與核心參數(shù)3.1 CPU壓測(cè)--cpu參數(shù)詳解stress最常見(jiàn)的用法是CPU壓測(cè)命令格式如下stress --cpu 8這會(huì)在當(dāng)前終端前臺(tái)fork出8個(gè)子進(jìn)程每個(gè)進(jìn)程執(zhí)行一個(gè)計(jì)算平方根的死循環(huán)把CPU核心吃滿。根據(jù)我的實(shí)測(cè)每個(gè)--cpu進(jìn)程會(huì)跑在單核上8個(gè)進(jìn)程就能吃滿8個(gè)邏輯核心。機(jī)器有多少核心可以用nproc查看。這里有個(gè)決策點(diǎn)如果機(jī)器是超線程架構(gòu)8核16線程要壓滿所有邏輯核心應(yīng)該用--cpu 16還是只壓8個(gè)物理核心這取決于你的目的。如果你想驗(yàn)證整機(jī)散熱和供電是否扛得住那就壓滿16個(gè)線程讓所有邏輯處理器都進(jìn)入高負(fù)載狀態(tài)如果你想模擬“每個(gè)物理核心承載一個(gè)典型業(yè)務(wù)進(jìn)程”的場(chǎng)景壓8個(gè)可能更貼近實(shí)際。CPU壓測(cè)默認(rèn)會(huì)一直跑下去直到你按CtrlC終止。實(shí)際操作中通常需要限制時(shí)長(zhǎng)用--timeout參數(shù)# 壓8個(gè)CPU核心持續(xù)60秒后自動(dòng)退出 stress --cpu 8 --timeout 60s--timeout支持10s、1m、1h、1d這樣的時(shí)間后綴也支持純數(shù)字單位為秒。加上超時(shí)控制的最大好處是不用干等測(cè)試完自動(dòng)退出適合寫進(jìn)腳本里循環(huán)執(zhí)行。3.2 內(nèi)存壓測(cè)--vm參數(shù)詳解內(nèi)存壓測(cè)用到--vm系列的參數(shù)# 啟動(dòng)4個(gè)內(nèi)存壓測(cè)進(jìn)程每個(gè)分配512MB內(nèi)存 stress --vm 4 --vm-bytes 512M每個(gè)--vm進(jìn)程會(huì)調(diào)用malloc分配指定大小的內(nèi)存然后循環(huán)寫入數(shù)據(jù)確保內(nèi)存頁(yè)真實(shí)被觸達(dá)。這里我補(bǔ)充一個(gè)容易被忽視的細(xì)節(jié)malloc分配出來(lái)的內(nèi)存在沒(méi)有寫入之前只是虛擬內(nèi)存不會(huì)占據(jù)實(shí)際的物理內(nèi)存頁(yè)。stress內(nèi)部會(huì)通過(guò)寫入操作對(duì)這些內(nèi)存頁(yè)進(jìn)行實(shí)際觸達(dá)這也是它壓內(nèi)存比較有效的原因。實(shí)際壓測(cè)時(shí)內(nèi)存總量要算清楚。比如機(jī)器有8GB可用內(nèi)存你啟動(dòng)4個(gè)進(jìn)程每個(gè)分配2GB總量就是8GB。如果分配總量超過(guò)實(shí)際可用內(nèi)存系統(tǒng)會(huì)開(kāi)始使用swap性能會(huì)驟降如果超過(guò)物理內(nèi)存加swap的總量則可能觸發(fā)OOM Killer某個(gè)進(jìn)程被內(nèi)核殺掉測(cè)出來(lái)的結(jié)果就不具備參考意義。還有--vm-hang參數(shù)值得說(shuō)明。它會(huì)指示子進(jìn)程在分配并寫入內(nèi)存后掛起一段時(shí)間而不是反復(fù)隨機(jī)讀寫。比如stress --vm 2 --vm-bytes 1G --vm-hang 30兩個(gè)進(jìn)程各分配1GB內(nèi)存并保持30秒不釋放。這種模式適合測(cè)試“系統(tǒng)在內(nèi)存長(zhǎng)期以高占用率運(yùn)行時(shí)是否穩(wěn)定”貼近數(shù)據(jù)庫(kù)緩存、JVM堆內(nèi)存這類常駐內(nèi)存場(chǎng)景。3.3 磁盤和I/O壓測(cè)--io與--hdd磁盤I/O壓測(cè)主要有兩個(gè)參數(shù)--io和--hdd。# 啟動(dòng)4個(gè)I/O進(jìn)程每個(gè)進(jìn)程不斷執(zhí)行sync系統(tǒng)調(diào)用 stress --io 4--io的做法是不斷fork新進(jìn)程執(zhí)行sync()把文件系統(tǒng)緩沖區(qū)刷入磁盤產(chǎn)生系統(tǒng)調(diào)用和I/O調(diào)度壓力。不過(guò)說(shuō)實(shí)話這種壓測(cè)方式對(duì)現(xiàn)代SSD來(lái)說(shuō)壓力并不大它更多是壓內(nèi)核的I/O路徑和調(diào)度器不是直接壓磁盤帶寬。想要更直接的磁盤寫入壓力用--hdd# 啟動(dòng)2個(gè)寫盤進(jìn)程每個(gè)向文件中寫入1GB數(shù)據(jù) stress --hdd 2 --hdd-bytes 1G--hdd進(jìn)程會(huì)創(chuàng)建一個(gè)臨時(shí)文件默認(rèn)在/var/tmp目錄下然后反復(fù)寫數(shù)據(jù)進(jìn)去。這個(gè)測(cè)試會(huì)真實(shí)產(chǎn)生磁盤寫入流量可以用來(lái)驗(yàn)證磁盤的穩(wěn)定性和散熱。這里有一個(gè)我踩過(guò)的坑--hdd默認(rèn)會(huì)在/var/tmp下生成臨時(shí)文件對(duì)于容量小的根分區(qū)1GB甚至幾GB的寫入很容易把根分區(qū)磁盤占滿。所以在跑--hdd之前一定先看看磁盤剩余空間同時(shí)建議用--hdd-bytes限制單次寫入上限或者指定文件路徑。3.4 組合壓測(cè)模擬真實(shí)混合負(fù)載前面的參數(shù)都是單一維度的但生產(chǎn)環(huán)境的負(fù)載從來(lái)不會(huì)只消耗一種資源。stress允許同時(shí)指定多個(gè)維度一次壓測(cè)模擬混合負(fù)載# 8個(gè)CPU進(jìn)程 2個(gè)內(nèi)存進(jìn)程各1G 1個(gè)磁盤寫入進(jìn)程持續(xù)5分鐘 stress --cpu 8 --vm 2 --vm-bytes 1G --hdd 1 --hdd-bytes 1G --timeout 5m這種組合壓測(cè)更適合在真實(shí)服務(wù)器上做整體穩(wěn)定性驗(yàn)證。比如你新部署了一個(gè)生產(chǎn)環(huán)境想確認(rèn)在“CPU高負(fù)載、內(nèi)存大量占用、磁盤持續(xù)寫入”的場(chǎng)景下業(yè)務(wù)進(jìn)程還能不能穩(wěn)定響應(yīng)這種混合壓測(cè)就很有參考價(jià)值。我在實(shí)際做服務(wù)器驗(yàn)收時(shí)幾乎都是用組合參數(shù)跑30分鐘以上而不僅僅是單測(cè)一個(gè)維度。3.5 核心參數(shù)速查表參數(shù)作用常用搭配備注--cpu N啟動(dòng)N個(gè)CPU負(fù)載進(jìn)程--timeout每個(gè)進(jìn)程吃滿一個(gè)邏輯核心--vm N啟動(dòng)N個(gè)內(nèi)存負(fù)載進(jìn)程--vm-bytes每個(gè)進(jìn)程分配指定大小內(nèi)存--vm-bytes SIZE指定每個(gè)內(nèi)存進(jìn)程分配的大小--vm N支持K/M/G后綴--vm-hang N內(nèi)存分配后掛起N秒--vm模擬常駐內(nèi)存負(fù)載--io N啟動(dòng)N個(gè)I/O進(jìn)程--timeout不斷執(zhí)行sync系統(tǒng)調(diào)用--hdd N啟動(dòng)N個(gè)寫盤進(jìn)程--hdd-bytes真實(shí)產(chǎn)生磁盤寫入流量--timeout TIME指定總運(yùn)行時(shí)長(zhǎng)所有參數(shù)支持s/m/h/d后綴--verbose顯示詳細(xì)壓測(cè)日志任意配合調(diào)試使用4. 實(shí)操過(guò)程與數(shù)據(jù)觀察4.1 一個(gè)完整的壓測(cè)流程示例在真正壓測(cè)之前我先做一次基線采集也就是不做任何壓測(cè)時(shí)記錄系統(tǒng)初始狀態(tài)。這一步很重要因?yàn)楹罄m(xù)判斷異常都需要和基線對(duì)比uptime free -h df -hT /var/tmp mpstat -P ALL 1 3假設(shè)我現(xiàn)在拿到一臺(tái)8核16G的服務(wù)器要做一次硬件穩(wěn)定性驗(yàn)收壓測(cè)方案分三步走第一步跑CPU壓力10分鐘確認(rèn)所有邏輯核心都穩(wěn)定在100%負(fù)載stress --cpu 16 --timeout 10m第二步跑內(nèi)存壓力按70%內(nèi)存占用設(shè)計(jì)16G機(jī)器留出系統(tǒng)余量分配12G占用stress --vm 6 --vm-bytes 2G --timeout 10m第三步混合壓測(cè)30分鐘模擬真實(shí)業(yè)務(wù)的高負(fù)載場(chǎng)景stress --cpu 16 --vm 4 --vm-bytes 2G --hdd 4 --hdd-bytes 2G --timeout 30m三個(gè)步驟跑完如果沒(méi)有出現(xiàn)進(jìn)程被kill、系統(tǒng)死機(jī)、內(nèi)核報(bào)錯(cuò)等現(xiàn)象基本可以認(rèn)為這臺(tái)機(jī)器的硬件和系統(tǒng)在合理的負(fù)載范圍內(nèi)是穩(wěn)定的。4.2 壓測(cè)過(guò)程中的數(shù)據(jù)觀察方法壓測(cè)啟動(dòng)后記住一個(gè)原則不要只盯著黑色終端等結(jié)果要開(kāi)另一個(gè)終端去觀察系統(tǒng)狀態(tài)。我最常用的觀察工具組合如下top/htop看整體CPU使用率、load average、內(nèi)存占用判斷壓測(cè)進(jìn)程是否達(dá)到預(yù)期負(fù)載。mpstat -P ALL 1逐核查看CPU使用率。這個(gè)非常關(guān)鍵能看出壓力是否均勻分布在所有核心上如果只有部分核心為100%說(shuō)明壓測(cè)進(jìn)程數(shù)量少了或者存在中斷綁核等問(wèn)題。free -h查看內(nèi)存與swap使用情況。如果內(nèi)存壓測(cè)導(dǎo)致swap開(kāi)始大量增長(zhǎng)說(shuō)明壓測(cè)內(nèi)存分配過(guò)量不是理想狀態(tài)。iostat -x 1觀察磁盤使用率、吞吐量和I/O等待時(shí)間配合--hdd壓測(cè)使用。這里我舉個(gè)例子。用stress --cpu 8壓一臺(tái)8核機(jī)器在另一個(gè)終端跑mpstat -P ALL 1正常情況下每個(gè)CPU的%usr都接近100%。但如果發(fā)現(xiàn)其中某個(gè)CPU的%usr只有50%左右可能就是stress進(jìn)程被調(diào)度到了中斷處理較多的CPU上或者系統(tǒng)本身有綁核配置。這種細(xì)節(jié)在高精度壓測(cè)中值得排查。4.3 壓測(cè)時(shí)的安全注意事項(xiàng)壓測(cè)說(shuō)到底是在挑戰(zhàn)系統(tǒng)的極限所以要講究分寸。幾個(gè)我吃過(guò)虧的教訓(xùn)分享給你第一不要在遠(yuǎn)程連接的唯一會(huì)話里直接跑大壓力測(cè)試。如果你用的是SSH連服務(wù)器跑壓力測(cè)試壓力過(guò)大可能導(dǎo)致系統(tǒng)響應(yīng)變慢甚至假死你的SSH連接有可能斷掉然后你就失去了對(duì)機(jī)器的控制。建議用tmux或screen起一個(gè)會(huì)話跑壓測(cè)即使連接斷了壓測(cè)進(jìn)程還能繼續(xù)運(yùn)行重新連上后還能看到之前的輸出。第二內(nèi)存壓測(cè)總量一定要留余量。別把物理內(nèi)存壓到100%給系統(tǒng)內(nèi)核和基礎(chǔ)服務(wù)留出幾百M(fèi)B甚至更多的余量否則OOM Killer啟動(dòng)后可能把不該殺的系統(tǒng)服務(wù)給殺了測(cè)試結(jié)果會(huì)被嚴(yán)重污染。第三跑磁盤壓測(cè)前確認(rèn)磁盤空間和磨損程度。如果是機(jī)械硬盤或老舊SSD的機(jī)器長(zhǎng)時(shí)間--hdd壓測(cè)會(huì)加劇磁盤磨損。這種測(cè)試不是不能做但要有目的性不是為了測(cè)磁盤本身就沒(méi)必要長(zhǎng)時(shí)間跑。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 壓測(cè)以后系統(tǒng)負(fù)載降不下來(lái)這個(gè)問(wèn)題我遇到不只一次。明明按了CtrlC或者--timeout到了時(shí)間系統(tǒng)負(fù)載依然很高。排查步驟是這樣的先用top看是哪個(gè)進(jìn)程在消耗CPU如果是stress的殘留子進(jìn)程用pkill -f stress清理。注意stress的父進(jìn)程退出后某些子進(jìn)程可能會(huì)變成孤兒進(jìn)程繼續(xù)運(yùn)行。這時(shí)可以pgrep -l stress列出所有名字包含stress的進(jìn)程逐個(gè)確認(rèn)后清理pkill -9 stress另外如果CPU壓測(cè)跑完LOAD值依然很高但CPU使用率已經(jīng)降下來(lái)了那可能是系統(tǒng)在刷臟頁(yè)或等待I/O完成這時(shí)候耐心等一下就好通常不會(huì)持續(xù)太久。5.2 內(nèi)存壓測(cè)觸發(fā)OOM Killer內(nèi)存壓測(cè)時(shí)系統(tǒng)報(bào)錯(cuò)Out of memory: Kill process說(shuō)明壓測(cè)配置和機(jī)器實(shí)際內(nèi)存不匹配。比如一臺(tái)只有4G內(nèi)存的機(jī)器你直接跑stress --vm 8 --vm-bytes 1G8個(gè)進(jìn)程共需要8G內(nèi)存遠(yuǎn)超物理內(nèi)存OOM Killer就會(huì)出手。解決方案是精確計(jì)算內(nèi)存分配量。建議先看free -h確定可用內(nèi)存最多用70%到80%的可用內(nèi)存做壓測(cè)。假設(shè)機(jī)器有8G內(nèi)存系統(tǒng)已用2G可用約6G那壓測(cè)內(nèi)存量控制在4G到5G比較合適可以配置成stress --vm 4 --vm-bytes 1G還有一種情況你確實(shí)想壓到OOM看系統(tǒng)能不能正確殺掉內(nèi)存超限進(jìn)程從而保護(hù)主機(jī)不掛這種測(cè)試在容器環(huán)境驗(yàn)證時(shí)其實(shí)是有效的驗(yàn)證手段。但如果你的目標(biāo)是驗(yàn)證“系統(tǒng)在內(nèi)存高負(fù)載下穩(wěn)定運(yùn)行”那就要避開(kāi)OOM閾值。5.3 --hdd壓測(cè)后臨時(shí)文件沒(méi)清理干凈stress --hdd跑完后會(huì)在/var/tmp下留下臨時(shí)文件按我的經(jīng)驗(yàn)它會(huì)以類似stress.XXXXXX的命名方式寫入文件。如果不清理日積月累會(huì)占用不少磁盤空間。清理命令很簡(jiǎn)單ls /var/tmp/ rm -f /var/tmp/stress.*為了避免這個(gè)問(wèn)題更推薦的做法是在命令里就指定臨時(shí)文件路徑放到專門的測(cè)試目錄下測(cè)完直接刪目錄mkdir /tmp/stress-test stress --hdd 2 --hdd-bytes 1G --timeout 1m跑完以后刪除整個(gè)測(cè)試目錄干凈利落。5.4 壓測(cè)過(guò)程中SSH超時(shí)斷連這是一個(gè)很實(shí)際的運(yùn)維場(chǎng)景你通過(guò)SSH連接服務(wù)器跑長(zhǎng)時(shí)間壓測(cè)壓測(cè)到一半SSH連接斷了。排查思路是先確認(rèn)是不是網(wǎng)絡(luò)側(cè)的會(huì)話超時(shí)限制同時(shí)建議所有長(zhǎng)時(shí)間壓測(cè)都放進(jìn)tmux會(huì)話中執(zhí)行。我已經(jīng)養(yǎng)成習(xí)慣凡是超過(guò)10分鐘的壓測(cè)一律先建tmux會(huì)話tmux new -s stress-test stress --cpu 16 --timeout 1h # 按 CtrlB 再按 D 脫離會(huì)話連接斷了也不影響壓測(cè)進(jìn)程重新連接后用tmux attach -t stress-test回到壓測(cè)會(huì)話查看輸出情況。這個(gè)習(xí)慣幫我避免了多次遠(yuǎn)程壓測(cè)斷連后無(wú)法確認(rèn)結(jié)果的麻煩。5.5 壓測(cè)結(jié)果如何判斷是否成功最后聊一下怎么判斷壓測(cè)結(jié)果。stress本身不會(huì)輸出一個(gè)“通過(guò)/失敗”的結(jié)論你需要自己綜合判斷。我個(gè)人的判斷標(biāo)準(zhǔn)有三條壓測(cè)期間系統(tǒng)沒(méi)有出現(xiàn)嚴(yán)重錯(cuò)誤日志dmesg中沒(méi)有OOM、panic、硬件報(bào)錯(cuò)。壓測(cè)結(jié)束后SSH和基礎(chǔ)服務(wù)依然正常響應(yīng)負(fù)載能回落到正常水平。壓測(cè)期間業(yè)務(wù)進(jìn)程如果有沒(méi)有出現(xiàn)崩潰或者長(zhǎng)時(shí)間無(wú)響應(yīng)。這三條都滿足這臺(tái)機(jī)器基本可以認(rèn)定在當(dāng)前壓測(cè)配置下是穩(wěn)定的。如果再嚴(yán)格一點(diǎn)可以對(duì)比壓測(cè)前后/proc/cpuinfo和smartctl的磁盤健康狀態(tài)確認(rèn)沒(méi)有新增的硬件隱性故障。結(jié)尾我在實(shí)際使用stress過(guò)程中最大的體會(huì)是工具本身簡(jiǎn)單到不行真正的復(fù)雜度在于你怎么設(shè)計(jì)壓測(cè)方案和解讀壓測(cè)結(jié)果。壓測(cè)之前先想清楚要驗(yàn)證什么再動(dòng)手跑數(shù)據(jù)才有參考價(jià)值。最后分享一個(gè)小技巧如果你需要定期做壓力測(cè)試可以寫一個(gè)腳本把stress和stress-ng配合使用先用stress做快速冒煙驗(yàn)證確認(rèn)基本功能正常后再用stress-ng做專項(xiàng)深度壓測(cè)這樣兼顧了效率與深度我在多個(gè)項(xiàng)目的服務(wù)器驗(yàn)收中都是這么做的效果一直不錯(cuò)。本文還有配套的精品資源點(diǎn)擊獲取