脚本功能
- 
每隔一定时间(例如每分钟)检查系统中内存占用率最高的前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变量设置了一个内存占用率的阈值。当某个进程的内存占用率超过该阈值时,脚本会记录警告信息。你可以根据需要调整这个阈值。
- 
警告通知:当内存占用率超过阈值时,脚本会记录警告信息到日志文件中。你可以选择通过邮件或其他方式发送通知。