本节概述了本手册中调优信息的格式。另外,还介绍了调优 Solaris 系统的不同方法。
本节介绍了 Solaris 10 6/06 发行版中新增或已更改的参数。
ip_multidata_outbound 参数已得到增强。有关更多信息,请参见ip_multidata_outbound。
ip_squeue_fanout 参数已修改。�C有关更多信息,请参见ip_squeue_fanout和ip_soft_rings_cnt中的新增参数。
Solaris 10 发行版中对以下参数进行了更改,但是以前未记录这些更改。
ip_forward_src_routed 和 ip6_forward_src_routed 参数已更正。�C从 Solaris 9 发行版开始,此参数的缺省值为禁用而不是启用。有关更多信息,请参见ip_forward_src_routed 和 ip6_forward_src_routed。
ip_squeue_write 参数名称已更改为 ip_squeue_enter。有关更多信息,请参见ip_squeue_enter。
logevent_max_q_sz 参数的缺省值已从 2000 个事件更改为 5000 个事件。有关更多信息,请参见logevent_max_q_sz。
在 Solaris 10 发行版中,错误地记录了 lwp_default_stksize 参数。对于 SPARC 系统,其缺省值为 24,576。有关更多信息,请参见lwp_default_stksize。
在 Solaris 10 发行版中,错误地记录了 sq_max_size 参数的缺省值。有关更多信息,请参见sq_max_size。
UDP 参数已更正。Solaris 10 发行版中对这些参数的缺省值进行了更改,但是以前未记录新的缺省值。有关更多信息,请参见UDP 可调参数。
本节介绍了 Solaris 10 发行版中新增或已更改的参数。
新增参数 default_stksize 可指定所有线程、内核或用户的缺省栈大小。lwp_default_stksize 参数仍然可用,但是不会影响所有内核栈。如果设置了 default_stksize,则会覆盖 lwp_default_stksize。有关更多信息,请参见default_stksize。
在本 Solaris 发行版中,所有 System V IPC 功能或者是自动配置的,或者可通过资源控制来控制。可共享的功能包括内存、消息队列以及信号。
通过资源控制,可以在本地系统或名称服务环境中按项目或按用户来进行 IPC 设置。
在以前的 Solaris 发行版中,IPC 功能由内核可调参数来控制。要更改这些功能的缺省值,必须修改 /etc/system 文件并重新引导系统。
由于 IPC 功能现在通过资源控制来控制,因此可以在系统运行过程中修改其配置。
许多以前需要系统调优才能正常运行的应用程序现在无需调优即可运行,因为增加了缺省资源并且资源是自动分配的。
下表介绍了现已过时的 IPC 可调参数及其替代资源控制。
资源控制 |
过时的可调参数 |
原有的缺省值 |
最大值 |
新缺省值 |
---|---|---|---|---|
process.max-msg-qbytes |
msginfo_msgmnb |
4096 |
ULONG_MAX |
65536 |
process.max-msg-messages |
msginfo_msgtql |
40 |
UINT_MAX |
8192 |
process.max-sem-ops |
seminfo_semopm |
10 |
INT_MAX |
512 |
process.max-sem-nsems |
seminfo_semmsl |
25 |
SHRT_MAX |
512 |
project.max-shm-memory |
shminfo_shmmax |
0x800000 |
UINT64_MAX |
物理内存的 1/4 |
project.max-shm-ids |
shminfo_shmmni |
100 |
224 |
128 |
project.max-msg-ids |
msginfo_msgmni |
50 |
224 |
128 |
project.max-sem-ids |
seminfo_semmni |
10 |
224 |
128 |
过时的参数仍可包括在 Solaris 系统上的 /etc/system 文件中。如果是这样,则这些参数可像在以前的 Solaris 发行版中一样,用来初始化缺省资源控制值。有关更多信息,请参见过时或已删除的参数。但是,建议不要使用过时的参数。
以下相关参数已被删除。如果这些参数包括在 Solaris 系统上的 /etc/system 文件中,则会注释掉这些参数。
semsys:seminfo_semmns |
semsys:seminfo_semvmx |
semsys:seminfo_semmnu |
semsys:seminfo_semaem |
semsys:seminfo_semume |
semsys:seminfo_semusz |
semsys:seminfo_semmap |
shmsys:shminfo_shmseg |
shmsys:shminfo_shmmin |
msgsys:msginfo_msgmap |
msgsys:msginfo_msgseg |
msgsys:msginfo_msgssz |
msgsys:msginfo_msgmax |
|
有关可用资源控制的当前列表,请参见 rctladm(1M)。有关配置资源控制的信息,请参见 project(4) 以及《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》中的第 6 章 “资源控制(概述)”。
本发行版中包括以下用于 NFSv4 协议的参数:
有关 NFSv4 参数的信息,请参见NFS 模块参数。
本 Solaris 发行版中新增了以下 IP 参数:
本 Solaris 发行版中新增了以下 TCP 参数:
本 Solaris 发行版中,以下 TCP/IP 参数已过时:
ipc_tcp_conn_hash_size
tcp_compression_enabled
tcp_conn_hash_size
ip_forwarding
ip6_forwarding
xxx_forwarding
在本 Solaris 发行版中,使用 routeadm 命令或 ifconfig 命令来启用或禁用 IP 转发,而不是使用 ndd 命令设置以下可调参数来启用或禁用:
ip_forwarding
ip6_forwarding
xxx_forwarding
使用 routeadm 命令和 ifconfig 命令而不是 ndd 命令来设置 IP 转发具有以下优点:
每次重新引导之后都会保留所有设置
新增的 ifconfig router 和 -router 命令可以与初始配置接口时运行的其他 ifconfig 命令一起放在 /etc/hostname.interface 文件中。
要在系统的所有接口上启用 IPv4 或 IPv6 包转发,可使用以下命令:
# routeadm -e ipv4-forwarding |
# routeadm -e ipv6-forwarding |
要在系统的所有接口上禁用 IPv4 或 IPv6 包转发,可使用以下命令:
# routeadm -d ipv4-forwarding |
# routeadm -d ipv6-forwarding |
在以前的 Solaris 发行版中,可使用如下命令在系统的所有接口上启用 IPv4 或 IPv6 包转发:
# ndd -set /dev/ip ip_forwarding 1 |
# ndd -set /dev/ip ip6_forwarding 1 |
在以前的 Solaris 发行版中,可使用如下命令在系统的所有接口上禁用 IPv4 或 IPv6 包转发:
# ndd -set /dev/ip ip_forwarding 0 |
# ndd -set /dev/ip ip6_forwarding 0 |
如果要在特定的 IPv4 接口或 IPv6 接口上启用 IP 转发,可针对相应接口使用以下类似语法。以下以 bge0 接口为例。
# ifconfig bge0 router |
# ifconfig bge0 inet6 router |
如果要在特定的 IPv4 接口或 IPv6 接口上禁用 IP 转发,可针对相应接口使用以下类似语法。以下以 bge0 接口为例。
# ifconfig bge0 -router |
# ifconfig bge0 inet6 -router |
以前,使用如下命令在特定接口上启用 IP 转发:
# ndd -set /dev/ip bge0:ip_forwarding 1 |
# ndd -set /dev/ip bge0:ip_forwarding 1 |
以前,使用如下命令在特定接口上禁用 IP 转发:
# ndd -set /dev/ip ip_forwarding 0 |
# ndd -set /dev/ip ip6_forwarding 0 |
如果希望上述任一 routeadm 设置在运行的系统上生效,请使用以下命令:
# routeadm -u |
有关更多信息,请参见 routeadm(1M) 和 ifconfig(1M)。
本发行版中包括用于调优转换存储缓冲区 (Translation Storage Buffer, TSB) 的新增参数。有关 TSB 参数的信息,请参见Sun-4u 特定参数。
本 Solaris 发行版中提供了流控制传输协议 (Stream Control Transmission Protocol, SCTP),它是一种可靠的传输协议,提供的服务与 TCP 所提供的类似。有关 SCTP 可调参数的更多信息,请参见SCTP 可调参数。
Solaris OS 是在 SPARC 和 x86 处理器上运行的多线程且可伸缩的 UNIX® 操作系统。它可根据系统负载自行调整,并且只需进行最少的调优。但是,在某些情况下,必须进行调优。本书提供了有关可用于 Solaris OS 的正式支持的内核调优选项的详细信息。
Solaris 内核包括一个始终装入的核心部分,以及一些只在被引用时才装入的可装入模块。本指南的内核部分中引用的许多变量都位于核心部分。但是,一些变量则位于可装入模块中。
系统调优中的一个关键注意事项是:设置系统参数(或系统变量)通常是可用来提高性能的效果最差的操作,而更改应用程序的行为通常可以最有效地帮助实现系统调优。添加更多物理内存以及平衡磁盘 I/O 模式也非常有用。在极少数情况下,更改本指南中介绍的其中一个变量将对系统性能产生很大影响。
请记住,一个系统的 /etc/system 设置,无论是从整体还是部分而言,可能都不适用于另一个系统的环境。请针对应用该文件中的设置值的环境仔细考虑这些值。请确保首先了解一个系统的行为,然后再尝试对此处介绍的系统变量应用更改。
本书中介绍的可调参数在不同的发行版之间可以有所不同,实际情况也是如此。发行版可以是 Solaris Update 发行版,也可以是新的发行版,如 Solaris 10。发布这些可调参数时,不排除在未发出通知的情况下对可调参数及其说明进行的更改。
对于每个可调参数,其说明格式如下:
参数名称
说明
数据类型
缺省值
范围
单位
是否为动态
验证
含义
何时更改
承诺级别
更改历史记录
/etc/system 文件中键入或在 /etc/default/facility 文件中找到的确切名称。
大多数参数名称的形式为不包含冒号 (:) 的参数。这些名称是指内核的核心部分中的变量。如果名称确实包含冒号,则冒号左侧的字符将引用可装入模块的名称。模块内参数的名称由冒号右侧的字符组成。例如:
module_name:variable |
简要介绍参数的作用及其控制的内容。
指示带符号或无符号的短整数或长整数,区别如下:
在运行 32 位内核的系统上,长整数与整数大小相同。
在运行 64 位内核的系统上,长整数的宽度(以位为单位)是整数的两倍。例如,无符号整数 = 32 位,无符号长整数 = 64 位。
(可选)介绍单位类型。
系统用作缺省值的值。
指定系统验证允许的可能范围或数据类型的限制。
MAXINT-带符号整数的最大值 (2,147,483,647) 的缩略说明
MAXUINT-无符号整数的最大值 (4,294,967,295) 的缩略说明
如果可以使用 mdb 或 kmdb 调试程序在运行的系统上更改参数,则表明此参数为动态参数。如果参数只能在引导时进行初始化,则表明此参数不是动态参数。
检查系统是应用 /etc/system 文件中指定的变量值还是应用缺省值,并检查何时应用验证。
(可选)提供可能针对此参数存在的未声明的约束,尤其是相对于其他参数的约束。
说明某个用户可能要更改该值的原因,其中包括错误消息或返回代码。
标识接口的稳定性。本手册中的许多参数仍在改进中,因此属于不稳定参数。有关更多信息,请参见attributes(5)。
(可选)包含指向“更改历史记录”附录的链接(如果适用)。
下表介绍了可以应用可调参数的不同方法。
应用可调参数的方法 |
更多信息 |
---|---|
修改 /etc/system 文件 | |
使用内核调试程序 (kmdb) | |
使用模块调试程序 (mdb) | |
使用 ndd 命令设置 TCP/IP 参数 | |
修改 /etc/default 文件 |
/etc/system 文件提供了用于调整内核参数值的静态机制。引导时会读取此文件中指定的值并应用这些值。对此文件所做的任何更改仅在重新引导操作系统之后才会应用于该系统。
在 Solaris 8 发行版之前,在以下两个阶段中应用了用于设置参数值的 /etc/system 项:
第一个阶段将获取各种引导参数(例如 maxusers)来初始化关键的系统参数。
第二个阶段将使用引导参数来计算基本配置,并应用 /etc/system 文件中指定的所有值。对于引导参数,重新应用的值将替换在初始化阶段中计算或重置的值。
有时,第二个阶段会对用户和管理员造成困惑,原因是将参数设置为似乎不允许的值,或是对初始配置过程中覆盖了其中一个值的参数(如 max_nprocs)进行了赋值。
从 Solaris 8 发行版开始,在计算配置参数之前将一次设置所有值。
以下 /etc/system 项用于设置针对使用 NFS 版本 2 软件挂载的文件系统所读取的读前块数。
set nfs:nfs_nra=4 |
请在修改 /etc/system 文件之前生成其副本,以便可以轻松从错误值中恢复。例如:
# cp /etc/system /etc/system.good |
如果 /etc/system 文件中指定的值导致系统无法引导,则可以使用以下命令进行恢复:
ok boot -a |
此命令将使系统要求提供在引导过程中使用的各种文件的名称。请按回车键接受缺省值,直到请求 /etc/system 文件的名称为止。显示 Name of system file [/etc/system]: 提示时,请键入完好的 /etc/system 文件或 /dev/null 的名称:
Name of system file [/etc/system]: /etc/system.good |
如果指定了 /dev/null,则此路径将导致系统尝试从 /dev/null 中读取其配置信息。由于此文件为空,因此系统会使用缺省值。引导系统之后,即可更正 /etc/system 文件。
有关系统恢复的更多信息,请参见《系统管理指南:基本管理》。
kmdb 是一个交互式内核调试程序,其通用语法与 mdb 相同。交互式内核调试程序的一个优点是可以设置断点。到达断点时,可以通过执行内核代码来检查数据或步骤。
可以根据需要装入和卸载 kmdb。不必像在 kadb 中那样重新引导系统来执行交互式内核调试。
有关更多信息,请参见kmdb(1)。
从 Solaris 8 发行版开始,将使用 mdb 作为模块调试程序,这是一种独特的 Solaris 调试程序,因为它很容易扩展。其中还有一个编程 API,可用于对模块进行编译,以便在调试程序环境中执行所需任务。
mdb 还包括一些所需的可用性功能,如命令行编辑、命令历史记录、内置输出页面调度程序、语法检查以及命令管道传输。mdb 是建议针对内核使用的事后调试程序。
有关更多信息,请参见mdb(1)。
要将整数参数 maxusers 的值从 495 更改为 512,请执行以下操作:
# mdb -kw Loading modules: [ unix krtld genunix ip logindmux ptm nfs ipc lofs ] > maxusers/D maxusers: maxusers: 495 > maxusers/W 200 maxusers: 0x1ef = 0x200 > $q |
使用要更改的项的实际地址以及此参数将设置为的值来替换 maxusers。
有关使用模块调试程序的更多信息,请参见《Solaris 模块调试程序指南》。
使用 kmdb 或 mdb 调试程序时,不需要模块名称前缀。装入模块之后,其符号将形成一个公用名称空间,其中包括核心内核符号以及先前装入的其他任何模块符号。
例如,每个调试程序中会将 ufs:ufs_WRITES 作为 ufs_WRITES 进行访问(假定装入了 UFS 模块)。在 /etc/system 文件中进行设置时,需要 ufs: 前缀。
Solaris 可调参数具有各种形式。tune 结构(在 /usr/include/sys/tuneable.h 文件中定义)是 tune_t_fsflushr、tune_t_minarmem 以及 tune_t_flkrec 的运行时表示形式。初始化内核之后,可在 tune 结构的相应字段中找到对这些变量的所有引用。
各种文档(例如《 Solaris System Administration Guide, Volume 2》的早期版本)均已指明在 tune 结构中设置参数的正确方法是使用语法 tune:field-name,其中 field-name 将由以上列出的实际参数名称所替换。此过程将在不出现提示的情况下失败。在引导时针对此结构设置参数的正确方法是初始化对应于所需字段名称的特殊参数。然后,系统初始化过程会将这些值装入 tune 结构。
用来放置各种可调参数的另一个结构是名为 v 的 var 结构。可以在 /usr/include/sys/var.h 文件中找到 var 结构的定义。变量(如 autoup 和 bufhwm)的运行时表示形式即存储在此位置。
请勿在运行的系统上更改 tune 或 v 结构。在运行的系统上更改这些结构中的任何字段都可能导致系统发生混乱。
可使用多种工具检查系统配置信息。部分工具需要超级用户权限。其他工具可以由非特权用户运行。通过在运行的系统上使用 mdb 或在 kmdb 下进行引导,可以借助内核调试程序来检查每个结构和数据项。
sysdef 命令可提供 System V IPC 设置、STREAMS 可调参数、进程资源限制以及 tune 和 v 结构的各部分的值。例如,512 MB 的 SunTM UltraTM 80 系统上的 sysdef “可调参数”部分如下所示:
10387456 maximum memory allowed in buffer cache (bufhwm) 7930 maximum number of processes (v.v_proc) 99 maximum global priority in sys class (MAXCLSYSPRI) 7925 maximum processes per user id (v.v_maxup) 30 auto update time limit in seconds (NAUTOUP) 25 page stealing low water mark (GPGSLO) 5 fsflush run rate (FSFLUSHR) 25 minimum resident memory for avoiding deadlock (MINARMEM) 25 minimum swapable memory for avoiding deadlock (MINASMEM) |
有关更多信息,请参见sysdef(1M)。
kstat 是由各种内核子系统和驱动程序维护的数据结构。它们提供了一种机制,可将内核中的数据导出到用户程序,而无需程序读取内核内存或具有超级用户权限。有关更多信息,请参见kstat(1M) 或 kstat(3KSTAT)。
从 Solaris 8 发行版开始,kstat 命令可用于通过命令行界面来选择和显示 kstat。另外,也可以使用 Perl 模块 Kstat(3PERL) 来处理 kstat 信息。
unix 模块中名为 system_pages 的 kstat 数据结构不会报告 cachefree 的统计信息。从 Solaris 9 发行版开始,不支持 cachefree。