5个命令搞定ubuntu查看内存完整示例
5个命令搞定ubuntu查看内存完整示例 官方文档翻了三遍还是云里雾里?别急,咱们直接上干货。很多刚接触 Linux 服务器的同学,一遇到 ubuntu查看内存 就头大,要么命令敲一半卡壳,要么看完数据不知道咋用。 这篇 完整示例 不整虚的,直接给你一套从入门到实战的排查方案。 1. 内存概念速懂:别再搞混 Swap 和 RAM 在 Linux 世界里,内存管理比 Windows 复杂得多。很多新手一上来就盯着 total 看,结果发现可用内存很少,吓得以为服务器要挂了。其实,Linux 的设计哲学是“宁可浪费内存跑缓存,也不能让进程因为缺内存而崩掉”。 这就导致了你在看数据时,经常会看到 used 很高,但系统运行依然流畅。这里有个关键概念:Cache/Buffer。 Linux 会把空闲内存拿来存文件缓存。当你再次访问这些数据时,速度会快几个数量级。所以,判断内存是否紧张,不能只看 used,要看 available 或者 free 里的真正空闲部分。 另外,Swap 分区是虚拟内存,它是磁盘空间。当物理内存不够时,系统会把暂时不用的数据扔到 Swap 里。如果你的 CPU 频繁在 Swap 和 RAM 之间倒腾数据(这叫做 Swap Thrashing),那你的服务器就会卡得像 PPT 一样。 在嵌入式开发或者后端服务部署中,理解这一点至关重要。比如你跑一个 Java 应用,JVM 堆内存设置太大,物理内存被吃光,系统开始大量使用 Swap,这时候你的接口响应时间会飙升,但 CPU 使用率可能并不高,这就是典型的内存瓶颈表现。 2. 环境准备:SSH 登录与基础权限 在开始敲命令之前,先确认你的环境。绝大多数生产环境的 Ubuntu 服务器,我们都是通过 SSH 远程连接的。 打开你的终端(macOS/Linux)或 PowerShell/CMD(Windows),输入: ssh username@your-server-ip输入密码后进入系统。默认情况下,普通用户查看系统内存信息是没有权限限制的,因为 /proc/meminfo 是全局可读的。但是,如果你需要查看具体某个进程的内存占用,或者查看更详细的 NUMA 节点信息,可能需要 sudo 权限。 注意:在生产环境,尽量避免直接使用 root 账号登录。使用 sudo 前缀执行特权命令,既安全又便于审计。 如果你的服务器是 Docker 容器环境,那么 free -h 看到的内存大小可能是宿主机的内存,而不是容器限制的大小。这时候你需要结合 cgroup 的配置来看。不过对于入门教程,我们先假设你是在标准的 Ubuntu 虚拟机或物理机上操作。 确保你的 Ubuntu 版本是 18.04 或更高版本(LTS 版本),因为旧版本的某些工具命令可能略有差异。 3. 核心语法:free 与 /proc/meminfo 详解 查看内存,最直接的命令就是 free。但是,直接用 free 往往不够,我们需要加上参数。 3.1 使用 free 命令 最基础的用法: free输出结果通常以 KB 为单位,对于人类来说不太友好。我们推荐加上 -h 参数(human-readable),让单位自动转换为 MB 或 GB。 free -h这时候你会看到几列数据:total: 总内存大小。 used: 已使用内存。注意,这里包含了 Cache 和 Buffer。 free: 真正空闲的内存。 shared: 共享内存(如 tmpfs)。 buff/cache: 缓冲区和缓存。 available: 估算的可用于新进程的内存。关键点:在 Ubuntu 18.04+ 版本中,available 这一列非常有用。它比 free 更准确地反映了系统还能分配多少内存给应用程序。如果你发现 available 很小,但 buff/cache 很大,那通常不是问题,因为缓存随时可以被释放。 3.2 深入 /proc/meminfo free 命令的数据来源其实是 /proc/meminfo 文件。这个文件包含了更详细的内存统计信息。 你可以直接查看这个文件: cat /proc/meminfo输出内容非常多,比如 MemTotal, MemFree, MemAvailable, Buffers, Cached, SwapTotal, SwapFree 等。 对于嵌入式开发者来说,/proc/meminfo 中的 HugePages_Total 和 HugePages_Free 也很重要,特别是当你配置了大页内存(Huge Pages)来提升数据库或 JVM 性能时。 3.3 实时监控:top 与 htop 除了静态查看,我们还需要动态监控。 top 是自带的命令,但界面比较简陋。推荐使用 htop,它提供了彩色的、可交互的界面。 安装 htop: sudo apt update sudo apt install htop运行 htop,你可以看到每个进程的内存占用率(%MEM)。在左上角可以看到系统整体的内存使用条。绿色代表已使用,蓝色代表缓存,红色代表交换分区使用量。 在 htop 界面中,按 F6 可以选择排序列,比如按 %MEM 排序,这样就能快速找出吃内存最多的进程。 4. 完整代码示例:自动化内存检查脚本 光知道命令不够,在实际工作中,我们经常需要写脚本定期巡检服务器内存,或者在 CI/CD 流水线中检查构建机的内存状态。 下面提供一个 完整示例 脚本,它不仅能显示当前内存状态,还能根据阈值发出警告。 4.1 脚本代码 创建一个文件 check_memory.sh: #!/bin/bash# 定义阈值:可用内存低于总内存的 10% 时警告 WARNING_THRESHOLD=10# 获取总内存 (KB) TOTAL_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}')# 获取可用内存 (KB) AVAIL_MEM=$(grep MemAvailable /proc/meminfo | awk '{print $2}')# 获取 Swap 使用率 SWAP_TOTAL=$(grep SwapTotal /proc/meminfo | awk '{print $2}') SWAP_FREE=$(grep SwapFree /proc/meminfo | awk '{print $2}')# 计算可用内存百分比 if [ $TOTAL_MEM -gt 0 ]; thenAVAIL_PERCENT=$((AVAIL_MEM * 100 / TOTAL_MEM)) elseAVAIL_PERCENT=0 fi# 计算 Swap 使用百分比 if [ $SWAP_TOTAL -gt 0 ]; thenSWAP_USED_PERCENT=$(( (SWAP_TOTAL - SWAP_FREE) * 100 / SWAP_TOTAL )) elseSWAP_USED_PERCENT=0 fiecho ========================================= echo 服务器内存状态检查报告 echo ========================================= echo 检查时间: $(date '+%Y-%m-%d %H:%M:%S') echo 主机名: $(hostname) echo ----------------------------------------- echo 总内存: ${TOTAL_MEM} KB echo 可用内存: ${AVAIL_MEM} KB (${AVAIL_PERCENT}%) echo Swap总量: ${SWAP_TOTAL} KB echo Swap使用: ${SWAP_USED_PERCENT}% echo -----------------------------------------# 判断是否低于阈值 if [ $AVAIL_PERCENT -lt $WARNING_THRESHOLD ]; thenecho ⚠️ 警告: 可用内存低于 ${WARNING_THRESHOLD}%,请检查是否存在内存泄漏或负载过高!echo 当前可用内存百分比: ${AVAIL_PERCENT}%exit 1 elseecho ✅ 状态正常: 可用内存充足。exit 0 fi4.2 运行与解释 给脚本添加执行权限并运行: chmod +x check_memory.sh ./check_memory.sh代码逐行解析:grep MemTotal /proc/meminfo | awk '{print $2}': 从系统文件提取总内存数值。awk 用于提取第二列(数值部分)。 grep MemAvailable: 提取可用内存。注意,这里用的是 MemAvailable 而不是 MemFree,因为前者更准确。 算术运算: Bash 中使用 $((...)) 进行整数运算。我们计算了可用内存占总内存的百分比,以及 Swap 的使用率。 逻辑判断: if [ $AVAIL_PERCENT -lt $WARNING_THRESHOLD ] 检查可用内存百分比是否小于 10%。如果是,则输出警告并 exit 1(非零退出码通常表示错误,方便 CI 系统捕获)。这个脚本可以配合 crontab 定时执行,或者在 Kubernetes 的 Pod 启动探针中使用,确保应用启动前内存资源充足。 4.3 进阶:查看特定进程内存 有时候你需要知道是哪个进程吃了内存。除了 htop,你还可以使用 ps 命令。 ps aux --sort=-%mem | head -n 10这条命令列出了内存占用最高的前 10 个进程。ps aux: 显示所有用户的进程。 --sort=-%mem: 按内存使用百分比降序排序。 head -n 10: 只显示前 10 行。你可以结合 grep 查找特定服务,例如查找 Java 进程: ps aux | grep java | grep -v grep5. 常见报错与避坑指南 在实际操作中,你可能会遇到一些“坑”。 5.1 free -h 显示异常 在某些旧版本或者特定编译环境下,free 命令可能没有 -h 选项。这时你可以使用 free -m(以 MB 为单位)或 free -g(以 GB 为单位)。 另外,如果在 Docker 容器中运行 free -h,看到的内存大小可能远超容器限制。这是因为容器默认继承宿主机的 /proc/meminfo。要查看容器限制的内存,需要查看 /sys/fs/cgroup/memory/memory.limit_in_bytes (Cgroup v1) 或 /sys/fs/cgroup/memory.max (Cgroup v2)。 5.2 OOM Killer 杀进程 如果你发现服务突然挂掉,检查日志可能会看到 Killed process xxx (java) total-vm:xxx, anon-rss:xxx。这是 Linux 的 OOM Killer 在作怪。当系统内存耗尽且无法交换时,内核会根据评分算法杀死占用内存最多的进程。 解决方案:增加物理内存。 调整 OOM 评分:对于关键服务,可以调整 /proc/pid/oom_adj (旧内核) 或 memory.oom.group (Cgroup v2) 来降低其被杀死的概率,或者提高其优先级。 优化应用内存:检查是否存在内存泄漏。使用工具如 valgrind (C/C++) 或 Java 的 jmap 生成堆转储文件分析。5.3 嵌入式视角的特殊性 在嵌入式 Linux 中,内存往往非常有限(几十 MB 到几百 MB)。这时候,free 命令可能都不一定安装(取决于 BusyBox 版本)。 在资源极度受限的环境下,直接读取 /proc/meminfo 是最可靠的方法。而且,嵌入式系统通常不使用 Swap(因为 Flash 读写寿命有限),所以你要特别关注 MemAvailable。如果 MemAvailable 长期接近 0,系统可能会变得非常卡顿,甚至死机。 另外,嵌入式开发中,静态链接和动态链接对内存的影响也不同。静态链接的二进制文件虽然部署简单,但可能占用更多的物理内存(因为每个进程都包含一份库代码)。 6. 小结与互动 通过 ubuntu查看内存 的几个核心命令,我们从理论到实践,从手动排查到自动化脚本,完整梳理了内存监控的套路。 核心要点回顾:不要只看 free,要看 available。 Swap 不是内存,频繁使用 Swap 是性能杀手。 自动化脚本 是运维和 CI/CD 的标配。 嵌入式环境 下,直接读 /proc/meminfo 最稳。内存管理是系统性能调优的第一课。无论是后端高并发服务,还是嵌入式实时系统,理解内存的流向和瓶颈,都能让你少走很多弯路。 最后,我想问大家一个问题:你公司项目里是怎么处理内存监控和告警的?是简单的 cron 脚本,还是集成了 Prometheus + Grafana 的完整监控体系?欢迎在评论区分享你的实战经验,特别是那些踩过坑的解决方案,咱们一起交流!

