腳本功能
-
每隔一定時間(例如每分鐘)檢查系統中內存占用率最高的前10個進程。
-
將進程的PID、名稱和內存占用率記錄到日志文件中。
-
可以設置一個閾值,當某個進程的內存占用率超過該閾值時,發送警告信息(可選)。
腳本代碼
#!/bin/bash
# 配置參數
LOG_FILE="/var/log/top_memory_usage.log" # 日志文件路徑
INTERVAL=60 # 檢查間隔時間(秒)
THRESHOLD=80 # 內存占用率閾值(百分比)
# 檢查并創建日志文件
if [ ! -f "$LOG_FILE" ]; then
touch "$LOG_FILE"
fi
# 檢查內存占用率并記錄
while true; do
# 獲取內存占用率最高的前10個進程信息
MEMORY_USAGE=$(ps -eo pid,comm,%mem --sort=-%mem | head -n 11 | tail -n 10)
# 記錄到日志文件
echo "$(date +"%Y-%m-%d %H:%M:%S") - Top 10 memory-consuming processes:" >> "$LOG_FILE"
echo "$MEMORY_USAGE" >> "$LOG_FILE"
# 檢查是否超過閾值
while IFS= read -r line; do
PID=$(echo "$line" | awk '{print $1}')
NAME=$(echo "$line" | awk '{print $2}')
USAGE=$(echo "$line" | awk '{print $3}')
if (( $(echo "$USAGE > $THRESHOLD" | bc -l) )); then
echo "Warning: Process $NAME (PID: $PID) is using $USAGE% memory, which exceeds the threshold of $THRESHOLD%." | tee -a "$LOG_FILE"
# 可選:發送警告郵件或通知
# mail -s "Memory Usage Alert" your_email@example.com <<< "Process $NAME (PID: $PID) is using $USAGE% memory, which exceeds the threshold of $THRESHOLD%."
fi
done <<< "$MEMORY_USAGE"
# 等待指定時間
sleep "$INTERVAL"
done
腳本說明
-
日志文件:腳本將監控結果記錄到指定的日志文件中。你可以通過查看日志文件來了解系統的內存使用情況。
-
檢查間隔:
INTERVAL變量控制腳本檢查內存使用情況的時間間隔。默認設置為60秒。 -
閾值:
THRESHOLD變量設置了一個內存占用率的閾值。當某個進程的內存占用率超過該閾值時,腳本會記錄警告信息。你可以根據需要調整這個閾值。 -
警告通知:當內存占用率超過閾值時,腳本會記錄警告信息到日志文件中。你可以選擇通過郵件或其他方式發送通知。