内存利用率

有多个命令提供有关系统内存利用率的相关信息。最流行的是free 和pmap。

free命令

free 命令显示可用的物理内存量,其中包括总物理内存量、已用物理内存量、可用物理内存量。它也为交换空间显示同样的统计信息,还显示内核使用的内存缓存大小和缓冲区的大小。图7-5 显示了在中等负荷的操作系统上运行free 命令的一个例子。

内存利用率_开机启动 
图7-5:free命令

图7-5 是来自于Ubuntu 系统的free 命令的输出结果,其中的shared 列已经废弃了。

switch 选项将命令设置成轮询模式,使统计信息根据提供的时间间隔秒数定期进行更新。例如,每隔5 秒轮询内存一次的命令是free -t -s 5。

pmap命令

pmap 命令提供一个进程所使用的内存的详细映射。要使用此命令,必须先找到你想研究的进程的ID。你可以通过ps 命令得到进程的ID,或者,如果寻找消耗大量CPU 时间的进程,甚至可以通过top 命令获得进程的ID。

也可以通过在命令行中列出进程ID 列表来获得多个进程的内存映射。例如,pmap12578 12579 命令将会显示进程ID 为12578 和12579 的进程的内存映射。

pmap 命令的输出结果显示了所有内存地址的详细信息,且在报告产生的瞬间显示进程使用的内存的大小。它还显示了启动进程的命令,其中包括完整的路径和参数,可以 用于确定进程是从什么地方开始的和进程使用了哪些选项。当你试图去弄清楚进程为什么行为异常时,会惊奇地发现这个命令是多么方便。该显示也展示内存块的模 式(访问权限),这在诊断进程间的问题时非常有用。图7-6 和图7-7 显示了在中等负荷的系统上运行mysqld 进程的一个例子。

内存利用率_数据_02 
图7-6:pmap命令——第一部分
内存利用率_开机启动_03 
图7-7:pmap命令——第二部分

请注意,图中的列表显示了设备输出格式(通过在启动时添加-d 参数来选择),也显示了内存在哪里被映射的或使用的。pmap 命令可以用于诊断一个特殊的进程为什么消耗非常多的内存和诊断哪个部分(例如一个库)消耗内存最多。

图7-7 显示了pmap 命令输出的最后一行,这显示了一些有用的概要信息。

最后一行显示了有多少内存被映射到文件、私有内存空间量和与其他进程共享的内存量。这些信息也许是解决内存分配和共享问题的关键数据。

还有一些其他显示内存利用率的命令和实用工具(例如dmesh,可以在开机启动时显示信息),请参看有关你的操作系统的性能调优方面的资料。