Linux查看系统内存的几种方法详解,你知道Linux查看系统内存的5种神奇方法吗?,你知道Linux查看系统内存的5种神奇方法吗?

昨天 5440阅读

使用free命令查看内存状态

free命令是Linux系统管理员必备的内存监控工具,它能直观展示物理内存、交换分区(Swap)以及缓冲区(buffers/cache)的使用情况,是进行系统内存性能分析的首要工具。

基础使用方法

free

执行后显示的内存信息示例:

Linux查看系统内存的几种方法详解,你知道Linux查看系统内存的5种神奇方法吗?,你知道Linux查看系统内存的5种神奇方法吗? 第1张

              total        used        free      shared  buff/cache   available
Mem:        8000000     3000000     1000000      500000     4000000     3500000
Swap:       2000000      500000     1500000

实用参数详解

  1. 人性化显示:使用-h参数以更易读的单位(GB/MB)显示

    free -h
  2. 定时刷新:通过-s参数设置刷新间隔(单位:秒)

    free -s 5  # 每5秒自动刷新内存信息
  3. 汇总显示:添加-t参数显示内存和Swap的总和使用情况

    free -th

输出字段深度解析

字段 说明 重点关注场景
total 内存总量 确认系统物理内存大小
used 已使用内存(含缓存) 高负载时参考
free 完全空闲内存 紧急排查时参考
buff/cache 缓存和缓冲区 可回收内存的重要指标
available 实际可用内存 最准确的可用内存指标

专业建议:在现代Linux系统中,不应仅关注free列,available列更能反映真实可用内存,因为它包含了可回收的缓存部分,当available内存持续低于总内存的10%时,应考虑优化应用或增加内存。

实时进程监控:tophtop详解

top命令:经典监控工具

top

top界面中,内存信息位于顶部区域:

KiB Mem :  8000000 total,  1000000 free,  3000000 used,  4000000 buff/cache
KiB Swap:  2000000 total,  1500000 free,   500000 used.

实用技巧

  • M:按内存使用率排序进程
  • P:按CPU使用率排序
  • q:退出监控界面
  • 1:展开显示多核CPU详情
  • E:切换内存显示单位(KB/MB/GB)

htop:增强型交互工具

htop提供了更直观的界面和更丰富的功能:

htop

主要优势

  • 彩色编码显示不同资源状态
  • 支持鼠标直接操作界面元素
  • 直观的树状进程视图展示父子关系
  • 直接显示内存占用百分比
  • 可横向/纵向滚动查看完整命令和参数

安装方法

# Debian/Ubuntu系
sudo apt update && sudo apt install -y htop
# RHEL/CentOS系
sudo yum install -y htop
# Arch Linux
sudo pacman -S htop
# 通过源码编译安装最新版
wget https://github.com/htop-dev/htop/archive/refs/tags/3.2.1.tar.gz
tar xvf 3.2.1.tar.gz
cd htop-3.2.1
./autogen.sh && ./configure && make && sudo make install

虚拟内存分析:vmstat深度使用

vmstat(Virtual Memory Statistics)提供系统虚拟内存、进程、CPU活动的完整视图,是诊断系统性能瓶颈的利器。

基础监控模式

vmstat 1 5  # 间隔1秒,共采样5次

典型输出:

Linux查看系统内存的几种方法详解,你知道Linux查看系统内存的5种神奇方法吗?,你知道Linux查看系统内存的5种神奇方法吗? 第2张

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 500000 1000000 200000 2000000  0    0   100    50  200  300 10  5 85  0  0

关键指标解析

  1. 内存相关

    • swpd:已使用的Swap空间
    • free:空闲内存量
    • buff:缓冲区使用量
    • cache:页面缓存使用量
  2. Swap活动

    • si(swap in):每秒从磁盘读入Swap的内存量(KB)
    • so(swap out):每秒写入Swap的内存量(KB)
  3. 系统健康指标

    • cs(context switch):上下文切换次数(过高可能存在问题)
    • wa(IO wait):I/O等待时间占比
    • r(running processes):运行队列中的进程数

性能分析提示:当si/so持续大于0,表明系统正在频繁使用Swap,这会导致明显的性能下降,此时可能需要增加物理内存或优化应用内存使用,理想情况下,Swap使用率应保持在0%附近。

深入内存细节:/proc/meminfo解读

Linux内核通过/proc/meminfo暴露详细的内存统计信息,这是最全面的内存数据来源:

cat /proc/meminfo

典型输出节选:

MemTotal:        8000000 kB
MemFree:         1000000 kB
MemAvailable:    3500000 kB
Buffers:          200000 kB
Cached:          1800000 kB
SwapCached:        50000 kB
Active:          2800000 kB
Inactive:        1500000 kB
Active(anon):    1200000 kB
Inactive(anon):   300000 kB
Active(file):    1600000 kB
Inactive(file):  1200000 kB
...

