内存是 Unix/Linux 内核所管理的最为重要的资源之一,内存管理是系统管理中
非常重要也是最复杂的的部分。系统管理员需要掌握内存管理的基本工作原理以
及使用合适的工具与策略监控内存的工作状态。本文将分别阐述 AIX 和 Linux
系统中所涉及到的内存监控的方法,并对其中涉及到的内核内存管理的原理做初
步的说明。
AIX 内存管理与监控
内存管理概述
内存管理在不同的操作系统中会有不同的实现。AIX 系统使用 VMM(Virtual
MemoryManager) 实现物理内存的管理,处理应用程序的内存分配请求与内存回
收。
内存和交换空间一般都是通过页面来进行分配和管理,VMM 将所有的内存段划分
为若干个页面,Power4 芯片支持 4K,64K,和 16M 大小的虚拟内存页,Power5
芯片支持 4K,64K,16M,16G 大小的虚拟内存页,每个页面的缺省大小是 4KB。
虚拟内存页面越大,对需要大内存块的应用程序可以起到优化作用,主要是提高
TLB 的命中率。
当我们执行应用程序的时候,内存中的页面会被逐渐的占用,这里我们设计两个
重要的参数: Minfree( 最小空闲页面的大小 ) 和 Maxfree( 最大空闲页面的
大小 )。当空闲的内存达到 Minfree 大小的时候, VMM 的调页算法将被唤醒,
将内存中的页面转移到交换空间中,知道空闲内存达到 Maxfree,才停止调页。
上面主要是对 AIX 内存管理中所涉及到的的基本概念做了简单的介绍说明,对
于任何与内存相关的操作,了解这些概念都是非常必要的。
系统管理员在进行正确的优化或者问题发生之前,必须首先监视系统,使用合适
的工具捕获基准数据,并且知道如何进行分析工作。下面笔者将介绍 AIX 系统
所提供的工具来监控系统内存的使用情况。
内存调整命令
与其他的子系统相比,内存调整更为困难,但同时收到的效果往往更加显著,特
别是在那些尚未对各种内存参数进行优化的运行环境中。系统管理员可以通过
vmo 命令动态的调整内存参数,进行内存性能优化方面的各种实践。
vmo
Vmo 命令用来管理虚拟内存可调试的参数。例如如果我们发现空闲内存不足,可
以使用下面的命令增加 Minfree 和 Maxfree 参数:
清单 1. 使用 vmo 命令调整空闲的虚拟内存最小和最大值
# vmo –o minfree 1024 –o maxfree 30070
Setting maxfree to 30070
Setting minfree to 1024
注:-p 参数能够使修改永久生效,而且立即生效,不需要重启,下次重启设置
仍然有效。例如 vmo -p –o minfree 1024 命令能够永久设置空闲的虚拟内存
值为 1024
一般情况下,minfree 和 maxfree 的设定值可以通过下面的公式计算得到:
maxfree minnum(memory/128,128)
minfree maxfree/8
-a 参数能够显示当前所有的内存参数设置,之后系统管理员可以对其中的任何
参数进行调整,在此必须说明的是:对内存参数的任何微小改动都有可能造成系
统运行的不稳定,所以系统管理员做的任何修改,都必须非常慎重并且对可能造
成的影响有所了解。 上文提到的两个关键参数 minfree 和 maxfree 也包含于
下面的列表中。
清单 2.vmo 命令所能调整的内存参数
# vmo -a
ams_loan_policy n/a
force_relalias_lite 0
kernel_heap_psize 65536
lgpg_regions 0
lgpg_size 0
low_ps_handling 1
maxfree 30070
maxperm 902102
maxpin 845450
maxpin% 80
memory_frames 1048576
memplace_data 2
memplace_mapped_file 2
memplace_shm_anonymous 2
memplace_shm_named 2
memplace_stack 2
memplace_text 2