使用top命令进行内存监测
2026-01-04 本文已影响0人
dhz120
#!/bin/bash
# ========================= 参数配置 =========================
LOG_FILE="/var/log/memory_monitor_top.log" # 日志文件路径,建议放在 /var/log 或用户目录
INTERVAL=10 # 监控间隔时间(秒)
TOP_N=20 # 统计占用内存最多的前 N 个进程
# =========================================================
# ========================= 主循环 =========================
while true; do
# 获取当前时间戳
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 使用 top 命令获取进程信息,按 %MEM 降序排序,取前 TOP_N 条
# -b: 批处理模式
# -n 1: 只输出一次
# -d $INTERVAL: 设置刷新间隔(此处仅作为参数传递,实际间隔由 sleep 控制)
# -o %MEM: 按内存占用排序
# -c: 显示完整命令行
# -w 512: 将列宽扩展到 512,确保长命令不被截断
# | head -n $TOP_N: 只取前 N 条记录
process_info=$(top -b -n 1 -d $INTERVAL -o %MEM -c -w 512 | head -n $TOP_N)
# 将结果写入日志文件
{
echo "[$current_time]"
echo "$process_info"
echo "----------------------------------------"
} >> $LOG_FILE
# 暂停 INTERVAL 秒后继续循环
sleep $INTERVAL
done