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