相关新闻

面试必问xxsp性能优化3步解决代码卡顿

面试必问xxsp性能优化3步解决代码卡顿

面试必问xxsp性能优化3步解决代码卡顿 复制来的 xxsp 性能优化代码跑不通,报错信息满屏飞,连日志都看不懂,是不是让你抓狂?别急,这种“拿着代码不会调”的困境,恰恰是面试必问场景里的重灾区。面试官扔给你一个 xxsp…

2026/9/22 20:31:06 阅读更多 →
3个recover my files坑让你文件全丢?实战项目避坑指南

3个recover my files坑让你文件全丢?实战项目避坑指南

3个recover my files坑让你文件全丢?实战项目避坑指南 面试被问“文件恢复原理”答不上来,实战项目里因为没处理 recover my files 场景导致数据丢失,这种痛谁懂?…

2026/9/22 20:31:06 阅读更多 →
上海到郑州动车时刻表解析:3个最佳实践避开API变更坑

上海到郑州动车时刻表解析:3个最佳实践避开API变更坑

上海到郑州动车时刻表解析:3个最佳实践避开API变更坑 版本升级后 API 全变了,这种痛谁懂?我刚把项目里查“上海到郑州动车时刻表”的模块从 v1 升到 v2,结果发现返回的字段名全改了, departure_time 变成了…

