Shell腳本實(shí)現(xiàn)監(jiān)控磁盤、CPU、內(nèi)存占用情況
一、前言
CPU、內(nèi)存和磁盤是計(jì)算機(jī)中重要且相互依賴的組件。CPU執(zhí)行運(yùn)算和控制指令,內(nèi)存提供臨時(shí)存儲(chǔ)空間用于存儲(chǔ)CPU需要處理的數(shù)據(jù)和指令,而磁盤則提供長期存儲(chǔ)的功能。它們共同工作以實(shí)現(xiàn)計(jì)算機(jī)的正常運(yùn)行和數(shù)據(jù)處理任務(wù)。
本文主要通過shell實(shí)現(xiàn)如何監(jiān)控他們的使用情況。
二、關(guān)于他們
2.1 CPU(中央處理器)
是計(jì)算機(jī)的核心組件之一,負(fù)責(zé)執(zhí)行計(jì)算機(jī)指令和控制計(jì)算機(jī)的操作。它是計(jì)算機(jī)的“大腦”,決定了計(jì)算機(jī)的運(yùn)行速度和性能。CPU包含多個(gè)核心,每個(gè)核心可以執(zhí)行一個(gè)或多個(gè)線程的指令。
2.2 內(nèi)存(也稱為隨機(jī)存取存儲(chǔ)器RAM)
是計(jì)算機(jī)用于存儲(chǔ)數(shù)據(jù)和指令的地方。它是臨時(shí)存儲(chǔ)器,這意味著當(dāng)計(jì)算機(jī)關(guān)閉或斷電時(shí),其中的數(shù)據(jù)會(huì)丟失。內(nèi)存以字節(jié)為單位存儲(chǔ)數(shù)據(jù),并具有不同的訪問速度和容量。計(jì)算機(jī)將需要處理的數(shù)據(jù)和指令從磁盤加載到內(nèi)存中,然后CPU從內(nèi)存中獲取數(shù)據(jù)并進(jìn)行處理。
2.3 磁盤(硬盤驅(qū)動(dòng)器)
是計(jì)算機(jī)用于長期存儲(chǔ)數(shù)據(jù)和程序的設(shè)備。相比內(nèi)存,磁盤的容量更大,但讀寫速度較慢。磁盤通常是非易失性存儲(chǔ)器,這意味著即使計(jì)算機(jī)關(guān)閉或斷電,其中的數(shù)據(jù)也能保持不變。磁盤由一個(gè)或多個(gè)盤片組成,這些盤片通過磁頭來讀取和寫入數(shù)據(jù)。計(jì)算機(jī)通過操作系統(tǒng)和文件系統(tǒng)來管理磁盤上的數(shù)據(jù)。
三、監(jiān)控實(shí)現(xiàn)
3.1 監(jiān)控CPU
要編寫一個(gè)shell腳本來監(jiān)控CPU占用大小,可以使用命令 top
來獲取系統(tǒng)的CPU信息,并解析輸出結(jié)果。
以下是一個(gè)示例的shell腳本代碼,該腳本會(huì)循環(huán)讀取CPU的占用情況,并在符合條件時(shí)輸出提示信息。
#!/bin/bash # 設(shè)置閾值,當(dāng)CPU占用超過該閾值時(shí)進(jìn)行輸出提示 threshold=80 while true do # 使用top命令獲取CPU占用信息,并使用grep和awk篩選和解析輸出結(jié)果 cpu_usage=$(top -bn 1 | grep "%Cpu(s)" | awk '{print $2}') # 將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù),以便進(jìn)行比較 cpu_usage=${cpu_usage%.*} echo "Current CPU Usage: ${cpu_usage}%" # 檢查CPU占用是否超過閾值 if [ $cpu_usage -gt $threshold ] then echo "CPU Usage Exceeded Threshold!" # 在此處添加其他操作或通知機(jī)制 fi # 定義間隔時(shí)間,以控制檢查頻率 sleep 5 done
以上代碼中, threshold
變量定義了設(shè)定的閾值,如果CPU占用超過該閾值,將輸出警告信息。 top
命令用于獲取系統(tǒng)的CPU占用情況, grep
和 awk
用于篩選和解析輸出結(jié)果。 sleep
命令定義了循環(huán)的間隔時(shí)間,這里設(shè)置為5秒。
你可以根據(jù)需求自定義腳本中的閾值、輸出信息和其他操作。
3.2 監(jiān)控內(nèi)存
你可以使用 free
命令來獲取當(dāng)前系統(tǒng)的內(nèi)存占用情況,并使用 awk
命令來提取需要的信息。以下是一個(gè)示例代碼:
#!/bin/bash # 設(shè)置閾值,當(dāng)內(nèi)存占用超過該閾值時(shí)發(fā)送警告 threshold=80 while true; do # 使用 free 命令獲取內(nèi)存占用情況,并使用 awk 提取第三行的數(shù)據(jù) mem_info=$(free | awk 'NR==3{print $3/$2 * 100}') # 比較內(nèi)存占用情況和閾值 if (( $(echo "$mem_info > $threshold" | bc -l) )); then echo "內(nèi)存占用超過閾值($threshold%),當(dāng)前占用為:$mem_info%" # 在此處添加發(fā)送警告的代碼 fi # 等待一段時(shí)間后再次監(jiān)控 sleep 5 done
在腳本中, free
命令用于獲取內(nèi)存占用情況,其中 awk 'NR==3{print $3/$2 * 100}'
表示提取 free
命令輸出的第三行(包含內(nèi)存占用信息),并計(jì)算內(nèi)存占用百分比。與閾值進(jìn)行比較后,如果超過閾值,則輸出警告信息。你可以在警告部分加入發(fā)送郵件或其他通知的代碼。
腳本中使用 sleep 5
表示每隔 5 秒重新檢查一次內(nèi)存占用情況,你可以根據(jù)需要更改該值。將以上代碼保存為腳本文件(比如 memory_monitor.sh
),并通過 chmod +x memory_monitor.sh
命令給予執(zhí)行權(quán)限后,就可以運(yùn)行該腳本來監(jiān)控內(nèi)存占用情況了。
3.3 監(jiān)控磁盤
你可以使用 df
命令來獲取磁盤占用情況,然后編寫一個(gè)shell腳本來監(jiān)控磁盤占用大小。以下是一個(gè)示例代碼:
#!/bin/bash # 設(shè)置閾值,當(dāng)磁盤使用率超過該閾值時(shí)發(fā)送警報(bào) THRESHOLD=90 # 獲取磁盤使用率,并提取百分比部分 usage=$(df -h | awk '$NF=="/"{printf "%s\n", $5}' | cut -d'%' -f1) # 檢查磁盤使用率是否超過閾值 if [ $usage -gt $THRESHOLD ]; then echo "磁盤使用率超過閾值,請(qǐng)及時(shí)清理!" fi
將上述代碼保存到一個(gè)文件(例如 check_disk_usage.sh
),然后通過運(yùn)行 bash check_disk_usage.sh
或者 ./check_disk_usage.sh
來執(zhí)行腳本。
請(qǐng)注意,即使這個(gè)腳本可以監(jiān)控磁盤使用情況,但它并不會(huì)持續(xù)監(jiān)控。你可能需要使用定時(shí)任務(wù)工具(如cron)來定期運(yùn)行這個(gè)腳本,以便實(shí)現(xiàn)長期監(jiān)控。
四、配置crontab
這些腳本寫好了,需要定時(shí)執(zhí)行,可以通過crontab配置每天或者幾個(gè)小時(shí)跑一次。下面是每8小時(shí)跑一次的配置。
* */8 * * * bash /你的代碼基礎(chǔ)路徑/disk.sh
五、總結(jié)
服務(wù)器的 CPU 、 磁盤 和 內(nèi)存 是服務(wù)器運(yùn)行和處理任務(wù)的關(guān)鍵組件,它們的正常運(yùn)行狀態(tài)對(duì)服務(wù)器的穩(wěn)定性和性能至關(guān)重要。因此,監(jiān)控服務(wù)器的 CPU 、 磁盤 和 內(nèi)存 的使用情況是非常必要的。
以上就是Shell腳本實(shí)現(xiàn)監(jiān)控磁盤、CPU、內(nèi)存占用情況的詳細(xì)內(nèi)容,更多關(guān)于Shell磁盤監(jiān)控的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
監(jiān)控服務(wù)器swap并重啟php的Shell腳本
有一臺(tái)服務(wù)器老是交換扇區(qū)占滿然后失去響應(yīng),很煩,因?yàn)榧虞d了以前別人寫的一個(gè)php擴(kuò)展,效率低,資源占用大,悲劇的是現(xiàn)在還沒有可以替換的東西2014-03-03Linux下使用expect命令編寫自動(dòng)化交互腳本
今天小編就為大家分享一篇關(guān)于Linux下使用expect命令編寫自動(dòng)化交互腳本,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-11-11Linux?shell命令行查詢文件中內(nèi)容常用的命令及其用法
在Linux中,查找文件內(nèi)容可以使用多種命令,如grep、find、ack和ripgrep,這些工具各有特點(diǎn),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09linux shell 中雙引號(hào)和單引號(hào)的區(qū)別解析
最近在編寫shell腳本時(shí),發(fā)現(xiàn)引號(hào)使用的比較頻繁,也出現(xiàn)過小問題,現(xiàn)根據(jù)我的使用情況做一下總結(jié),也加深一下自己的印象,這篇文章主要介紹了linux shell 中雙引號(hào)和單引號(hào)的區(qū)別解析,需要的朋友可以參考下2024-02-02shell腳本中set?-e選項(xiàng)作用范圍小結(jié)
本文主要介紹了shell腳本中set?-e選項(xiàng)作用范圍小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06