1.虚拟内存管理器
AIX® 虚拟内存管理器 (AIX VMM) 是一种基于分页的虚拟内存管理器。一个分页就是一个固定大小的数据块。分页既可以位于内存中(也就是说,映射到物理内存中的某个位置)、也可以位于磁盘中(也就是说,从物理内存中替换到分页空间或者文件系统)。
AIX VMM 有一个非常独特的方面,即缓存的文件数据的管理。AIX VMM 将缓存的文件数据与对其它类型虚拟内存(例如,进程数据、进程堆栈等等)的管理集成到了一起。它将文件数据缓存为分页,就如同进程的虚拟内存一样。
2.分页的类型
从本质上看,AIX 中一共有两种分页类型:
- 工作存储分页(Working storage pages)
- 永久存储分页(Permanent storage pages)
2.1工作存储分页区:
工作存储分页是一些包含易变 数据(换句话说,即重新启动后将不复存在的数据)的分页。
例:
- 进程数据
- 堆栈
- 共享内存
- 内核数据
被修改过的工作存储分页(其实就是这些易变数据被改过值)替换出(从内存移动到磁盘)时,它们将被写入到分页空间(swap空间)。不会将工作存储分页写入到文件系统。
注:为什么这些易变数据本不是保存在文件系统中。因为这些数据本身就不在文件中。如:有一个变量,a=0 变为了a=1。如果将其写到文件系统中,那就意味着系统直接更改了程序文件的变量初始值。那我下次在运行时a就不是0而是1。
没有修改过的工作存储分页则就直接释放
2.2永久存储
永久存储分页是一些包含永久数据(也就是说,重新启动后仍然存在的数据)的分页。这种永久数据就是文件数据。因此,永久存储分页就是缓存在内存中的部分文件。
被修改过的永久存储分页需要换出(从内存移动到磁盘)的时候,会将它写入到文件系统中。
如前所述,可以直接释放没有经过修改的永久存储分页,无需将其写入到文件系统中,因为文件系统包含该数据的原始副本。
2.2.1 永久存储划分
将永久存储分页划分为两种子类型:
- 客户端分页(client)
- 非客户端分页(non-client)
非客户端分页是一些包含缓存的日志文件系统 (JFS) 文件数据的分页。客户端分页是一些包含所有其他文件系统(例如,JFS2 和网络文件系统 (NFS))的缓存数据的分页。
3.分页的分类
为了帮助分页替换守护进程(lrud)更好地选择用来进行替换的分页,AIX 将分页分为下面两种类型:
- 计算性分页(Computational) 即工作存储分页区
- 非计算性分页(Non-computational) 即永久存储分页区
计算性分页是一些用于文本、数据、堆栈和进程的共享内存的分页。非计算性分页是一些包含正在进行读取和写入的文件的文件数据的分页。
4.分页的替换
由上面我们知道了分页就是一段内存区域。为了保证内存使用的充足。AIX会通过分页替换守护进程(lrud)一次次的扫描内存的分页,找出要回收的分页以释放内存。分页替换守护进程必须仔细地选择分页,以便将分页对系统的性能影响降到最低,并且分页替换守护进程将根据可调参数设置和系统情况来选择不同类型的分页。
4.1可调参数
4.1.1 minperm
和 maxperm
minperm
和 maxperm
是两个最基本的分页替换可调参数。这两个可调参数用于指出 AIX 内核应该使用多少内存来缓存非计算性的分页。
minperm
限制指出应该用于非计算性分页的最低内存量。
maxperm 可调参数指出应该用于缓存非计算性分页的最大内存量。注:(maxperm
是一个“非严格的”限制,这意味着在某些情况下可以超出这个限制。将 maxperm
设定为非严格的限制,这允许在具有可用空闲内存的时候,可以在内存中缓存更多的非计算性文件。通过将 strict_maxperm
可调参数设置为 1,就可以使 maxperm
限制成为“严格”的限制。当 maxperm
是严格限制的时候,即使有可供使用的空闲内存,内核也不允许非计算性分页的数目超出 maxperm
的限制。)
非计算性分页的当前数目称为 numperm
:vmstat –v
命令可以显示系统的 numperm
值所占系统实际内存的百分比。
下面的图 1 给出了有关这些可调参数在不同的系统条件下如何进行工作的概况:
图 1. minperm
和 maxperm
限制
当非计算性分页的数目(numperm
)>= maxperm
的时候,AIX 分页替换守护进程严格地选择非计算性分页(例如,缓存的非可执行文件)进行操作。
当非计算性分页的数目(numperm
)<= minperm
的时候,AIX 分页替换守护进程将选择计算性分页和非计算性分页进行操作。在这种情况下,AIX 将扫描两类分页,并且回收近来较少使用的分页。
那么:
当非计算性分页的数目(numperm
)在 minperm
和 maxperm
之间的时候呢?
AIX 分页替换守护进程替换的分页类型将由lru_file_repage
可调参数控制(请参见图 2)
4.1.2 lru_file_repage
图 2. lru_file_repage 可调参数
当 numperm
在 minperm
和 maxperm
之间的时候,
如果 lru_file_repage
可调参数设置为 1,那么 AIX 分页替换守护进程将自己根据谁对系统性能影响最好,就分谁。(随机)
如果lru_file_repage
可调参数设置为 0。在这种情况下,当 numperm
在 minperm
和 maxperm
之间的时候,AIX 内核始终选择非计算性的分页进行操作。
4.1.3 maxclient
除了 minperm
和 maxperm
可调参数之外,还有一个 maxclient
可调参数。maxclient
可调参数指定应该用于缓存非计算性客户端分页的最大内存量的限制。因为所有非计算性客户端分页是非计算性永久存储分页总数的子集,所以 maxclient
限制必须始终小于或者等于 maxperm
限制。
非计算性客户端分页的当前数目称为 numclient
。vmstat –v
命令可以显示系统的 numclient
值占系统实际内存的百分比。
在缺省情况下,maxclient
限制是严格的限制。这意味着,AIX 内核不允许非计算性的客户端文件缓存(numclient)超出 maxclient
限制的范围。当 numclient
达到 maxclient
限制时,AIX 内核将采用特殊的、仅客户端的模式开始分页替换。在这种仅客户端的模式中,AIX 分页替换守护进程将严格地选择客户端分页进行操作。(说明:numclient达到一定值后,分页守护进程也只会从客户端分页区(client)中下手去需求空闲内存,而不会从别的地方下手)。
5.监视内存使用情况
5.1 topas
MEMORY
real,MB —指计算机实际拥有的内存大小
% comp —指计算性分页区占据比例(工作存储区占的内存大小)
%noncomp—非计算分页区占据比例(包括非客户端和客户端)
% client—客户端分页区占据比例(永久存储区中的client区占据比例 。例如:nfs)
PAGING SPACE
Size,MB— swap空间的大小
%used— swap空间当前使用率
5.2 vmstat
命令
vmstat
命令可以报告关于系统的内存使用信息,以及诸如分页替换这样的 VMM 操作的统计信息。
使用带 -v
选项的 vmstat
命令可以显示不同分页类型所使用的实际内存百分比(请参见清单 1):
清单 1. vmstat -v
命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# vmstat -v 4980736 memory pages 739175 lruable pages 432957 free pages 1 memory pools 84650 pinned pages 80.0 maxpin percentage 20.0 minperm percentage <<- system’s minperm% setting 80.0 maxperm percentage <<- system’s maxperm% setting 2.2 numperm percentage << % of memory containing non-comp. pages 16529 file pages <<- # of non-comp. pages 0.0 compressed percentage 0 compressed pages 2.2 numclient percentage <<- % of memory containing non-comp. client pages 80.0 maxclient percentage <<- system’s maxclient% setting 16503 client pages <<- # of client pages 0 remote pageouts scheduled 0 pending disk I/Os blocked with no pbuf 0 paging space I/Os blocked with no psbuf 2484 filesystem I/Os blocked with no fsbuf 0 client filesystem I/Os blocked with no fsbuf 0 external pager filesystem I/Os blocked with no fsbuf 0 Virtualized Partition Memory Page Faults 0.00 Time resolving virtualized partition memory page faults |
因此,在上面的示例中,一共有 16529 个非计算性的文件分页被映射到了内存中。这些非计算性的分页使用了 2.2% 的内存。在这 16529 个非计算性的文件分页中,有 16503 个是客户端分页。
vmstat
输出没有提供关于计算性文件分页的信息。关于计算性文件分页的信息,可以使用 svmon
命令搜集得到。
5.3 svmon
命令
还有另一个命令可用于显示关于系统内存使用的信息,即 svmon
命令。svmon
命令支持大量不同的选项,这些选项用于提供有关系统内存使用的详细信息。
svmon
命令的 -G
选项可以显示不同类型分页所使用的内存量的信息(请参见清单 2):
清单 2. svmon
命令的 -G
选项
1
2
3
4
5
6
7
8
9
10
11
12
|
# svmon -G size inuse free pin virtual memory 786432 209710 576722 133537 188426 pg space 131072 1121 work pers clnt pin 133537 0 0 in use 188426 0 21284 PageSize PoolSize inuse pgsp pin virtual s 4 KB - 103966 1121 68929 82682 m 64 KB - 6609 0 4038 6609 |
要了解系统实际内存的使用情况,svmon
显示了下面三列:
work
——工作存储pers
——持久性存储(持久性存储分页都是非客户端分页,即 JFS 分页。)clnt
——客户端存储
对于每种分页类型,svmon
将显示下面两行:
inuse
——映射到内存中的 4K 分页的数目pin
——映射到内存中的、且固定的 4K 分页的数目(pin 是inuse
的子集)
因此,在上面的示例中,一共有 188426 个工作存储分页映射到内存中。在这 188426 个工作存储分页中,有 133537 个是固定的(也就是说,不能换出的)。
示例中显示没有持久的存储分页(因为系统中没有使用 JFS 文件系统)。一共有 21284 个客户端存储分页,它们中没有一个是固定的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步