Linux系统命令 - 查看内存使用情况

2023-10-27

一、 查看内存使用情况

在Linux系统中,大部分操作都通过命令行来完成,因为大部分情况下不开启图形界面。
在服务器环境,则只能通过shell执行操作。
下面介绍查看内存使用情况的相关命令。 包括物理内存(RAM)和交换内存(swap)。

我们经常需要检查服务器的内存使用情况,以及每个进程占用的内存,避免发生资源短缺进而影响用户体验。
对于网站和Web服务,必须具有足够的内存才能处理客户端请求。 如果内存不足,在请求高峰时就会变得缓慢,拥堵,甚至服务崩溃。
当然桌面系统也是同样的道理。

1. 使用 free 命令

free 命令是Linux系统中最简单和最常用的内存查看命令, 示例如下:


$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7822         321         324         377        7175        6795
Swap:          4096           0        4095


$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        322M        324M        377M        7.0G        6.6G
Swap:          4.0G        724K        4.0G

其中, -m 选项是以MB为单位来展示内存使用信息; -h 选项则是以人类(human)可读的单位来展示。

上面的示例中, Mem: 这一行:

  • total 表示总共有 7822MB 的物理内存(RAM),即7.6G
  • used 表示物理内存的使用量,大约是 322M
  • free 表示空闲内存;
  • shared 表示共享内存?;
  • buff/cache 表示缓存和缓冲内存量; Linux 系统会将很多东西缓存起来以提高性能,这部分内存可以在必要时进行释放,给其他程序使用。
  • available 表示可用内存;

输出结果很容易理解。 Swap 这一行表示交换内存,从示例中的数字可以看到,基本上没使用到交换内存。

2. 查看 /proc/meminfo

另一种方法是读取 /proc/meminfo 文件。 我们知道, /proc 目录下都是虚拟文件,包含内核以及操作系统相关的动态信息。

$ cat /proc/meminfo
MemTotal:        8010408 kB
MemFree:          323424 kB
MemAvailable:    6956280 kB
Buffers:          719620 kB
Cached:          5817644 kB
SwapCached:          132 kB
Active:          5415824 kB
Inactive:        1369528 kB
Active(anon):     385660 kB
Inactive(anon):   249292 kB
Active(file):    5030164 kB
Inactive(file):  1120236 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194304 kB
SwapFree:        4193580 kB
Dirty:                60 kB
Writeback:             0 kB
AnonPages:        247888 kB
Mapped:            61728 kB
Shmem:            386864 kB
Slab:             818320 kB
SReclaimable:     788436 kB
SUnreclaim:        29884 kB
KernelStack:        2848 kB
PageTables:         5780 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     8199508 kB
Committed_AS:     942596 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       22528 kB
VmallocChunk:   34359707388 kB
HardwareCorrupted:     0 kB
AnonHugePages:     88064 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      176000 kB
DirectMap2M:     6115328 kB
DirectMap1G:     4194304 kB

重点关注这些数据:

  • MemTotal, 总内存
  • MemFree, 空闲内存
  • MemAvailable, 可用内存
  • Buffers, 缓冲
  • Cached, 缓存
  • SwapTotal, 交换内存
  • SwapFree, 空闲交换内存

提供的信息和 free 命令看到的差不多。

3. 使用 vmstat 命令

使用 vmstat -s 命令和选项, 可以对内存使用情况进行统计, 类似于 /proc/meminfo

示例如下:

$ vmstat -s
      8010408 K total memory
       344016 K used memory
      5444384 K active memory
      1380052 K inactive memory
       283468 K free memory
       719668 K buffer memory
      6663256 K swap cache
      4194304 K total swap
          724 K used swap
      4193580 K free swap
    132859985 non-nice user cpu ticks
        29816 nice user cpu ticks
     37600986 system cpu ticks
   6643195204 idle cpu ticks
      2721822 IO-wait cpu ticks
            0 IRQ cpu ticks
       592418 softirq cpu ticks
            0 stolen cpu ticks
     13092214 pages paged in
    293257816 pages paged out
            8 pages swapped in
         1365 pages swapped out
   3396492150 interrupts
   1327657196 CPU context switches
   1548248091 boot time
      8811556 forks

最前面的几行,显示了内存总量,使用量,以及空闲内存等信息。

4. 使用 top 命令

top 命令一般用于查看进程的CPU和内存使用情况;当然也会报告内存总量,以及内存使用情况,所以可用来监控物理内存的使用情况。
在输出信息的顶部展示了汇总信息。

示例输出:

top - 15:20:30 up  6:57,  5 users,  load average: 0.64, 0.44, 0.33
Tasks: 265 total,   1 running, 263 sleeping,   0 stopped,   1 zombie
%Cpu(s):  7.8 us,  2.4 sy,  0.0 ni, 88.9 id,  0.9 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   8167848 total,  6642360 used,  1525488 free,  1026876 buffers
KiB Swap:  1998844 total,        0 used,  1998844 free,  2138148 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                                                 
 2986 enlighte  20   0  584m  42m  26m S  14.3  0.5   0:44.27 yakuake                                                                                 
 1305 root      20   0  448m  68m  39m S   5.0  0.9   3:33.98 Xorg                                                                                    
 7701 enlighte  20   0  424m  17m  10m S   4.0  0.2   0:00.12 kio_thumbnail

