Solaris 可调参数参考手册

与分页相关的参数

Solaris OS 使用按需分页的虚拟内存系统。系统运行时,会根据需要将页放入内存。当占用的内存超过特定阈值并且内存需求不断增加时,便会开始分页。可以通过几个级别进行分页,这些级别由特定参数控制。

常规分页算法如下:

最初,系统限定自身针对 pageout 操作所使用的 CPU 百分比不超过 4%。随着内存压力的增大,为支持 pageout 操作而占用的 CPU 时间会线性增大,直到最多占用 CPU 的 80% 为止。此算法将扫描 slowscanfastscan 之间的某一内存量,然后在出现下列任一情况时停止扫描:

如果页出线程完成其扫描时仍存在内存不足问题,则在接下来的 1/4 秒时间内将安排其他扫描。

从 Solaris 9 发行版开始,更改了分页子系统的配置机制。系统将在引导时确定 fastscanslowscanhandspreadpages 参数的相应设置,而不是依赖于这些参数的一组预定义值。在 /etc/system 文件中设置这些参数中的任何一个都会导致系统使用非最优值。


注意 – 注意 –

请从 /etc/system 文件中删除所有的 VM 系统调优。请使用缺省设置运行,并确定是否有必要调整这些参数。请勿设置 cachefreepriority_paging。从 Solaris 9 发行版开始,已经删除了这两个参数。


从 Solaris 7 5/99 发行版开始,支持 CPU 和内存的动态重新配置 (dynamic reconfiguration, DR)。执行涉及添加或删除内存的 DR 操作的系统将重新计算相关参数的值,除非已在 /etc/system 中显式设置参数。如果已显式设置,将使用 /etc/system 中指定的值,除非违反了有关变量值的约束。如果违反了有关约束,将重置值。

lotsfree

说明

用作开始系统分页的初始触发器。超过此阈值时,会唤醒页面扫描程序以开始查找要回收的内存页。

数据类型

无符号长整数

缺省值

物理内存的 1/64 与 512 KB 之间的较大值

范围

最小值为 512 KB 与物理内存的 1/64 之间的较大值,以页表示,其页大小为 getpagesize 的返回值。有关更多信息,请参见 getpagesize(3C)

最大值为物理内存页数。最大值不应大于物理内存的 30%。系统不会强制执行此范围,“验证”部分介绍的内容除外。

单位

是否为动态

是,但是如果执行基于内存的 DR 操作,则动态更改会丢失。

验证

如果 lotsfree 大于物理内存量,则会将值重置为缺省值。

含义

应始终维护以下关系:lotsfree 大于 desfree,而后者大于 minfree

何时更改

页需求急剧增加,而内存算法可能无法跟上需求时。一种解决方法是提前一段时间开始回收内存。此解决方案为分页系统提供了额外的时间。

一种单凭经验的方法是将此参数设置为系统需要在几秒时间内分配的内存页数的 2 倍。此参数与工作负荷相关。DBMS 服务器使用缺省设置可以很好地运行。但是,对于执行超负荷文件系统 I/O 的系统,可能需要调整此参数。

对于工作负荷相对稳定以及内存量较大的系统,可以降低此值。可接受的最小值为 512 KB,以页表示,其页大小为 getpagesize 的返回值。

承诺级别

不稳定

desfree

说明

指定系统上始终可用的首选内存量。

数据类型

无符号整数

缺省值

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 的返回值。

承诺级别

不稳定

minfree

说明

指定可接受的最低内存级别。当内存低于此数值时,系统会偏向于执行以下两种分配:成功完成页出操作所需的分配或将进程完全交换出内存所需的分配。这两种分配都会拒绝或阻止其他分配请求。

数据类型

无符号整数

缺省值

desfree / 2

范围

最小值为 128 KB 与物理内存的 1/256 之间的较大值,以页表示,其页大小为 getpagesize 的返回值。

最大值为物理内存页数。最大值不应大于物理内存的 7.5%。系统不会强制执行此范围,“验证”部分介绍的内容除外。

单位

是否为动态

是,除非执行添加或删除内存的动态重新配置操作。此时,将值重置为 /etc/system 文件中提供的值或者根据新物理内存值计算得出的值。

验证

如果 minfree 大于 desfree,则将 minfree 设置为 desfree / 2。不显示任何消息。

含义

应始终维护以下关系:lotsfree 大于 desfree,而后者大于 minfree

何时更改

缺省值通常已经足够。对于工作负荷相对稳定以及内存量较大的系统,可以降低此值。可接受的最小值为 128 KB,以页表示,其页大小为 getpagesize 的返回值。

承诺级别

不稳定

throttlefree

说明

指定内存级别,当达到此内存级别时,会将阻止内存分配请求置于休眠状态,即使内存足以满足此类请求时也是如此。

数据类型

无符号整数

缺省值

minfree

范围

最小值为 128 KB 与物理内存的 1/256 之间的较大值,以页表示,其页大小为 getpagesize 的返回值。

最大值为物理内存页数。最大值不应大于物理内存的 4%。系统不会强制执行此范围,“验证”部分介绍的内容除外。

单位

是否为动态

是,除非执行添加或删除内存的动态重新配置操作。此时,将值重置为 /etc/system 文件中提供的值或者根据新物理内存值计算得出的值。

验证

如果 throttlefree 大于 desfree,则将 throttlefree 设置为 minfree。不显示任何消息。

含义

应始终维护以下关系:lotsfree 大于 desfree,而后者大于 minfree

何时更改

缺省值通常已经足够。对于工作负荷相对稳定以及内存量较大的系统,可以降低此值。可接受的最小值为 128 KB,以页表示,其页大小为 getpagesize 的返回值。有关更多信息,请参见 getpagesize(3C)

