了解 Linux 操作系统使用了多少内存的方法

了解 Linux 操作系统使用了多少内存的方法

我正在寻找一种方法来了解 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。这将为您提供两个附加参数:KernelStackBuffers

此外,您还可以从各个进程获取信息,例如进程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

相关内容