各种操作系统提供的参数略有不同,一般来说都可以根据CPU和内存来排序。

例如:

# CentOS
top -o %MEM
top -o %CPU

# mac
top -o mem
top -o cpu

碰到不清楚的,请使用 top -h 查看帮助信息。

重点关注顶部的 KiB MemKiB Swap 这两行。 表示内存的总量、使用量,以及可用量。
buffer 和 cache 部分,和 free 命令展示的差不多。

5. htop 命令

top 命令类似, 但 htop 还展示了其他的各种信息, 而且支持彩色显示。

在这里插入图片描述

顶部的消息显示了CPU使用率, 以及RAM和交换内存的使用情况。

如果没安装,可以使用类似的命令:

yum install htop -y

二、 查看物理内存信息

想要查看物理内存的硬件信息,可以使用 demidecode 命令。
这个命令会输出物理内存相关的信息。

$ dmidecode -t 17

# dmidecode 3.0
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.

Handle 0x1100, DMI type 17, 40 bytes
Memory Device
	Array Handle: 0x1000
	Error Information Handle: Not Provided
	Total Width: Unknown
	Data Width: Unknown
	Size: 8192 MB
	Form Factor: DIMM
	Set: None
	Locator: DIMM 0
	Bank Locator: Not Specified
	Type: RAM
	Type Detail: Other
	Speed: Unknown
	Manufacturer: Alibaba Cloud
	Serial Number: Not Specified
	Asset Tag: Not Specified
	Part Number: Not Specified
	Rank: Unknown
	Configured Clock Speed: Unknown
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: Unknown

dmidecode -t 17 展示的信息包括 内存大小, 类型,带宽等信息。 当然,因为示例中使用的是虚拟机,所以有的信息是不可用的。

如果不加 -t 参数,则展示所有类型的硬件信息。 也可以指定其他 -t 参数来查看对应的硬件信息。

小结

本文介绍的命令都可以在shell终端上执行,不需要图形界面来展示。
如果使用带有图形界面的Linux桌面系统,则使用图形工具会更直观。 一般来说图形桌面都会提供对应的系统监控工具。 输出容易理解的 cpu, 物理内存, 交换内存, 网络带宽等资源的使用信息。

相关链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux系统命令 - 查看内存使用情况 的相关文章

  • 在 Ubuntu 16.04 上找不到 printf.c

    我最近切换到Ubuntu 16 04 我在用vscode作为 Ubuntu 上的 IDE 我配置了其他语言 但我无法做到这一点C C 我创建c cpp properties json launch json tasks json 当我开始编
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 如何将设备屏幕位置转换为发送事件位置?

    我知道关于input tap x yshell 命令 但是 我想了解如何 使用执行单击sendevent命令 我能够通过以下命令实现它 sendevent dev input event5 3 53 X sendevent dev inpu
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 如何使用我在 github 中发布的 bash 脚本执行 chsh?

    我有一个要点 我总是用它来在新服务器上安装我需要的软件包 http gist github com 4372049 http gist github com 4372049 我需要做的就是通过 ssh 在新服务器中输入以下内容 bash c
  • 仅当重复行与模式匹配时才删除它们

    这个问题 https stackoverflow com questions 1444406 how can i delete duplicate lines in a file in unix有一个很好的答案说你可以使用awk seen
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • 在 bash 中使用单个命令为 shell 变量分配默认值

    我对 bash 3 00 shell 脚本中的变量进行了大量测试 如果未设置变量 则它会分配默认值 例如 if z VARIABLE then FOO default else FOO VARIABLE fi 我似乎记得有一些语法可以在一行