2026/9/22 20:31:06 阅读更多 →

最新新闻

龙之谷职业选择避坑指南:3个性能优化点让新手少走弯路

龙之谷职业选择避坑指南:3个性能优化点让新手少走弯路

龙之谷职业选择避坑指南:3个性能优化点让新手少走弯路 刚学完基础语法,打开编辑器却对着空白文件发呆?这是无数程序员的通病。很多人以为龙之谷职业选择只是点选角色,其实背后是复杂的技能树与资源分配逻辑。想搞懂这套系统,光背语法没用,得动手搭个项…

2026/9/22 21:11:37 阅读更多 →
3步搞定苹果日历接口:大厂面试保姆级教程

3步搞定苹果日历接口:大厂面试保姆级教程

3步搞定苹果日历接口:大厂面试保姆级教程 配置环境就卡半天,明明照着文档敲代码,日历数据就是拉不下来?别慌,这不是你代码写错了,而是你没搞懂底层协议。这篇保姆级教程,专为初次报考人员设计,带你从协议原理到代码实现,彻底拿下【苹果日历】相关的…

2026/9/22 21:11:37 阅读更多 →
拒绝菜鸟教程php的浅尝辄止,一文搞懂PHP选型与避坑指南

拒绝菜鸟教程php的浅尝辄止,一文搞懂PHP选型与避坑指南

