如何有效监控服务器内存使用情况?

监控服务器内存是运维和开发中的常见任务,根据不同的使用场景(临时查看、持续监控、告警设置),有几种主流的方法。

下面我将从命令行快速查看使用现成工具配置告警以及代码示例几个维度来介绍。

1. 命令行快速查看(Linux/Unix 系统)

这是最直接的方法,用于登录服务器后快速了解内存状态。

`free` 命令(最常用)

free -h

-h:以人类可读的格式(GB/MB)显示。

- 输出说明:

total:总内存大小。

used:实际已被使用的内存。

free:完全空闲的内存(通常很小,因为Linux会用空闲内存做缓存)。

shared:共享内存(通常可忽略)。

buff/cache:用于磁盘缓存和缓冲区占用的内存,这部分在需要时可以被应用程序回收。

available这是最关键指标,表示新程序在不启用交换分区(Swap)的情况下,可以从系统获得的内存大小,如果这个值接近0,说明内存紧张。

`top` 或 `htop`

top
或者安装 htop(更直观)
htop

- 在top 界面中,按Shift + M 可以按内存使用率对进程排序。

- 关注%MEM 列,查看哪个进程是内存大户。

`vmstat`

vmstat 1 5

- 每隔1秒输出一次内存统计,共5次。

- 关注swpd(当前使用的交换内存大小)、free(空闲内存)和cache(缓存)。

查看/proc/meminfo(最详细)

cat /proc/meminfo

- 可以看到内核最原始的内存统计数据,如MemTotal,MemFree,MemAvailable,SwapTotal,SwapFree 等。

2. 使用专业监控工具(推荐用于生产环境)

如果需要持续监控并查看历史趋势,建议使用以下工具:

htop /glances(增强版Top)

htop:交互式进程查看器,支持彩色显示和横向/纵向滚动。

glances:一个用Python编写的更强大的工具,不仅显示CPU、内存,还显示磁盘I/O、网络等。

安装
sudo apt install htop glances
运行
glances

`dstat`

- 一个通用的系统资源统计工具,可以组合显示CPU、内存、磁盘、网络。

dstat --mem --cpu --disk --net

`nmon`

- IBM提供的工具,可以输出详细的性能报告,甚至生成图形化文件。

配置告警与持续监控(核心生产环境)

单纯的查看不够,你需要在内存即将耗尽时收到告警

方案A:使用系统自带工具 + 脚本

1、安装sysstat(包含sar 命令)

    sudo apt install sysstat
    sudo systemctl enable sysstat  # 开启数据收集
    sar -r -f /var/log/sysstat/saXX  # 查看历史内存报告

2、编写简单的告警脚本(使用crontab)

    #!/bin/bash
    threshold=80  # 报警阈值(百分比)
    mem_used=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
    if (( $(echo "$mem_used > $threshold" | bc -l) )); then
        echo "Warning: Memory usage is ${mem_used}%" | mail -s "Memory Alert" admin@example.com
    fi

*注意:在生产环境中,通常不会只看used,而是结合available来判断。

方案B:使用成熟的监控系统(最推荐)

Prometheus + Grafana + Node Exporter

Node Exporter:采集服务器指标(包括内存),暴露HTTP接口。

Prometheus:抓取数据并存储。

Grafana:可视化展示,并支持设置告警规则(如:(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90)。

Zabbix:一套完整的监控解决方案,自带内存监控模板和告警。

Datadog / New Relic / CloudWatch:如果需要云厂商或SaaS方案,可以针对特定指标设置告警。

通过系统日志排查内存问题

如果怀疑内存泄漏或OOM(Out Of Memory),可以检查系统日志:

查看是否有OOM killer杀进程的记录
sudo dmesg | grep -i oom
sudo journalctl -xe | grep -i oom
查看系统日志中的内存相关错误
sudo tail -f /var/log/syslog

当系统内存耗尽时,kernel: Out of memory: Killed process ... 是典型信号。

代码示例(如果你需要二次开发)

Python 示例(使用psutil 库)

import psutil
获取内存信息
memory = psutil.virtual_memory()
print(f"总内存: {memory.total / (1024**3):.2f} GB")
print(f"已使用: {memory.used / (1024**3):.2f} GB")
print(f"可用内存: {memory.available / (1024**3):.2f} GB")
print(f"内存使用率: {memory.percent}%")
if memory.percent > 90:
    print("警告:内存使用率过高!")

Go 示例(使用gopsutil 库)

package main
import (
    "fmt"
    "github.com/shirou/gopsutil/mem"
)
func main() {
    memory, _ := mem.VirtualMemory()
    fmt.Printf("Total: %v GB\n", memory.Total / 1024 / 1024 / 1024)
    fmt.Printf("Available: %v GB\n", memory.Available / 1024 / 1024 / 1024)
    fmt.Printf("Used Percent: %.2f%%\n", memory.UsedPercent)
}

1、临时查看:用free -hhtop

2、持续监控:部署Prometheus + Node Exporter + Grafana(开源、强大、已成为事实标准)。

3、告警阈值:关注available 而不是free,建议设置:

警告:可用内存低于总内存的20%。

严重:可用内存低于总内存的10% 或 开始大量使用Swap。

4、自动化:对于云服务器(如AWS EC2, 阿里云ECS),使用云平台自带的内存监控(CloudWatch, 云监控)。

5、排查OOM:当进程被kill时,第一时间检查dmesgsyslog,而不是只看当前的内存使用率。

希望这些方法能帮你有效地监控服务器内存,如果需要针对某个特定工具(如Prometheus配置)的详细说明,可以继续告诉我。

文章摘自:https://idc.huochengrm.cn/fwq/25049.html

评论

精彩评论
  • 2026-04-25 06:51:09

    监控服务器内存可通过命令行工具如`free`、`top`等快速查看,或使用专业工具如`htop`、`glances`等持续监控,配置告警可通过系统脚本或成熟监控系统如Prometheus来实现。