下面我将详细介绍如何查看 Solaris 的内核参数,并分为两种主要情况:动态查看 和 静态查看。

(图片来源网络,侵删)
使用 ndd 命令动态查看 (推荐)
ndd (Node Device Driver) 是 Solaris 中用于与设备驱动程序和内核模块交互的工具,许多网络和系统性能相关的内核参数都通过它来查看和修改,并且修改可以立即生效,无需重启。
查看 ndd 支持的设备/模块
你可以查看哪些内核模块或设备支持 ndd。
ndd -h
或者查看一个特定模块的所有可用参数:
# 查看所有可用参数 ndd /dev/tcp # 查看特定参数的值 ndd /dev/tcp tcp_conn_req_max
常用 ndd 查看示例
a) 网络相关参数 (TCP/IP 栈)

(图片来源网络,侵删)
这些是性能调优中最常查看的参数。
# 查看 TCP 连接队列最大长度 ndd /dev/tcp tcp_conn_req_max # 查看 TCP 重传超时时间 (毫秒) ndd /dev/tcp tcp_rexmit_interval_initial # 查看 IP 数据包转发是否启用 (1=启用, 0=禁用) ndd /dev/ip ip_forwarding # 查看 UDP 检查和是否启用 (1=启用, 0=禁用) ndd /dev/udp udp_cksum # 查看 TCP 窗口缩放因子 ndd /dev/tcp tcp_wscale_always
b) 系统核心参数
# 查看系统最大进程数 ndd /dev/system max_nprocs # 查看每个进程可以打开的最大文件描述符数 ndd /dev/system max_file_descriptors # 查看共享内存最大段大小 ndd /dev/system shmsys:shminfo_shmmax
查看 /etc/system 文件中的静态参数
/etc/system 文件是 Solaris 的核心系统配置文件,在这里设置的参数通常是系统启动时从根文件系统加载的,修改后需要重启系统才能生效。
这个文件中的参数格式通常为:
module_name parameter_name = value
查看 /etc/system 文件
直接使用 cat, more, less 或 grep 命令来查看。
# 查看整个文件 cat /etc/system # 使用 less 分页查看,方便浏览 less /etc/system # 搜索特定参数,例如查找与共享内存相关的设置 grep -i shmmax /etc/system
常用 /etc/system 参数示例
a) 共享内存
# 共享内存最小段大小 (字节) set shmsys:shminfo_shmmin = 1 # 共享内存最大段大小 (字节),例如设置为 4GB set shmsys:shminfo_shmmax = 4294967296 # 系统中共享内存段的最大数量 set shmsys:shminfo_shmmni = 100
b) 信号量
# 每个信号量集的最大信号量数 set semsys:seminfo_semmsl = 100 # 系统中信号量集的最大数量 set semsys:seminfo_semmns = 512 # 系统中信号量的最大总数 set semsys:seminfo_semmni = 512
c) 文件描述符
# 每个进程可以打开的最大文件描述符数 set rlim_fd_max = 65536 # 系统中可以打开的文件描述符总数 set rlim_fd_cur = 65536
总结与对比
| 特性 | ndd 命令 |
/etc/system 文件 |
|---|---|---|
| 作用范围 | 动态参数,通常与网络驱动、TCP/IP 栈相关 | 静态参数,涉及核心系统资源限制 |
| 生效方式 | 立即生效,无需重启 | 需要重启系统才能生效 |
| 修改方式 | ndd /dev/module param_name=value |
编辑 /etc/system 文件 |
| 查看方式 | ndd /dev/module param_name |
cat /etc/system 或 grep |
| 适用场景 | 运行时性能调优、临时修改、故障排查 | 永久性配置、系统初始化设置 |
最佳实践
- 先查看,再修改:在修改任何参数之前,务必先用上述方法查看其当前值。
- 了解参数含义:不要随意修改不了解的参数,否则可能导致系统不稳定或性能下降,在修改前,请查阅 Oracle Solaris 的官方文档。
- 备份配置:在修改
/etc/system文件前,最好先备份它。cp /etc/system /etc/system.bak
- 动态 vs 静态:
- 如果只是临时调整网络性能,优先使用
ndd。 - 如果需要永久增加系统资源限制(如最大进程数、共享内存大小),则修改
/etc/system并计划重启。
- 如果只是临时调整网络性能,优先使用
- Solaris 11 及更高版本:在 Solaris 11 中,Oracle 引入了 SMF (Service Management Facility) 和
svcadm/svccfg来管理更多系统配置,包括一些内核参数,对于某些服务,参数可能存储在 SMF 的属性中,但对于最核心的内核参数,ndd和/etc/system仍然是主要方式。
通过结合使用 ndd 和查看 /etc/system,你就可以全面地了解和管理 Solaris 系统的内核参数了。