拒绝菜鸟教程php的浅尝辄止,一文搞懂PHP选型与避坑指南 翻开 PHP 官方文档,是不是觉得像翻砖头?代码片段满天飞,配置项眼花缭乱,新手往往在 ini 配置和 require…

2026/9/22 21:11:37 阅读更多 →
微信购买接口性能优化:3个坑点解决高并发卡顿

微信购买接口性能优化:3个坑点解决高并发卡顿

微信购买接口性能优化:3个坑点解决高并发卡顿 复制来的代码跑不通,报错信息满屏飘,到底该从哪下手调?别慌,这种“看着对,跑起来就崩”的情况,在接入 微信购买…

2026/9/22 21:11:37 阅读更多 →
胡歌杨幂项目性能速查手册:告别代码报错

胡歌杨幂项目性能速查手册:告别代码报错

胡歌杨幂项目性能速查手册:告别代码报错 刚接手胡歌杨幂相关的业务模块,是不是也遇到过这种情况?从网上或者同事那里复制来的代码,看着逻辑挺顺,一跑起来全是报错,或者数据对不上。想改吧,不知道哪里动一下能通,哪里动一下会崩。这时候,你需要的不是…

2026/9/22 21:11:36 阅读更多 →
麦创网实战项目复盘:3个核心考点助你面试通关

麦创网实战项目复盘:3个核心考点助你面试通关

麦创网实战项目复盘:3个核心考点助你面试通关 面试官问:“讲一下你做的麦创网相关实战项目,底层原理是什么?” 你脑子一片空白,支支吾吾答不出,直接凉凉。 别慌,今天把麦创网核心考点掰开了揉碎了讲,保你下次面试稳过。 考点梳理:面试高频雷区…

2026/9/22 21:10:36 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →