跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11.1 可调参数参考手册 Oracle Solaris 11.1 Information Library (简体中文) |
Solaris OS 使用需求换页式虚拟内存系统。系统运行时,会根据需要将页引入内存中。当内存占用达到特定阈值之上并且对内存的需求仍在继续,将开始换页。换页要经过由特定参数控制的多个级别。
常规换页算法如下所述:
检测到内存不足。页扫描程序线程运行并开始遍历内存。使用包含两个步骤的算法:
将页标记为未使用的。
如果在经过一个时间间隔后仍处于未使用状态,该页将被视为要回收的主体。
如果页已经修改,则会向页面调出线程发出请求以针对该页面调度 I/O。同时,页扫描程序继续查看内存。页面调出将促使该页被写入其后备存储并置于空闲表中。页扫描程序扫描内存时,不会对页的来源进行区分。页可能来自数据文件,也可能是来自可执行文件的文本、数据或栈的页。
随着系统上的内存压力增加,算法在考虑备选回收页方面以及在运行换页算法的频率方面将变得更为主动。(有关更多信息,请参见fastscan和slowscan。)因为可用内存处于范围 lotsfree 和 minfree 之间,所以系统将线性增加每次调用页面调出线程时扫描的内存量,从由 slowscan 指定的值到由 fastscan 指定的值。系统使用 desfree 参数控制关于资源使用和行为的决策数。
系统最初限制自身使用不超过一个 CPU 的 4% 来进行 pageout 操作。随着内存压力增加,支持 pageout 操作时消耗的 CPU 时间量将线性增加,直到最大值,即一个 CPU 的 80%。算法将检查一定量的内存(介于 slowscan 和 fastscan 之间),然后在发生下列情况之一时停止:
已经找到了足够的页来解决内存不足问题。
已经查看了计划的页数。
已经消耗了过多时间。
当页面调出线程完成其扫描时,如果仍存在内存不足问题,则会调度在将来执行 1/4 秒的另一次扫描。
换页子系统的配置机制已更改。不是依赖于 fastscan、 slowscan 和 handspreadpages 的一组预定义值,系统将在引导时为这些参数确定适当的设置。在 /etc/system 文件中设置这些参数中的任何一个都会导致系统不能使用最佳值。
注意 - 请从 /etc/system 文件中删除 VM 系统的所有调优设置。请以缺省设置运行并确定是否需要调整这些参数中的任何参数。不要设置 cachefree 或 priority_paging。 |
支持对 CPU 和内存的动态重新配置 (Dynamic reconfiguration, DR)。涉及内存添加或删除的 DR 操作中的系统会重新计算相关参数的值,除非已在 /etc/system 中显式设置了这些参数。如果已显式设置,将使用 /etc/system 中指定的值,除非违反了对变量值的约束。如果那样,将重置该值。
无符号长整数
物理内存的 1/64 和 512 KB 中的较大者
最小值是 512 KB 和物理内存的 1/64 中的较大者,表示为页数(使用 getpagesize 返回的页大小)。有关更多信息,请参见 getpagesize(3C)。
最大值是物理内存页数。最大值应该不超过物理内存的 30%。系统不会强制实施此范围,但“验证”部分所述内容除外。
页
是,但如果发生基于内存的 DR 操作,则动态更改将丢失。
如果 lotsfree 大于物理内存量,则其值将被重置为缺省值。
lotsfree 大于 desfree,后者又大于 minfree,应始终保持这种关系。
如果页需求突然急剧增加,内存算法可能无法跟上需求。一个解决方法是提早开始回收内存。此解决方法可以为换页系统提供一些额外余量。
一个经验法则是将此参数设置为系统在数秒内需要分配的数量的 2 倍。此参数受工作负荷影响。DBMS 服务器在缺省设置下可能工作良好。不过,对于执行繁重的文件系统 I/O 的系统,您可能需要调整此参数。
对于具有相对静态的工作负荷和大量内存的系统,请降低此值。最小可接受值为 512 KB,表示为页数(使用 getpagesize 返回的页大小)。
不稳定
无符号整数
lotsfree / 2
最小值是 256 KB 和物理内存的 1/128 中的较大者,表示为页数(使用 getpagesize 返回的页大小)。
最大值是物理内存页数。最大值应该不超过物理内存的 15%。系统不会强制实施此范围,但“验证”部分所述内容除外。
页
是,除非发生添加或删除内存的动态重新配置操作。在那种情况下,该值将重置为 /etc/system 文件中提供的值或者将根据新的物理内存值计算得出。
如果 desfree 大于 lotsfree,则 desfree 将设置为 lotsfree / 2。不会显示任何消息。
lotsfree 大于 desfree,后者又大于 minfree,应始终保持这种关系。
增大此参数的值可能会带来多种负面影响。当新值接近或超过系统上的可用内存量时,会发生以下情况:
将不处理异步 I/O 请求,除非可用内存超过 desfree。增大 desfree 的值可能会导致本应可以成功的请求被拒绝。
NFS 异步写入被作为同步写入执行。
交换程序将提前激活,交换程序的行为将倾向于更主动的操作。
系统可能无法将尽可能多的可执行页预装入系统。此负面影响可能会导致应用程序的运行速度比它们应有的速度要慢。
对于具有相对静态的工作负荷和大量内存的系统,请降低此值。最小可接受值为 256 KB,表示为页数(使用 getpagesize 返回的页大小)。
不稳定
指定最小可接受内存级别。当内存低于此数值时,系统将优先安排成功完成页面调出操作或者将进程完全交换出内存所需的分配。分配将拒绝或者阻塞其他分配请求。
无符号整数
desfree / 2
最小值是 128 KB 和物理内存的 1/256 中的较大者,表示为页数(使用 getpagesize 返回的页大小)。
最大值是物理内存页数。最大值应该不超过物理内存的 7.5%。系统不会强制实施此范围,但“验证”部分所述内容除外。
页
是,除非发生添加或删除内存的动态重新配置操作。在那种情况下,该值将重置为 /etc/system 文件中提供的值或者将根据新的物理内存值计算得出。
如果 minfree 大于 desfree,则 minfree 将设置为 desfree / 2。不会显示任何消息。
lotsfree 大于 desfree,后者又大于 minfree,应始终保持这种关系。
缺省值通常就足够了。对于具有相对静态的工作负荷和大量内存的系统,请降低此值。最小可接受值为 128 KB,表示为页数(使用 getpagesize 返回的页大小)。
不稳定
无符号整数
minfree
最小值是 128 KB 和物理内存的 1/256 中的较大者,表示为页数(使用 getpagesize 返回的页大小)。
最大值是物理内存页数。最大值应该不超过物理内存的 4%。系统不会强制实施此范围,但“验证”部分所述内容除外。
页
是,除非发生添加或删除内存的动态重新配置操作。在那种情况下,该值将重置为 /etc/system 文件中提供的值或者将根据新的物理内存值计算得出。
如果 throttlefree 大于 desfree,则 throttlefree 将设置为 minfree。不会显示任何消息。
lotsfree 大于 desfree,后者大于 minfree,应始终保持这种关系。
缺省值通常就足够了。对于具有相对静态的工作负荷和大量内存的系统,请降低此值。最小可接受值为 128 KB,表示为页数(使用 getpagesize 返回的页大小)。有关更多信息,请参见 getpagesize(3C)。
不稳定
指定保留供页面调出或调度程序线程专用的页数。当可用内存小于该值时,对于除页面调出或调度程序之外的进程,将拒绝非阻塞分配。页面调出线程需要有一个小内存池供其使用,以便它可以分配执行 I/O 来将页写入其后备存储时所需的数据结构。
无符号整数
throttlefree / 2
最小值是 64 KB 和物理内存的 1/512 中的较大者,表示为页数(使用 getpagesize(3C) 返回的页大小)。
最大值是物理内存页数。最大值应该不超过物理内存的 2%。系统不会强制实施此范围,但“验证”部分所述内容除外。
页
是,除非发生添加或删除内存的动态重新配置操作。在那种情况下,该值将重置为 /etc/system 文件中提供的值或者将根据新的物理内存值计算得出。
如果 pageout_reserve 大于 throttlefree / 2,则 pageout_reserve 将设置为 throttlefree / 2。不会显示任何消息。
lotsfree 大于 desfree,后者又大于 minfree,应始终保持这种关系。
缺省值通常就足够了。对于具有相对静态的工作负荷和大量内存的系统,请降低此值。最小可接受值为 64 KB,表示为页数(使用 getpagesize 返回的页大小)。
不稳定
无符号长整数
(tune_t_minarmem + 100 和 [引导时可用内存的 4% + 4 MB]) 中的较大者
系统强制实施的最小值是 tune_t_minarmem + 100。系统不会强制实施最大值。
页
是,除非发生添加或删除内存的动态重新配置操作。在那种情况下,该值将重置为 /etc/system 文件中提供的值或者将根据新的物理内存值计算得出。
如果 /etc/system 文件中指定的值或计算得出的缺省值小于 tune_t_minarmem + 100,则该值将重置为 tune_t_minarmem + 100。
如果增大 /etc/system 文件中的该值,则不会显示任何消息。仅在引导时,以及在涉及添加或删除内存的动态重新配置操作期间,才会进行验证。
当可用内存量看起来足够用,但内存锁定请求却失败或者向共享内存段附加 SHARE_MMU 标志失败时。
太大的值会导致内存锁定请求(mlock、mlockall 和 memcntl)无谓地失败。有关更多信息,请参见 mlock(3C)、mlockall(3C) 和 memcntl(2)。
不稳定
定义为避免死锁而需要维持的最小可用驻留(不可交换)内存。用来保留部分内存供 OS 的核心使用。在 OS 确定最大可用内存量时,以此方式限制的页将不可见。
带符号整数
25
1 - 物理内存
页
否
无。较大的值会导致物理内存浪费。
缺省值通常就足够了。如果系统发生锁定并且调试信息指示没有内存可用,请考虑增大缺省值。
不稳定
带符号整数
请以下列方式之一设置 fastscan 缺省值:
使用 /etc/system 文件中设置的 fastscan 值。
使用 /etc/system 文件中设置的 maxfastscan 值。
如果 /etc/system 文件中既没有设置 fastscan 也没有设置 maxfastscan,fastscan 将在系统引导时设置为 64 MB。然后,在系统引导几分钟后,fastscan 值将设置为扫描程序使用一个 CPU 的 10% 在一秒内可以扫描的页数。
在以上所有三种情况中,如果派生的值大于系统中内存的一半,fastscan 值将被限定为系统中内存值的一半。
64 MB - 系统物理内存的一半
页
是,除非发生添加或删除内存的动态重新配置操作。在那种情况下,该值将重置为 /etc/system 文件中提供的值或者将根据新的物理内存值计算得出。
最大值是 64 MB 和物理内存的 1/2 中的较小者。
当内存不足期间首选更主动的内存扫描时,特别是当系统受制于密集内存需求时,或者当执行繁重文件 I/O 时。
不稳定
带符号整数
物理内存的 1/20(以页数表示)和 100 中的较小者。
1 - fastscan / 2
页
是,除非发生添加或删除内存的动态重新配置操作。在那种情况下,该值将重置为 /etc/system 文件中提供的值或者将根据新的物理内存值计算得出。
如果 slowscan 大于 fastscan / 2,则 slowscan 将重置为 fastscan / 2。不会显示任何消息。
当内存不足期间首选更主动的内存扫描时,特别是当系统受制于密集内存需求时。
不稳定
带符号整数
4
1 - 80
百分比
是
无
在具有多个 CPU 和大量内存的系统上,如果系统受制于密集内存需求,增大该值可以允许页面调度程序花费更多时间来尝试查找内存。
不稳定
Oracle Solaris OS 使用双指针时钟算法来查找当内存较低时要回收的页。时钟的第一个指针遍历内存,将页标记为未使用的。第二个指针在第一个指针之后一段距离遍历内存,查看页是否仍标记为未使用的。如果页仍标记为未使用的,该页将被回收。第一个指针和第二个指针之间的距离为 handspreadpages。
无符号长整数
fastscan
1 - 系统中的最大物理内存页数
页
是。此参数要求内核 reset_hands 参数也设置为非零值。在 handspreadpages 的新值被认可后,reset_hands 将设置为零。
该值将设置为物理内存量和 handspreadpages 值 中的较小者。
当您要增大页在被回收之前可能驻留的时间量时。增大该值会增大两个指针之间的间隔,因此,会增大回收页之前的时间量。
不稳定
定义在 I/O 完成后立即释放页(而不是存储页以便可以重用)的部分系统阈值。阈值为 lotsfree + pages_before_pager。NFS 环境还使用此阈值在内存压力增加时减少其异步活动。
带符号整数
200
1 - 物理内存量
页
否
无
如果绝大多数 I/O 是针对实际上只读取或写入了一次便未再引用的页执行的,则您可以更改此参数。将此变量设置为较大的内存量可以保持向空闲表添加页。
此外,当系统受制于突发的严重内存压力时,您也可以更改此参数。在这种情况下,较大的值有助于保持较大的缓冲来应对压力。
不稳定
定义换页系统可以排队的最大页 I/O 请求数。此数值除以 4 可以得到分页系统使用的最大实际数值。此参数用于限制请求数以及控制进程交换。
带符号整数
40
1 到一个可变的最大值,该最大值取决于系统体系结构,但是主要取决于 I/O 子系统,例如控制器数、磁盘数和磁盘交换区大小
I/0
否
无
来自页面调度程序的最大 I/O 请求数受请求缓冲区列表大小的限制,该大小当前为 256。
需要增大此参数以便更快地换出内存时。如果配置了多个交换设备或者如果交换设备为分散读写设备,较大的值可能有助于更快地缓解内存压力。请注意,现有 I/O 子系统应该能够处理额外 I/O 负载。此外,如果交换分区和应用程序文件位于同一磁盘上,增大交换区 I/O 可能会降低应用程序 I/O 性能。
不稳定