我正在寻找一种方法来了解 Linux 操作系统正在使用的内存大小(我不担心其他应用程序的内存大小)。
我正在使用 Ubuntu 发行版(Ubuntu 15.10)。
答案1
操作系统内存 v. Ubuntu 内存 v. 内核内存
您要求知道“Linux 操作系统”使用了多少内存(而不是“应用程序”使用了多少内存)。 “Linux”只是一个内核(尽管不是一个整体的内核;内核模块有助于有效占用空间)。最终用户视为“操作系统”的许多东西并不是内核的一部分,而是更大的 Ubuntu 发行版的一部分。在典型的桌面安装中,这包括窗口系统(通常为 xorg)、窗口管理器和桌面环境(默认情况下 Ubuntu 上的 Unity,其他包括 Gnome 和 KDE),以及执行基本操作的一整套其他进程,以便您可以与您的系统进行交互。
对于最终用户来说,“应用程序”一词通常意味着“Web 浏览器”、“电子表格”等。我将这些称为“用户应用程序”。
有一些方法可以估计你的内核大小,但是如果您希望估计 Ubuntu 使用了多少内存,则必须识别并添加所有相关进程(xorg、init 等)。另一种选择是使用类似top
没有其他用户应用程序运行时的方法,并减去top
终端仿真器和 shell 使用的内存。
总内存
有很多方法可以查看 Linux 系统的内存使用情况,其中一些方法比其他方法更精确。 “使用中的内存”也有多种定义。也就是说,对于大多数非技术用途,顶部(1)会很好地完成工作:
top - 17:23:50 up 7 days, 19:15, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 172 total, 2 running, 170 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 0.1 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2049992 total, 1735420 used, 314572 free, 372420 buffers
KiB Swap: 2095100 total, 192 used, 2094908 free. 679116 cached Mem
作为额外的好处,因为下一个问题通常是“什么正在耗尽内存吗?”,下一行显示正在运行的进程以及(除其他外)它们正在使用多少虚拟内存。
请注意,Linux 上的“空闲”内存通常是一个非常小的数字,这是一个好东西。空闲内存本质上是一种浪费的资源,因此 Linux 将其分配给各种缓存用途。如果应用程序需要该内存,它仍然可用;与此同时,Linux 正在充分利用它。
答案2
基本内核vmlinuz
是/boot
. “z”代表“使用 z 库压缩”。不幸的是,我不知道如何解压缩它以查看解压后的大小。
另外,正如 @type_outcast 所提到的,内核使用模块来访问硬件并处理一些其他功能。这些可以在 下找到/lib/modules/<version>
。您可以使用 确定加载哪些模块lsmod
。该列表包含一Size
列,其中包含每个模块的大小。
因此,如果您想知道内核正在使用的大小,这将是一个相对接近的近似值。
另外,你还有内存文件。尝试cat /proc/meminfo
。这将为您提供两个附加参数:KernelStack
和Buffers
。
此外,您还可以从各个进程获取信息,例如进程1。这是init进程,它可以被认为是内核的一部分。其信息可以在下面找到/proc/1
。内存使用情况显示了一些数字,它们是解释如下。您可以使用ps -ef | less
并查看该列来找到此类低级进程的列表CMD
。括号“[...name...]”之间出现的内容确实是低级条目(与模块相关的条目,它实际上可能是模块创建的任务,但我不确定这一点。)
me $ cat /proc/1
46511 1381 790 348 0 37483 0
请注意,这些数字的测量单位是页面。在大多数情况下,这意味着您需要将该数字乘以 4096 以获得以字节为单位的大小。
/proc/[pid]/statm
Provides information about memory usage, measured in pages.
The columns are:
size (1) total program size
(same as VmSize in /proc/[pid]/status)
resident (2) resident set size
(same as VmRSS in /proc/[pid]/status)
shared (3) number of resident shared pages (i.e., backed by a file)
(same as RssFile+RssShmem in /proc/[pid]/status)
text (4) text (code)
lib (5) library (unused since Linux 2.6; always 0)
data (6) data + stack
dt (7) dirty pages (unused since Linux 2.6; always 0)
如果您对各种其他流程感兴趣,所有数据都将在 下提供/proc
。