Linux系统下分析内存使用情况的管理工具
有许多办法可以获得Linux系统上所安装内存的信息,并查看其中有多少内存正在使用中。有的命令会展示大量的细节,而有的命令则提供了简洁(但不一定容易理解)的结果。在这篇文章中将介绍一些更有用的工具,帮助你检查内存及其使用情况。 |
不过,在进一步讨论之前,我们要先回顾一些基本知识。物理内存和虚拟内存是不一样的,后者包括配置为交换区的磁盘空间。交换区可能包括为此用途预留的分区,或者那些为添加到新的交换区而创建的文件——当创建一个新的分区并不实际时。有些Linux命令提供了这两方面的信息。
交换区通过提供磁盘空间来扩展内存,这些磁盘空间可用于存放那些物理内存已满时移动到磁盘的非活动页。
在内存管理中起到作用的一个文件是/proc/kcore,这个文件看起来像一个普通的(虽然非常大)文件,但是它根本不占用磁盘空间。就像/proc中的所有文件一样,它是一个虚拟文件。
有趣的是,下面查询的两个系统没有安装相同数量的内存,但是/proc/kcore
的大小在这两个系统上是相同的。第一个系统安装了4 GB内存,第二个有6 GB。
该文件的大小表示可用虚拟内存的数量(可能加上4K),这个解释可能站不住脚。这个数字表明这些系统上的虚拟内存是128 TB!这个数字代表64位系统能够寻址的内存数量,而不是系统上的可用内存数量。通过以下方式进行计算,再加上4 K,就可以推导出这个数字:
另一个更人性化的检查内存的命令是free
命令,它可以提供一个易于理解的内存报告。
使用-g
选项,free
以gb为单位报告这些值。
使用-t
选项,free
显示的值与没有选项时显示的值相同(不要混淆-t
和tb
),但是在输出的底部添加了一行。
当然,你也可以同时使用这两个选项。
如果你希望得到“这个系统上安装了多少RAM”的答案,那么你可能会对这个报告感到失望,这与上面示例中显示的具有6GB RAM的系统相同。并不表示这个报告是错的,而是系统对它所拥有的内存的看法。free命令还提供了每X秒(在下面的示例中为10秒)更新一次结果的选项。
使用-l, free命令可以提供高内存使用量和低内存使用量。
查看内存的另一个办法是/proc/meminfo文件。与/proc/kcore
类似,这是一个虚拟文件,它提供了一个有用的报告,显示安装了多少内存、空闲内存和可用内存。显然,空闲和可用并不是一个意思。MemFree
代表未使用的RAM
,MemAvailable
是对启动新应用程序可用内存的估计。
DirectMap
条目将内存上的信息分解成类别。
DirectMap4k
表示映射到标准4k页面的内存量,而DirectMap2M表示映射到2MB页面的内存量。
getconf
命令将提供的信息往往比较多。
使用如下所示的命令可以将输出缩减为特定的内容,你能够获得与上面的一些命令相同的信息。
该命令通过将输出的第一行和最后一行中的值相乘来计算内存,如下所示:
独立地进行计算,我们就可以看到这个值是如何推导出来的。
另一个输出非常容易理解的命令是top
,top
输出前5行中的数字显示了内存的使用情况。
最后这个命令将以简洁的方式回答“这个系统上安装了多少RAM ?
根据您希望看到的详细信息的多少,Linux系统提供了许多选项,可以查看系统上安装了多少内存,以及使用了多少内存和有多少可用内存。