关键字段解析

字段 说明 重要性
MemAvailable 估算的可用内存
SwapTotal/SwapFree Swap分区总量/剩余
Slab 内核数据结构占用内存
PageTables 页表占用内存
CommitLimit 系统可分配内存上限
VmallocUsed vmalloc分配的内存量
HugePages_Total 大页内存总量

高级技巧:监控/proc/meminfo的变化可以诊断内存泄漏问题:

watch -n 1 "grep -e MemFree -e MemAvailable -e Slab /proc/meminfo"

对于长期监控,可以使用以下脚本记录内存变化:

#!/bin/bash
LOG_FILE="/var/log/mem_usage.log"
while true; do
    echo -n "$(date '+%Y-%m-%d %H:%M:%S') " >> $LOG_FILE
    grep -e MemTotal -e MemFree -e MemAvailable /proc/meminfo | awk '{printf("%s=%s ", , )}' >> $LOG_FILE
    echo "" >> $LOG_FILE
    sleep 60
done

硬件级内存检测:dmidecode实战

dmidecode是获取物理内存硬件信息的终极工具,需要root权限运行:

sudo dmidecode -t memory

典型输出节选:

Handle 0x1100, DMI type 17, 40 bytes
Memory Device
    Array Handle: 0x1000
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 16 GB
    Form Factor: DIMM
    Locator: DIMM_A1
    Type: DDR4
    Type Detail: Synchronous
    Speed: 2666 MHz
    Manufacturer: Samsung
    Serial Number: 12345678
    Part Number: M378A2K43CB1-CTD

实用参数组合

  1. 仅显示已安装内存:

    sudo dmidecode -t memory | grep -A5 "Memory Device" | grep -v "No Module Installed"
  2. 获取内存总数统计: Linux查看系统内存的几种方法详解,你知道Linux查看系统内存的5种神奇方法吗?,你知道Linux查看系统内存的5种神奇方法吗? 第3张

    sudo dmidecode -t memory | grep "Size:" | grep -v "No Module Installed" | awk '{sum+=} END {print sum "GB"}'
  3. 查看内存时序信息:

    sudo dmidecode -t memory | grep -E "Speed:|Type:|Part Number:"
  4. 检查ECC内存支持:

    sudo dmidecode -t memory | grep "Error Correction Type:"

综合监控方案:glances高级应用

glances是一个跨平台的现代化监控工具,提供全面的系统状态视图,支持多种输出格式和远程监控。

基础使用

glances

主要功能区域

  1. CPU使用率(按核心显示)
  2. 内存和Swap使用情况(带历史趋势图)
  3. 磁盘I/O活动(读写速率)
  4. 网络流量(发送/接收)
  5. 进程列表(可按各种指标排序)
  6. 文件系统使用情况
  7. 传感器温度监控(如果可用)

高级特性

  1. Web界面

    glances -w

    然后通过浏览器访问http://<服务器IP>:61208

  2. RESTful API

    glances --export restful

    可通过HTTP API获取JSON格式的监控数据

  3. 导出到各种数据库

    glances --export influxdb
    glances --export prometheus
    glances --export graphite
  4. 报警功能: 编辑配置文件/etc/glances/glances.conf设置各种阈值报警

安装方法

# 推荐使用pip安装最新版
pip install glances
# 系统包管理安装(可能版本较旧)
sudo apt install glances  # Debian/Ubuntu
sudo yum install glances  # CentOS/RHEL
# 使用Docker运行
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it nicolargo/glances

图形化工具选择指南

GNOME System Monitor

适用场景:GNOME桌面环境用户

核心特点

  • 直观的进程管理界面,支持结束、杀死进程
  • 资源使用历史图表(CPU、内存、网络)
  • 文件系统使用情况可视化
  • 支持查看进程的打开文件、内存映射等详细信息

安装方法

sudo apt install gnome-system-monitor  # Debian/Ubuntu
sudo yum install gnome-system-monitor  # CentOS/RHEL

KSysGuard(KDE System Monitor)

适用场景:KDE桌面环境用户

核心特点

  • 高度可定制的仪表盘和工作表
  • 强大的远程监控能力
  • 详细的进程控制功能
  • 支持创建自定义传感器监控

安装方法

sudo apt install ksysguard  # Debian/Ubuntu
sudo yum install ksysguard  # CentOS/RHEL

Conky

适用场景:轻量级桌面监控,适合资源有限的系统

核心特点

  • 极低的资源占用(lt;1% CPU和10MB内存)
  • 完全可配置的显示布局
  • 支持多种插件和扩展
  • 可集成系统通知和警报

