日韩天堂,国产精品久久久久久久久久一区,羞羞羞网站,自拍视频网站,久久亚洲欧美成人精品,桃花阁成人网在线观看

Hello! 歡迎來到小浪云!


linux模擬資源占用 你會嗎


avatar
小浪云 2025-01-02 172

公司擁有一批云服務(wù)器,這些服務(wù)器托管在華為云上,然而,很多云服務(wù)器的資源利用率并不高,處于空閑狀態(tài)。我開始擔(dān)心領(lǐng)導(dǎo)會察覺到這些空閑資源,要求我們降低配置,并可能削減云服務(wù)器的采購預(yù)算。因此,我計劃編寫一個 shell 腳本,用于模擬資源占用的情況。

實(shí)施思路

  • 使用 stress 工具對內(nèi)存進(jìn)行壓力測試,占用剩余內(nèi)存的80%,以模擬CPU和內(nèi)存的消耗情況。
  • 使用 dd 命令生成大文件,占用第二塊硬盤剩余空間的80%,以模擬硬盤空間的消耗和IO操作。
  • 讓腳本運(yùn)行持續(xù)20分鐘,一旦檢測到內(nèi)存占用超過80%,則停止壓力測試。
  • 避免對CPU進(jìn)行壓力測試,因?yàn)檫^高的CPU占用率可能導(dǎo)致應(yīng)用異常或服務(wù)器重啟的風(fēng)險。

相關(guān)工具

stress

stress 命令主要用來模擬系統(tǒng)負(fù)載較高時的場景,本文介紹其基本用法。文中 demo 的演示環(huán)境為 Ubuntu 18.04。

可選參數(shù)

-c, –cpu N 產(chǎn)生 N 個進(jìn)程,每個進(jìn)程都反復(fù)不停的計算隨機(jī)數(shù)的平方根

-i, –io N 產(chǎn)生 N 個進(jìn)程,每個進(jìn)程反復(fù)調(diào)用 sync() 將內(nèi)存上的內(nèi)容寫到硬盤上

-m, –vm N 產(chǎn)生 N 個進(jìn)程,每個進(jìn)程不斷分配和釋放內(nèi)存 –vm-bytes B 指定分配內(nèi)存的大小

–vm-stride B 不斷的給部分內(nèi)存賦值,讓 COW(copy On Write)發(fā)生 –vm-hang N 指示每個消耗內(nèi)存的進(jìn)程在分配到內(nèi)存后轉(zhuǎn)入睡眠狀態(tài) N 秒,然后釋放內(nèi)存,一直重復(fù)執(zhí)行這個過程

–vm-keep 一直占用內(nèi)存,區(qū)別于不斷的釋放和重新分配(默認(rèn)是不斷釋放并重新分配內(nèi)存)

-d, –hadd N 產(chǎn)生 N 個不斷執(zhí)行 write 和 unlink 函數(shù)的進(jìn)程(創(chuàng)建文件,寫入內(nèi)容,刪除文件)

–hadd-bytes B 指定文件大小

-t, –timeout N 在 N 秒后結(jié)束程序 –backoff N 等待N微妙后開始運(yùn)行

-q, –quiet 程序在運(yùn)行的過程中不輸出信息

-n, –dry-run 輸出程序會做什么而并不實(shí)際執(zhí)行相關(guān)的操作

–version 顯示版本號

-v, –verbose 顯示詳細(xì)的信息

消耗 CPU 資源

stress 消耗 CPU 資源是通過調(diào)用 sqrt 函數(shù)計算由 rand 函數(shù)產(chǎn)生的隨機(jī)數(shù)的平方根實(shí)現(xiàn)。下面的命令會產(chǎn)生 4 個這樣的進(jìn)程不斷計算:

$?stress?-c? 

使用 top 命令查看 CPU 的狀態(tài)如下(CPU 在用戶態(tài)滿負(fù)荷運(yùn)轉(zhuǎn)):

消耗內(nèi)存資源

下面的命令產(chǎn)生兩個子進(jìn)程,每個進(jìn)程分配 300M 內(nèi)存:

$?stress?--vm?2?--vm-bytes?300M?--vm-keep 

父進(jìn)程處于睡眠狀態(tài),兩個子進(jìn)程負(fù)責(zé)資源消耗。

–vm-keep 一直占用內(nèi)存,區(qū)別于不斷的釋放和重新分配(默認(rèn)是不斷釋放并重新分配內(nèi)存)。 –vm-hang N 指示每個消耗內(nèi)存的進(jìn)程在分配到內(nèi)存后轉(zhuǎn)入睡眠狀態(tài) N 秒,然后釋放內(nèi)存,一直重復(fù)執(zhí)行這個過程。

–vm-keep 和 –vm-hang 都可以用來模擬只有少量內(nèi)存的機(jī)器,但是指定它們時 CPU 的使用情況是不一樣的。

$stress?--vm?2?--vm-bytes?500M?--vm-keep 

