今天小编给大家分享一下linux mem指的是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
在linux中,mem是指物理内存,是由于安装内存条而获得的临时储存空间,主要作用是在计算机运行时为操作系统和各种程序提供临时储存。linux系统的物理内存被划分为许多相同大小的部分,也称作内存页;内存页的大小取决于CPU的架构和操作系统的配置,一般为4KB。
linux mem是什么
mem 是物理内存,是指由于安装内存条而获得的临时储存空间。 主要作用是在计算机运行时为操作系统和各种程序提供临时储存。
当物理内存即将溢出时,会将内存中不常用的内存转移到SWAP中 等到物理内存空余,并且swap的内存活跃后才转移回来
free -m
mem:表示物理内存统计
buff/cache:表示物理内存的缓存统计
swap:表示硬盘上交换分区的使用情况
系统当前真正可用的内存并不是第一行 free 标记的,他仅代表未被分配的内存
系统的物理内存被划分为许多相同大小的部分,也称作内存页。内存页的大小取决于CPU的架构和操作系统的配置,一般为4KB。物理内存的使用主要分为以下几方面:
(1)内核使用
操作系统启动时,位于/boot目录下的压缩内核文件会被加载到内存中并解压。这部分内容在系统允许期间都会常驻在内存的起始位置。
(2)slab分配器
操作系统的运行还需要更多的空间来分配给管理进程、文件描述符、socket和加载的内和模块等内容。所以内核会通过slab分配器动态分配内存。
PS:slab是Linux操作系统的一种内存分配机制。其工作是针对一些经常分配并释放的对象,如进程描述符等,这些对象的大小一般比较小,如果直接采用brk系统调用来进行分配和释放,不仅会造成大量的碎片,而且也会影响性能。而slab分配器是基于对象进行管理的,相同类型的对象归为一类(如进程描述符就是一类),每当要申请这样一个对象,slab分配器就从一个slab列表中分配一个这样大小的单元出去,而当要释放时,将其重新保存在该列表中,而不是直接返回给操作系统,从而避免这些出现内存碎片。slab分配器并不丢弃已分配的对象,而是释放并把它们保存在内存中。当以后又要请求新的对象时,就可以从内存直接获取而不用重复初始化。可以在/proc/meminfo中查看当前slab分配器中的内存大小。
(3)进程使用
除去内核使用的部分,所有的进程都需要分配物理内存页给它们的代码、数据和堆栈。进程消耗的这些物理内存被称为“驻留内存”,RSS。
(4)页缓存page cache
除去在内核和进程使用的部分,物理内存剩下的部分被称为页缓存,page cache。因为磁盘io的速度远远低于内存的访问速度,所以为了加快访问磁盘数据的速度,页缓存尽可能的保存着从磁盘读入的数据。page cache中还有一部分称为buffer,它的作用是缓存要写入到磁盘的数据。
页缓存的大小是在一直动态变化的。当系统内存充足时,页缓存会一直增大;当系统free内存不足时,这时如果有进程申请内存,操作系统会从page cache中回收内存页进行分配,如果page cache也已不足,那么系统会将当期驻留在内存中的数据置换到事先配置在磁盘上的swap空间中,然后空出来的这部分内存就可以用来分配了。这就是swap交换。
PS:出现swap交换时,数据被置换到swap空间后(swap out),该进程使用的内存量下降,在atop等监控工具中的RGROW列为负值,但这并不表示该进程释放了内存,当它需要时,这部分数据又会被换入到内存中(swap in)。另外, swap交换往往会带来磁盘IO的大量消耗,严重影响到系统正常的磁盘io。出现大量的swap交换说明系统已经快要不行了,需要重点关注。
查看 Linux 物理内存的方法
方法-1:使用 free 命令
free 显示系统中空闲和已用的物理内存和交换内存的总量,以及内核使用的缓冲区和缓存。它通过解析 /proc/meminfo 来收集信息。
建议阅读: free – 在 Linux 系统中检查内存使用情况统计(空闲和已用)的标准命令
$ free -m total used free shared buff/cache available Mem: 1993 1681 82 81 228 153 Swap: 12689 1213 11475 $ free -g total used free shared buff/cache available Mem: 1 1 0 0 0 0 Swap: 12 1 11
方法-2:使用 /proc/meminfo 文件
/proc/meminfo 是一个虚拟文本文件,它包含有关系统 RAM 使用情况的大量有价值的信息。
它报告系统上的空闲和已用内存(物理和交换)的数量。
$ grep MemTotal /proc/meminfo MemTotal: 2041396 kB $ grep MemTotal /proc/meminfo | awk '{print $2 / 1024}' 1993.55 $ grep MemTotal /proc/meminfo | awk '{print $2 / 1024 / 1024}' 1.94683
方法-3:使用 top 命令
top 命令是 Linux 中监视实时系统进程的基本命令之一。它显示系统信息和运行的进程信息,如正常运行时间、平均负载、正在运行的任务、登录的用户数、CPU 数量和 CPU 利用率,以及内存和交换信息。运行 top 命令,然后按下 E 来使内存利用率以 MB 为单位显示。
建议阅读: TOP 命令示例监视服务器性能
$ top top - 14:38:36 up 1:59, 1 user, load average: 1.83, 1.60, 1.52 Tasks: 223 total, 2 running, 221 sleeping, 0 stopped, 0 zombie %Cpu(s): 48.6 us, 11.2 sy, 0.0 ni, 39.3 id, 0.3 wa, 0.0 hi, 0.5 si, 0.0 st MiB Mem : 1993.551 total, 94.184 free, 1647.367 used, 252.000 buff/cache MiB Swap: 12689.58+total, 11196.83+free, 1492.750 used. 306.465 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9908 daygeek 20 0 2971440 649324 39700 S 55.8 31.8 11:45.74 Web Content 21942 daygeek 20 0 2013760 308700 69272 S 35.0 15.1 4:13.75 Web Content 4782 daygeek 20 0 3687116 227336 39156 R 14.5 11.1 16:47.45 gnome-shell
方法-4:使用 vmstat 命令
vmstat 是一个漂亮的标准工具,它报告 Linux 系统的虚拟内存统计信息。vmstat 报告有关进程、内存、分页、块 IO、陷阱和 CPU 活动的信息。它有助于 Linux 管理员在故障检修时识别系统瓶颈。
建议阅读: vmstat – 一个报告虚拟内存统计信息的标准且漂亮的工具
$ vmstat -s | grep "total memory" 2041396 K total memory $ vmstat -s -S M | egrep -ie 'total memory' 1993 M total memory $ vmstat -s | awk '{print $1 / 1024 / 1024}' | head -1 1.94683
方法-5:使用 nmon 命令
nmon 是另一个很棒的工具,用于在 Linux 终端上监视各种系统资源,如 CPU、内存、网络、磁盘、文件系统、NFS、top 进程、Power 的微分区和资源(Linux 版本和处理器)。
只需按下 m 键,即可查看内存利用率统计数据(缓存、活动、非活动、缓冲、空闲,以 MB 和百分比为单位)。
建议阅读: nmon – Linux 中一个监视系统资源的漂亮的工具
┌nmon─14g──────[H for help]───Hostname=2daygeek──Refresh= 2secs ───07:24.44─────────────────┐ │ Memory Stats ─────────────────────────────────────────────────────────────────────────────│ │ RAM High Low Swap Page Size=4 KB │ │ Total MB 32079.5 -0.0 -0.0 20479.0 │ │ Free MB 11205.0 -0.0 -0.0 20479.0 │ │ Free Percent 34.9% 100.0% 100.0% 100.0% │ │ MB MB MB │ │ Cached= 19763.4 Active= 9617.7 │ │ Buffers= 172.5 Swapcached= 0.0 Inactive = 10339.6 │ │ Dirty = 0.0 Writeback = 0.0 Mapped = 11.0 │ │ Slab = 636.6 Commit_AS = 118.2 PageTables= 3.5 │ │───────────────────────────────────────────────────────────────────────────────────────────│ │ │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────────────────────────────┘
方法-6:使用 dmidecode 命令
dmidecode 是一个读取计算机 DMI 表内容的工具,它以人类可读的格式显示系统硬件信息。(DMI 意即桌面管理接口,也有人说是读取的是 SMBIOS —— 系统管理 BIOS)
此表包含系统硬件组件的描述,以及其它有用信息,如序列号、制造商信息、发布日期和 BIOS 修改等。
建议阅读: Dmidecode – 获取 Linux 系统硬件信息的简便方法
# dmidecode -t memory | grep Size: Size: 8192 MB Size: No Module Installed Size: No Module Installed Size: 8192 MB Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: 8192 MB Size: No Module Installed Size: No Module Installed Size: 8192 MB Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed Size: No Module Installed
只打印已安装的 RAM 模块。
# dmidecode -t memory | grep Size: | grep -v "No Module Installed" Size: 8192 MB Size: 8192 MB Size: 8192 MB Size: 8192 MB
汇总所有已安装的 RAM 模块。
# dmidecode -t memory | grep Size: | grep -v "No Module Installed" | awk '{sum+=$2}END{print sum}' 32768
方法-7:使用 hwinfo 命令
hwinfo 意即硬件信息,它是另一个很棒的实用工具,用于探测系统中存在的硬件,并以人类可读的格式显示有关各种硬件组件的详细信息。
它报告有关 CPU、RAM、键盘、鼠标、图形卡、声音、存储、网络接口、磁盘、分区、BIOS 和网桥等的信息。
建议阅读: hwinfo(硬件信息)– 一个在 Linux 系统上检测系统硬件信息的好工具
$ hwinfo --memory 01: None 00.0: 10102 Main Memory [Created at memory.74] Unique ID: rdCR.CxwsZFjVASF Hardware Class: memory Model: "Main Memory" Memory Range: 0x00000000-0x7a4abfff (rw) Memory Size: 1 GB + 896 MB Config Status: cfg=new, avail=yes, need=no, active=unknown
方法-8:使用 lshw 命令
lshw(代表 Hardware Lister)是一个小巧的工具,可以生成机器上各种硬件组件的详细报告,如内存配置、固件版本、主板配置、CPU 版本和速度、缓存配置、USB、网卡、显卡、多媒体、打印机、总线速度等。
它通过读取 /proc 目录和 DMI 表中的各种文件来生成硬件信息。
建议阅读: LSHW (Hardware Lister) – 一个在 Linux 上获取硬件信息的好工具
$ sudo lshw -short -class memory [sudo] password for daygeek: H/W path Device Class Description ================================================== /0/0 memory 128KiB BIOS /0/1 memory 1993MiB System memory
方法-9:使用 inxi 命令
inxi 是一个很棒的工具,它可以检查 Linux 上的硬件信息,并提供了大量的选项来获取 Linux 系统上的所有硬件信息,这些特性是我在 Linux 上的其它工具中从未发现的。它是从 locsmif 编写的古老的但至今看来都异常灵活的 infobash 演化而来的。
inxi 是一个脚本,它可以快速显示系统硬件、CPU、驱动程序、Xorg、桌面、内核、GCC 版本、进程、RAM 使用情况以及各种其它有用的信息,还可以用于论坛技术支持和调试工具。
建议阅读: inxi – 一个检查 Linux 上硬件信息的好工具
$ inxi -F | grep "Memory" Info: Processes: 234 Uptime: 3:10 Memory: 1497.3/1993.6MB Client: Shell (bash) inxi: 2.3.37
方法-10:使用 screenfetch 命令
screenfetch 是一个 bash 脚本。它将自动检测你的发行版,并在右侧显示该发行版标识的 ASCII 艺术版本和一些有价值的信息。
建议阅读: ScreenFetch – 以 ASCII 艺术标志在终端显示 Linux 系统信息
$ screenfetch ./+o+- daygeek@ubuntu yyyyy- -yyyyyy+ OS: Ubuntu 17.10 artful ://+//////-yyyyyyo Kernel: x86_64 Linux 4.13.0-37-generic .++ .:/++++++/-.+sss/` Uptime: 44m .:++o: /++++++++/:--:/- Packages: 1831 o:+o+:++.`..`` `.-/oo+++++/ Shell: bash 4.4.12 .:+o:+o/. `+sssoo+/ Resolution: 1920x955 .++/+:+oo+o:` /sssooo. DE: GNOME /+++//+:`oo+o /::--:. WM: GNOME Shell +/+o+++`o++o ++////. WM Theme: Adwaita .++.o+++oo+:` /dddhhh. GTK Theme: Azure [GTK2/3] .+.o+oo:. `oddhhhh+ Icon Theme: Papirus-Dark +.++o+o``-````.:ohdhhhhh+ Font: Ubuntu 11 `:o+++ `ohhhhhhhhyo++os: CPU: Intel Core i7-6700HQ @ 2x 2.592GHz .o:`.syhhhhhhh/.oo++o` GPU: llvmpipe (LLVM 5.0, 256 bits) /osyyyyyyo++ooo+++/ RAM: 1521MiB / 1993MiB ````` +oo+++o: `oo++.
方法-11:使用 neofetch 命令
neofetch 是一个跨平台且易于使用的命令行(CLI)脚本,它收集你的 Linux 系统信息,并将其作为一张图片显示在终端上,也可以是你的发行版徽标,或者是你选择的任何 ascii 艺术。
建议阅读: Neofetch – 以 ASCII 分发标志来显示 Linux 系统信息
$ neofetch .-/+oossssoo+/-. daygeek@ubuntu `:+ssssssssssssssssss+:` -------------- -+ssssssssssssssssssyyssss+- OS: Ubuntu 17.10 x86_64 .ossssssssssssssssssdMMMNysssso. Host: VirtualBox 1.2 /ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 4.13.0-37-generic +ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 47 mins /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 1832 .ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 4.4.12 +sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 1920x955 ossyNMMMNyMMhsssssssssssssshmmmhssssssso DE: ubuntu:GNOME ossyNMMMNyMMhsssssssssssssshmmmhssssssso WM: GNOME Shell +sssshhhyNMMNyssssssssssssyNMMMysssssss+ WM Theme: Adwaita .ssssssssdMMMNhsssssssssshNMMMdssssssss. Theme: Azure [GTK3] /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ Icons: Papirus-Dark [GTK3] +sssssssssdmydMMMMMMMMddddyssssssss+ Terminal: gnome-terminal /ssssssssssshdmNNNNmyNMMMMhssssss/ CPU: Intel i7-6700HQ (2) @ 2.591GHz .ossssssssssssssssssdMMMNysssso. GPU: VirtualBox Graphics Adapter -+sssssssssssssssssyyyssss+- Memory: 1620MiB / 1993MiB `:+ssssssssssssssssss+:` .-/+oossssoo+/-.
方法-12:使用 dmesg 命令
dmesg(代表显示消息或驱动消息)是大多数类 Unix 操作系统上的命令,用于打印内核的消息缓冲区。
$ dmesg | grep "Memory" [ 0.000000] Memory: 1985916K/2096696K available (12300K kernel code, 2482K rwdata, 4000K rodata, 2372K init, 2368K bss, 110780K reserved, 0K cma-reserved) [ 0.012044] x86/mm: Memory block size: 128MB
方法-13:使用 atop 命令
atop 是一个用于 Linux 的 ASCII 全屏系统性能监视工具,它能报告所有服务器进程的活动(即使进程在间隔期间已经完成)。
它记录系统和进程活动以进行长期分析(默认情况下,日志文件保存 28 天),通过使用颜色等来突出显示过载的系统资源。它结合可选的内核模块 netatop 显示每个进程或线程的网络活动。
建议阅读: Atop – 实时监控系统性能,资源,进程和检查资源利用历史
$ atop -m ATOP - ubuntu 2018/03/31 19:34:08 ------------- 10s elapsed PRC | sys 0.47s | user 2.75s | | | #proc 219 | #trun 1 | #tslpi 802 | #tslpu 0 | #zombie 0 | clones 7 | | | #exit 4 | CPU | sys 7% | user 22% | irq 0% | | | idle 170% | wait 0% | | steal 0% | guest 0% | | curf 2.59GHz | curscal ?% | cpu | sys 3% | user 11% | irq 0% | | | idle 85% | cpu001 w 0% | | steal 0% | guest 0% | | curf 2.59GHz | curscal ?% | cpu | sys 4% | user 11% | irq 0% | | | idle 85% | cpu000 w 0% | | steal 0% | guest 0% | | curf 2.59GHz | curscal ?% | CPL | avg1 1.98 | | avg5 3.56 | avg15 3.20 | | | csw 14894 | | intr 6610 | | | numcpu 2 | | MEM | tot 1.9G | free 101.7M | cache 244.2M | dirty 0.2M | buff 6.9M | slab 92.9M | slrec 35.6M | shmem 97.8M | shrss 21.0M | shswp 3.2M | vmbal 0.0M | hptot 0.0M | hpuse 0.0M | SWP | tot 12.4G | free 11.6G | | | | | | &n