安装与配置示例

# 安装
sudo apt install conky-all  # Ubuntu/Debian
# 获取流行配置
wget -O ~/.conkyrc https://github.com/brndnmtthws/conky/blob/master/data/conky.conf
# 启动
conky

工具对比与选型指南

工具 最佳适用场景 数据精度 易用性 功能广度 学习曲线
free 快速内存状态检查
top 实时进程监控
htop 交互式系统监控 中高
vmstat 系统瓶颈分析 中高
/proc/meminfo 深度内存分析 最高
dmidecode 硬件信息获取
glances 综合系统监控

专业运维建议

  1. 日常监控策略

    • 开发环境:使用htop进行交互式监控
    • 生产环境:部署Prometheus+Grafana长期监控体系
    • 临时检查:使用free -hvmstat 1 5快速获取状态
  2. 性能分析流程

    • 先用freetop确认是否存在内存压力
    • 再用vmstat检查Swap活动和I/O等待
    • 通过/proc/meminfo深入分析内存分配
    • 必要时用dmidecode验证硬件配置
  3. 趋势监控方案

    # 使用sar收集系统活动数据(需安装sysstat)
    sudo apt install sysstat
    sudo systemctl enable sysstat
    sudo systemctl start sysstat
    # 查看历史内存数据
    sar -r
  4. 报警设置建议

    • MemAvailable低于总内存10%时触发警告
    • 当Swap使用率持续超过30%时触发严重警报
    • 监控OOM killer事件和内存分配失败情况

示例监控脚本

#!/bin/bash
# 高级内存监控报警脚本
THRESHOLD_WARN=80  # 内存使用率警告阈值%
THRESHOLD_CRIT=90  # 内存使用率严重阈值%
SWAP_THRESHOLD=30  # Swap使用率阈值%
# 获取内存数据
MEM_TOTAL=$(grep MemTotal /proc/meminfo | awk '{print }')
MEM_AVAILABLE=$(grep MemAvailable /proc/meminfo | awk '{print }')
MEM_USED_PERCENT=$(( (MEM_TOTAL - MEM_AVAILABLE) * 100 / MEM_TOTAL ))
# 获取Swap数据
SWAP_TOTAL=$(grep SwapTotal /proc/meminfo | awk '{print }')
SWAP_FREE=$(grep SwapFree /proc/meminfo | awk '{print }')
[ "$SWAP_TOTAL" -ne 0 ] && SWAP_USED_PERCENT=$(( (SWAP_TOTAL - SWAP_FREE) * 100 / SWAP_TOTAL )) || SWAP_USED_PERCENT=0
# 判断是否触发报警
if [ "$MEM_USED_PERCENT" -ge "$THRESHOLD_CRIT" ]; then
    SEVERITY="CRITICAL"
elif [ "$MEM_USED_PERCENT" -ge "$THRESHOLD_WARN" ]; then
    SEVERITY="WARNING"
else
    SEVERITY="OK"
fi
# 检查Swap使用情况
if [ "$SWAP_USED_PERCENT" -ge "$SWAP_THRESHOLD" ]; then
    SWAP_ALERT="(High Swap Usage: ${SWAP_USED_PERCENT}%)"
else
    SWAP_ALERT=""
fi
# 生成报告
REPORT_FILE="/tmp/mem_alert_$(date +%Y%m%d_%H%M%S).log"
{
    echo "=== 内存状态报告 ==="
    echo "生成时间: $(date)"
    echo "当前内存使用率: ${MEM_USED_PERCENT}% ${SEVERITY} ${SWAP_ALERT}"
    echo ""
    echo "=== 详细内存信息 ==="
    free -h
    echo ""
    echo "=== 内存占用前10的进程 ==="
    ps aux --sort=-%mem | head -11
    echo ""
    echo "=== /proc/meminfo ==="
    grep -E 'MemTotal|MemFree|MemAvailable|Buffers|Cached|Swap|Slab' /proc/meminfo
} > "$REPORT_FILE"
# 根据严重程度发送通知
if [ "$SEVERITY" != "OK" ]; then
    mail -s "[${SEVERITY}] 内存警报 - 使用率 ${MEM_USED_PERCENT}%" admin@example.com < "$REPORT_FILE"
    # 可选:发送Slack/Teams通知
    # curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$(hostname) 内存 ${SEVERITY}: ${MEM_USED_PERCENT}% used ${SWAP_ALERT}\"}" https://hooks.slack.com/services/...
fi

通过掌握这些工具和技巧,您将能够全面掌控Linux系统的内存使用情况,快速识别性能瓶颈,并有效优化系统资源分配,建议定期进行内存压力测试,了解系统的实际承载能力,并建立完善的监控预警机制,


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]