承诺级别

不稳定

pageout_reserve

说明

指定为专门使用页出线程或调度程序线程保留的页数。当可用内存小于此值时,便会针对除页出或调度程序之外的所有进程拒绝非阻止分配。页出需要具有较小的内存池供自身使用,以便可以分配执行 I/O 所需的数据结构,从而将页写入其后备存储。在 Solaris 2.6 发行版中引入了此变量,用于确保系统在内存严重不足的情况下能够执行页出操作。

数据类型

无符号整数

缺省值

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 的返回值。

承诺级别

不稳定

pages_pp_maximum

说明

定义必须处于未锁定状态的页数。如果某个锁定页请求将强制可用内存低于此值,则会拒绝此请求。

数据类型

无符号长整数

缺省值

以下两者中的较大值: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 标志的共享内存段失败,但仍然看似具有足够的可用内存时。

如果值过大,则可能会导致内存锁定请求(mlockmlockallmemcntl)不必要地失败。有关更多信息,请参见mlock(3C)mlockall(3C)memcntl(2)

承诺级别

不稳定

更改历史记录

有关信息,请参见pages_pp_maximum(Solaris 9 发行版之前的 Solaris 发行版)

tune_t_minarmem

说明

定义为避免死锁而需要保留的最小可用驻留(而非可交换)内存。用于保留一部分内存以供 OS 的核心使用。当 OS 确定最大可用内存量时,采用此方法限制的内存将不可见。

数据类型

带符号整数

缺省值

25

范围

1 到物理内存

单位

是否为动态

验证

无。较大的值会导致浪费物理内存。

何时更改

缺省值通常已经足够。如果系统锁定并且调试信息指示没有可用的内存,可以考虑增大缺省值。

承诺级别

不稳定

fastscan

说明

定义内存压力达到最大时系统每秒查看的最大页数。

数据类型

带符号整数

缺省值

64 MB 与物理内存的 1/2 之间的较小值。

范围

1 到物理内存的一半

单位

是否为动态

是,除非执行添加或删除内存的动态重新配置操作。此时,将值重置为由 /etc/system 提供的值或者根据新物理内存值计算得出的值。

验证

最大值为 64 MB 与物理内存的 1/2 之间的较小值。

何时更改

内存不足期间(尤其是在系统处于需要大量内存的阶段或执行超负荷文件 I/O 时)首选更加主动的内存扫描时。

承诺级别

不稳定

slowscan

说明

定义尝试回收内存时系统每秒查看的最小页数。

数据类型

带符号整数

缺省值

以页为单位的物理内存的1/20 与 100 之间的较小值。

范围

1 到 fastscan / 2

单位

是否为动态

是,除非执行添加或删除内存的动态重新配置操作。此时,将值重置为 /etc/system 文件中提供的值或者根据新物理内存值计算得出的值。

验证

如果 slowscan 大于 fastscan / 2,则将 slowscan 重置为 fastscan / 2。不显示任何消息。

何时更改

内存不足期间(尤其是在系统处于需要大量内存的阶段)首选更加主动的内存扫描时。

承诺级别

不稳定

min_percent_cpu

说明

定义 pageout 可占用的最小 CPU 百分比。此参数用于确定页面扫描程序可占用的最长时间。

数据类型

带符号整数

缺省值

4

范围

1 到 80

单位

百分比

是否为动态

验证

何时更改

在具有多个 CPU 以及较大内存的系统上(这些系统处于需要大量内存的阶段)增大此值,可以使页面调度程序花更多时间来尝试查找内存。

承诺级别

不稳定

handspreadpages

说明

内存较低时,Solaris OS 使用双指针时钟算法查找候选回收页。时钟的第一个指针会扫描内存,将页标记为未使用。第二个指针距离第一个指针一段距离之后再扫描内存,检查页是否仍标记为未使用。如果是,则回收页。第一个和第二个指针之间的距离为 handspreadpages

数据类型

无符号长整数

缺省值

fastscan

范围

1 到系统上的最大物理内存页数

单位

是否为动态

是。此参数要求将内核 reset_hands 参数也设置为非零值。一旦识别出 handspreadpages 的新值,便会将 reset_hands 设置为零。

验证

将值设置为物理内存量与 handspreadpages 之间的较小值。

何时更改

需要延长页在回收之前可能驻留的时间时。增大此值会增加两个指针之间的距离,从而会延长回收页之前的时间。

承诺级别

不稳定

pages_before_pager

说明

定义在 I/O 完成之后立即释放页(而不是存储页以备将来可能重新使用)的系统阈值部分。阈值为 lotsfree + pages_before_pager。NFS 环境也使用此阈值,以便在内存压力增加时减小其异步活动。

数据类型

带符号整数

缺省值

200

范围

1 到物理内存量

单位

是否为动态

验证

何时更改

针对页(这些页已实际读取或写入一次,并且未再次引用)执行完大多数 I/O 时,可能要更改此参数。将此变量设置为较大的内存量,会导致继续将页添加到可用列表。

当系统的内存压力急剧增加时,也可能要更改此参数。较大的值有助于显著缓解压力。

承诺级别

不稳定

maxpgio

说明

定义分页系统可对其进行排队的最大页 I/O 请求数。将此数值除以 4 即可得到分页系统使用的实际最大数值。此参数用于限制请求数和控制进程交换。

数据类型

带符号整数

缺省值

40

范围

1 到 1024

单位

I/0

是否为动态

验证

含义

页面调度程序发出的最大 I/O 请求数受请求缓冲区列表大小的限制,此列表大小当前为 256。

何时更改

系统的内存压力急剧增加时。如果配置了多个交换设备或者交换设备为条带化设备,则较大的值有助于更快地从压力中恢复过来。

承诺级别

不稳定