一直在進(jìn)行默認(rèn)的 stride 操作,user 非常高(cpu 在用戶態(tài)忙碌)。

$?stress?--vm?2?--vm-bytes?500M?--vm-hang?5 

上面這兩種狀態(tài)不斷切換,但整體上看 CPU 的負(fù)載并不高。

–vm-stride B 不斷的給部分內(nèi)存賦值,讓 COW(Copy On Write)發(fā)生。只要指定了內(nèi)存相關(guān)的選項(xiàng),這個操作就會執(zhí)行,只是大小為默認(rèn)的 4096。賦值內(nèi)存的比例由參數(shù)決定:

for (i = 0; i

$?stress?--vm?2?--vm-bytes?500M?--vm-stride?64 $?stress?--vm?2?--vm-bytes?500M?--vm-stride?1M 

為什么會產(chǎn)生這樣的結(jié)果?原因是單獨(dú)的賦值和對比操作可以讓 CPU 在用戶態(tài)的負(fù)載占到 99% 以上。–vm-stride 值增大就意味著減少賦值和對比操作,這樣就增加了內(nèi)存的釋放和分配次數(shù)(cpu在內(nèi)核空間的負(fù)載)。 不指定 –vm-stride 選項(xiàng)就使用默認(rèn)值是 4096,CPU 負(fù)載情況居于前兩者之間:

$?stress?--vm?2?--vm-bytes?500M 

消耗 IO 資源 下面的命令產(chǎn)生 4 個進(jìn)程,每個進(jìn)程都反復(fù)調(diào)用 sync 函數(shù)將內(nèi)存上的內(nèi)容寫到硬盤上:

$?stress?-i?4 

使用 top 命令查看 CPU 的狀態(tài)如下:

sy 升高,wa(iowait) 非常高。

壓測磁盤及 IO 下面的命令創(chuàng)建一個進(jìn)程不斷的在磁盤上創(chuàng)建 10M 大小的文件并寫入內(nèi)容:

$?stress?-d?1?--hdd-bytes?10M 

使用 top 命令查看 CPU 的狀態(tài)如下(此時的 CPU 主要消耗在內(nèi)核態(tài)):

下面是 iostat 2 的輸出(同樣是高 iowait,瓶頸是寫磁盤):

其它選項(xiàng)

–verbose 顯示 stress 程序運(yùn)行過程中的詳細(xì)信息:

–timeout N 在 N 秒后結(jié)束程序。

–quiet stress 程序運(yùn)行的過程中不輸出信息。

-n, –dry-run 輸出程序會做什么而并不實(shí)際執(zhí)行相關(guān)的操作:

–backoff N 讓新 fork 出來的進(jìn)程 sleep N 微秒再開始運(yùn)行。

除了單獨(dú)指定某一類的選項(xiàng),還可以同時執(zhí)行多個類型的任務(wù),比如產(chǎn)生 3 個 CPU 進(jìn)程、3 個 IO 進(jìn)程、2 個10M 的 vm 進(jìn)程,并且每個 vm 進(jìn)程中不循環(huán)分配釋放內(nèi)存:

$?stress?--cpu?3?--io?3?--vm?2?--vm-bytes?10M?--vm-keep 

dd

dd 命令 用于復(fù)制文件并對原文件的內(nèi)容進(jìn)行轉(zhuǎn)換和格式化處理。dd 命令功能很強(qiáng)大的,對于一些比較底層的問題,使用 dd 命令往往可以得到出人意料的效果。用的比較多的還是用 dd 來備份裸設(shè)備。但是不推薦,如果需要備份 oracle 裸設(shè)備,可以使用 rman 備份,或使用第三方軟件備份,使用 dd 的話,管理起來不太方便。需要的時候使用 dd 對物理磁盤操作,如果是文件系統(tǒng)的話還是使用 tar backup cpio 等其他命令更加方便。另外,使用 dd 對磁盤操作時,最好使用塊設(shè)備文件。

語法

dd?(選項(xiàng)) 

命令選項(xiàng)

bs=:將ibs(輸入)與obs(輸出)設(shè)成指定的字節(jié)數(shù); cbs=:轉(zhuǎn)換時,每次只轉(zhuǎn)換指定的字節(jié)數(shù); conv=:指定文件轉(zhuǎn)換的方式; count=:僅讀取指定的區(qū)塊數(shù); ibs=:每次讀取的字節(jié)數(shù); obs=:每次輸出的字節(jié)數(shù); of=:輸出到文件; seek=:一開始輸出時,跳過指定的區(qū)塊數(shù); skip=:一開始讀取時,跳過指定的區(qū)塊數(shù); --help:幫助; --version:顯示版本信息。 

實(shí)例

>?dd?if=/dev/zero?of=sun.txt?bs=1M?count=1 1+0?records?in 1+0?records?out 1048576?bytes?(1.0?MB)?copied,?0.006107?seconds,?172?MB/s  [root@localhost?text] 1.1M????sun.txt 

該命令創(chuàng)建了一個 1M 大小的文件 sun.txt,其中參數(shù)解釋: