公司擁有一批云服務(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ù)解釋:
- if 代表輸入文件。如果不指定 if,默認(rèn)就會從 stdin 中讀取輸入。
- of 代表輸出文件。如果不指定 of,默認(rèn)就會將 stdout 作為默認(rèn)輸出。
- bs 代表字節(jié)為單位的塊大小。
- count 代表被復(fù)制的塊數(shù)。
- /dev/zero 是一個字符設(shè)備,會不斷返回 0 值字節(jié)( 主站蜘蛛池模板: 亚洲精品成人网 | 狠狠色婷婷七月色综合 | 在线看片成人 | 国产精品久久久一区二区三区 | 久久久网站亚洲第一 | 亚洲视频成人 | 一区二区三区不卡在线 | 伊人久久天堂 | 成年香蕉大黄美女美女 | 欧美综合第一页 | 欧美黄色免费在线观看 | 亚洲男人的天堂久久无 | 国产精品免费久久 | 亚洲资源在线观看 | 丁香5月婷婷 | 欧美资源站 | 久九九久福利精品视频视频 | 国产精品一区二区在线播放 | 一区二区三区四区视频 | 亚洲乱码在线视频 | 亚洲精品另类 | 中文乱码视亚洲 | 欧美日韩国产免费一区二区三区 | 综合久久一区二区三区 | 国产成人亚洲精品 | 国产小视频在线观看www | 在线播放地址 | 欧美黄色xxx | 亚洲男人天堂2019 | 亚洲国产成人精品女人久久久 | 亲热网站 | 久国产精品视频 | 精品国产综合成人亚洲区 | 九九影视 | 精品综合网 | 日本一区二区三区中文字幕视频 | 四虎影视国产精品一区二区 | 在线播放国产区 | 国产亚洲欧美成人久久片 | 日韩视频在线观看免费 | 羞羞视频在线看 |