随机推荐

  • 浅析MySQL中concat以及group_concat的使用

    吃水不忘挖井人系列 原帖地址 浅析MySQL中concat以及group concat的使用 说明 本文中使用的例子均在下面的数据库表tt2下执行 一 concat 函数 1 功能 将多个字符串连接成一个字符串 2 语法 concat st
  • 论文答辩的二十个问题

    20 defense questions The most common question you may be asked is what you learned from the study you have done You have
  • Java工程师面试必备900+ 道 Java面试题及答案整理(建议收藏)

    很多人都说八股文没用 这里聊一下我对八股文的一些看法吧 一个知识点 你能把使用以及原理说出来 我称之为八股 但是你能把底层关联以及业务使用 优化历程也能搞清楚 我称之为能力 这两点无疑是现在面试都会考察的 按照国内的 IT 求职环境来看 互
  • 11个学习CSS实用工具和资源

    最近业内充斥着关于Sass的文章 教程 甚至在SitePoint这里 我们已经发布比以往更多内容的Sass工具 但是 我们并没有忘记我们的根 CSS 对于那些仍然在学习CSS 或者想要去一点点深入到具体的CSS主题的朋友 我想我会将最近几个
  • 闲鱼项目靠谱吗?小白入坑全指南!

    越来越多的店开始利用互联网来进行自主创业 今天很荣幸的可以为大家分享我自己的创业故事 我是一名汽车维修工人 已经干了有两年多 也晋升到了中工 资薪福利什么的都比较满意 但因为家境不算富裕 加上爸妈身体并不是很好 所以我不得不把自己的全部工资
  • 《Ansible Playbook扩展:任务间流程控制之任务暂停》

    一 wait for模块 wait for是用来在规定时间内检测 状态是否为所期望的状态 才会执行后续的操作 常见使用场景 1 等待直到监听的端口 up 起来 2 等待文件存在或不存在时 再继续执行 3 等待匹配字符串出现在文件中后 再继续
  • I - Tree Gym - 104385I(基础操作性质)

    这题呢 就是知道异或的性质就可以了 一 相同为0 不同为1 即 1 1 0 0 0 0 1 0 1 二 1 交换律 A B B A 2 结合律 A B C A B C 3 自反性 A B B A 由结合律可推 A B B A B B A 0
  • Opencv3.3版本以上使用CNN模型实现年龄和性别检测

    环境 1 安装opencv3 3以上 因为3 3以上才有dnn模块 目前opencv已经更新到opencv4 0 0 alpha 下面网站对更新日志一目了然 https github com opencv opencv wiki Chang
  • vue3.0 + Ts v-model在自定义组件上的使用教程

    前言 之前在vue2 0版本介绍v model在组件上的使用教程时详细介绍了vue3 0 v model相比于2 0的变化 本篇文章主要介绍一下vue3 0的使用教程 如何使用 第一步 index vue作为父组件 这里采用了vant框架
  • Centos7.9 安装Openstack Train版 详细手把手每一步搭建

    1 升级内核 先准备两台机器 我这里准备的是2台 32G 16核 500G硬盘的服务器 一台作为master 一台作为计算节点机器 master 机器有两个网卡 一个是ip 10 10 162 38 另一个网卡和10 10 162 38是同
  • 攻防演练场景中面临的常见加密威胁-SSH隧道工具sish

    工具介绍 sish是一个开源的反向代理工具 通过在公共的端点和本地运行的服务器之间建立一个安全的ssh通道 该工具的功能是将内网端口暴露在公网上 该工具部署在公网中 本地无需安装 无需注册 支持转发的协议有HTTP S WS S TCP 优
  • python中%符号详解

    python中 符号详解 a 星期几的简写 A 星期几的全称 b 月分的简写 B 月份的全称 c 标准的日期的时间串 C 年份的后两位数字 d 十进制表示的每月的第几天 D 月 天 年 e 在两字符域中 十进制表示的每月的第几天 F 年 月
  • Webpack之image

    CSS中的图片处理 直接从外部引入css的背景等图片是打包不出来的 需要用到url loader和file loader file loader 解决引用路径的问题 file loader可以解析项目中的url引入 不仅限于css 根据我们
  • 双指针的实践

    一 双指针的一般解法 双指针指的是在遍历对象的过程中 不是普通的使用单个指针进行访问 而是使用两个相同方向 快慢指针 或者相反方向 对撞指针 的指针进行扫描 从而达到相应的目的 它只是一种算法技巧 二 26题 删除有序数组中的重复项 2 1
  • OpenGL实现通用GPU计算概述

    可能比较早一点做GPU计算的开发人员会对OpenGL做通用GPU计算 随着GPU计算技术的兴起 越来越多的技术出现 比如OpenCL CUDA OpenAcc等 这些都是专门用来做并行计算的标准或者说接口 OpenGL用来做通用GPU计算主
  • Lora模块的定向传输

    原子哥的 两个LORA模块工作在一般模式定向传输数据的测试方法 使用上位机测试 OpenEdv 开源电子网 1 准备两LORA模块和两USB转TTL电路 2 ATK LORA 01配置软件 模块A占用COM10 模块B占用COM22 端口号
  • vue3实现mapbox鼠标定位显示经纬度

    vue3实现鼠标定位显示经纬度 leafletMap on mousemove function e var location leafletMap queryRenderedFeatures e point document getEle
  • c#基础知识---匿名方法

    我们已经提到过 委托是用于引用与其具有相同标签的方法 换句话说 您可以使用委托对象调用可由委托引用的方法 匿名方法 Anonymous methods 提供了一种传递代码块作为委托参数的技术 匿名方法是没有名称只有主体的方法 在匿名方法中您
  • Linux学习笔记——Linux命令行使用技巧

    目录 一 前言 二 Linux是什么 三 关于shell的使用 1 shell命令行提示符 2 shell打开方式 1 右键打开 此方式打开的shell在当前用户的桌面上 2 Application gt System tools gt t
  • Linux系统命令 - 查看内存使用情况

    一 查看内存使用情况 在Linux系统中 大部分操作都通过命令行来完成 因为大部分情况下不开启图形界面 在服务器环境 则只能通过shell执行操作 下面介绍查看内存使用情况的相关命令 包括物理内存 RAM 和交换内存 swap 我们经常需要