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

2023-11-02

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

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

1. 使用 free 命令

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

[root@centos ~]# free -m 
              total        used        free      shared  buff/cache   available
Mem:           1999         746         135          22        1117        1059
Swap:          2047           0        2047
[root@centos ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           2.0G        746M        135M         22M        1.1G        1.0G
Swap:          2.0G        264K        2.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 目录下都是虚拟文件,包含内核以及操作系统相关的动态信息。

[root@centos ~]# cat /proc/meminfo
MemTotal:        2047268 kB
MemFree:          137532 kB
MemAvailable:    1084908 kB
Buffers:              96 kB
Cached:          1059956 kB
SwapCached:           32 kB
Active:          1081592 kB
Inactive:         476656 kB
Active(anon):     441580 kB
Inactive(anon):    80068 kB
Active(file):     640012 kB
Inactive(file):   396588 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2096884 kB
Dirty:                24 kB
Writeback:             0 kB
AnonPages:        498228 kB
Mapped:           159592 kB
Shmem:             23452 kB
Slab:             144872 kB
SReclaimable:      85164 kB
SUnreclaim:        59708 kB
KernelStack:        7664 kB
PageTables:        35964 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3120780 kB
Committed_AS:    3968652 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      292512 kB
VmallocChunk:   34358947836 kB
Percpu:              188 kB
HardwareCorrupted:     0 kB
AnonHugePages:    172032 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       92096 kB
DirectMap2M:     2004992 kB
DirectMap1G:           0 kB

重点关注这些数据:

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

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

3. 使用 vmstat 命令

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

示例如下:

[root@centos ~]# vmstat -s
      2047268 K total memory
       764736 K used memory
      1081916 K active memory
       476624 K inactive memory
       137292 K free memory
           96 K buffer memory
      1145144 K swap cache
      2097148 K total swap
          264 K used swap
      2096884 K free swap
         5536 non-nice user cpu ticks
          786 nice user cpu ticks
         5935 system cpu ticks
       255784 idle cpu ticks
        10240 IO-wait cpu ticks
            0 IRQ cpu ticks
          447 softirq cpu ticks
            0 stolen cpu ticks
       994434 pages paged in
       563680 pages paged out
            0 pages swapped in
           14 pages swapped out
       518532 interrupts
      1039207 CPU context switches
   1656309212 boot time
        59682 forks

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

4. 使用 top 命令

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

示例输出:

[root@centos ~]# top
top - 14:41:28 up 47 min,  3 users,  load average: 0.00, 0.01, 0.09
Tasks: 205 total,   3 running, 202 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 25.0 sy,  0.0 ni, 75.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2047268 total,   136552 free,   765188 used,  1145528 buff/cache
KiB Swap:  2097148 total,  2096884 free,      264 used.  1084248 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                 
    1 root      20   0  128540   7148   4220 S  0.0  0.3   0:02.66 systemd                                                                 
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                
    4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                            
    6 root      20   0       0      0      0 S  0.0  0.0   0:04.40 ksoftirqd/0                                                             
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                                                             
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                                                                  
    9 root      20   0       0      0      0 R  0.0  0.0   0:02.43 rcu_sched                                                               
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain                                                           
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.26 watchdog/0                                                              
   13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                                                               
   14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                                                                   
   15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 khungtaskd                                                              
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                                                               
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd                                                             
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                  
   19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                  
   20 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                  
   21 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd                                                                 
   22 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md                                                                      
   23 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 edac-poller                                                             
   24 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 watchdogd                                                               
   30 root      20   0       0      0      0 S  0.0  0.0   0:00.10 kswapd0                                                                 
   31 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd                                                                    
   32 root      39  19       0      0      0 S  0.0  0.0   0:00.12 khugepaged                                                              
   33 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 crypto                                                                  
   41 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kthrotld                                                                
   43 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kmpath_rdacd  

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

例如:

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

# mac
top -o mem
top -o cpu


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

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

二、 查看物理内存信息

想要查看物理内存的硬件信息,可以使用 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 参数来查看对应的硬件信息。

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

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

  • 如何使用 echo 写入非 ASCII 字符?

    如何写非ASCII http en wikipedia org wiki ASCII使用 echo 的字符 是否有转义序列 例如 012或类似的东西 我想使用以下方法将 ASCII 字符附加到文件中 echo gt gt file 如果您关
  • 从c调用汇编函数

    我试图从 c 调用汇编函数 但我不断收到错误 text globl integrate type integrate function integrate push ebp mov esp ebp mov 0 edi start loop
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 如何确定代码是否在信号处理程序上下文中运行?

    我刚刚发现有人正在从信号处理程序调用我编写的绝对不是异步信号安全的函数 所以 现在我很好奇 如何避免这种情况再次发生 我希望能够轻松确定我的代码是否在信号处理程序上下文中运行 语言是 C 但该解决方案不适用于任何语言吗 int myfunc
  • 如何从 Linux 内核模块获取使用计数?

    我对正在开发的内核模块的使用计数有疑问 我想打印它以进行调试 如何从模块代码中获取它 有问题的内核版本 Linux 2 6 32 module refcount http lxr linux no linux v2 6 34 1 inclu
  • 在 Docker 容器中以主机用户身份运行

    在我的团队中 我们在进行开发时使用 Docker 容器在本地运行我们的网站应用程序 假设我正在开发 Flask 应用程序app py具有依赖关系requirements txt 工作流程大致如下 I am robin and I am in
  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • 在 debian wheezy amd64 上安装 ia32-libs

    我正在使用 Debian 7 喘息 amd64 uname a Linux tzwm debian 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 我想安装ia32 libs在我的
  • 可以作为命令行参数传递多少数据?

    在 Linux 下生成进程时可以发送多少字节作为命令行参数 gahooa 推荐了一篇好文章http www in ulm de mascheck various argmax http www in ulm de mascheck vari
  • SMP 上如何处理中断?

    SMP 对称多处理器 多核 机器上如何处理中断 内存管理单元是只有一个还是多个 假设两个线程 A 和 B 运行在不同的内核上 同时 访问页表中不存在的内存页面 在这种情况下 将会出现页面错误 并从内存中引入新页面 将会发生的事件的顺序是什么
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • 套接字发送调用被阻塞很长时间

    我每 10 秒在套接字上发送 2 个字节的应用程序数据 阻塞 但发送调用在下面的最后一个实例中被阻塞超过 40 秒 2012 06 13 12 02 46 653417 信息 发送前 2012 06 13 12 02 46 653457 信
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa

随机推荐