Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
2.3. 可以控制哪些可调项?
可调项按内核 sybsystem 划分为多个组。Red Hat Enterprise Linux 系统有以下类型的可调项:
表 2.1. sysctl 接口表
class | 子系统 |
---|---|
abi | 执行域和个人 |
crypto | 加密接口 |
debug | 内核调试接口 |
dev | 设备特定信息 |
fs | 全局和特定文件系统可调项 |
kernel | 全局内核 tunables |
net | 网络 tunables |
sunrpc | Sun 远程过程调用(NFS) |
user | 用户命名空间限制 |
vm | 调整和管理内存、缓冲区和缓存 |
2.3.1. 网络接口可调项
系统管理员能够通过网络可调项调整正在运行的系统上的网络配置。
网络可调项包含在 /proc/sys/net
目录中,其中包含用于各种网络主题的多个子目录。若要调整网络配置,系统管理员需要修改这些子目录中的文件。
最常用的目录有:
-
/proc/sys/net/core/
-
/proc/sys/net/ipv4/
/proc/sys/net/core/
目录包含各种设置,这些设置控制内核和网络层之间的交互。通过调整其中一些可调项,您可以提高系统的性能,例如通过增加接收队列的大小、增大接收队列的最大连接数或专用于网络接口的内存。请注意,系统性能取决于每个问题的不同方面。
/proc/sys/net/ipv4/
目录包含额外的网络设置,这些设置在防止系统上的攻击或使用系统作为路由器时非常有用。目录同时包含 IP 和 TCP 变量。有关这些变量的详细解释,请参阅 /usr/share/doc/kernel-doc-<version>/Documentation/networking/ip-sysctl.txt
。
/proc/sys/net/ipv4/
目录中的其他目录涵盖了网络堆栈的不同方面:
-
/proc/sys/net/ipv4/conf/
- 允许您以不同的方式配置每个系统接口,包括对未配置的设备和设置使用默认设置来覆盖所有特殊配置 -
/proc/sys/net/ipv4/neigh/
- 包含与直接连接到系统的主机通信的设置,还包含多个步骤的不同系统设置 -
/proc/sys/net/ipv4/route/
- 包含适用于系统上任何接口路由的规格
这个网络可调项列表与 IPv4 接口相关,并可通过 /proc/sys/net/ipv4/{all,<interface_name>}/
目录访问。
以下参数的描述已从内核文档站点采用。[1]
- log_martians
在内核日志中记录地址无法记录的数据包。
类型 Default(默认) 布尔值
0
如果一个或多个
conf/{all,interface}/log_martians
设置为 TRUE,则启用更多资源
- accept_redirects
接受 ICMP 重定向消息。
类型 Default(默认) 布尔值
1
该接口的 accept_redirects 在以下情况下启用:
-
Both
conf/{all,interface}/accept_redirects
是 TRUE(启用接口转发时) -
至少有一个
conf/{all,interface}/accept_redirects
是 TRUE(接口转发已被禁用)
-
Both
- 转发
在接口上启用 IP 转发。
类型 Default(默认) 布尔值
0
更多资源
- mc_forwarding
进行多播路由。
类型 Default(默认) 布尔值
0
- 只读值
- 需要多播路由守护进程。
-
conf/all/mc_forwarding
还必须设置为 TRUE,以便为接口启用多播路由
更多资源
- medium_id
用于根据所附加介质区分设备的任意值。
类型 Default(默认) 整数
0
备注
- 当广播数据包只在其中一个上接收时,同一介质中的两个设备可能具有不同的 ID 值。
- 默认值为 0,表示该设备是其介质的唯一接口
- -1 的值表示介质未知。
- 目前,它被用来更改 proxy_arp 行为:
- proxy_arp 功能针对在附加到不同介质的两个设备之间转发的数据包启用。
- proxy_arp
代理 arp.
类型 Default(默认) 布尔值
0
如果至少有一个
conf/{all,interface}/proxy_arp
设置为 TRUE,则 接口的 proxy _arp 会被启用
- proxy_arp_pvlan
专用 VLAN 代理 arp.
类型 Default(默认) 布尔值
0
允许代理 arp 回复同一接口,以支持 RFC 3069等功能
- shared_media
send(router)或接受(主机)RFC1620 共享介质重定向.
类型 Default(默认) 布尔值
1
备注
- 覆盖 secure_redirects.
-
如果至少有一个
conf/{all,interface}/shared_media 设置为 TRUE,接口的 shared _media
会被启用
- secure_redirects
仅接受 ICMP 重定向消息到接口的当前网关列表中列出的网关。
类型 Default(默认) 布尔值
1
备注
- 即使禁用,仍然应用 RFC1122 重定向规则。
- 被 shared_media 覆盖。
-
如果至少有一个
conf/{all,interface}/secure_redirects 设置为 TRUE,则接口的 secure_redirects
会被启用
- send_redirects
发送重定向(如果路由器)。
类型 Default(默认) 布尔值
1
如果至少有一个
conf/{all,interface}/send_redirects 设置为 TRUE,则会启用接口的
send_redirects
- bootp_relay
接受源地址为 0.b.c.d 的数据包,其目的地为本地主机。
类型 Default(默认) 布尔值
0
备注
- 必须启用 BOOTP 守护进程来管理这些数据包
-
还必须将
conf/all/bootp_relay
设置为 TRUE,以便为接口启用 BOOTP 转发 - 未实施,请参阅 Red Hat Enterprise Linux 网络指南中的 DHCP 转发代理
- accept_source_route
通过 SRR 选项接受数据包。
类型 Default(默认) 布尔值
1
备注
-
还必须将
conf/all/accept_source_route
设置为 TRUE,以接受接口上的 SRR 选项的数据包
-
还必须将
- accept_local
接受具有本地源地址的数据包.
类型 Default(默认) 布尔值
0
备注
- 结合合适的路由,这可用于通过线路在两个本地接口之间定向数据包,并让它们正确接受。
-
rp_filter
必须设置为非零值,以便 accept_local 生效。
- route_localnet
在路由时,请勿将环回地址视为 martian 源或目的地。
类型 Default(默认) 布尔值
0
备注
- 这允许将 127/8 用于本地路由。
- rp_filter
启用源验证
类型 Default(默认) 整数
0
值 效果 0
没有源验证。
1
RFC3704 Strict Reverse Path 中定义的严格模式
2
松散模式,如 RFC3704 Loose Reverse Path 中定义的
备注
- RFC3704 中的当前推荐做法是启用严格的模式,以防止 IP 欺骗 DDos 攻击。
- 如果使用非对称路由或其他复杂的路由,则建议使用松散模式。
-
在 {
interface} 上进行源验证时,使用来自conf/{all,interface}/rp_filter
的最高值。
- arp_filter
类型 Default(默认) 布尔值
0
值 效果 0
(默认)内核可使用来自其他接口的地址响应 arp 请求。这通常会有意义,因为它会增加成功通信的机率。
1
允许在同一子网上具有多个网络接口,并且每个接口的 ARP 应答取决于内核是否将 ARP 的 IP 中的数据包路由出该接口(因此,您必须使用基于源的路由才能使此接口正常工作)。换句话说,它允许控制响应 arp 请求的卡片(通常是 1)。
备注
- IP 地址归 Linux 上的完整主机所有,而不是由特定接口所有。只有对于更复杂的设置(如负载平衡),这个行为才会造成问题。
-
如果至少有一个
conf/{all,interface}/arp_filter 设置为 TRUE,则
会被启用接口的 arp
_filter
- arp_announce
在接口上发送的 ARP 请求中从 IP 数据包发布本地源 IP 地址时定义不同的限制级别
类型 Default(默认) 整数
0
值 效果 0
(默认)使用任何本地地址,在任何接口上配置
1
尝试避免此接口不在目标子网中的本地地址。当通过此接口访问的目标主机需要 ARP 请求中的源 IP 地址作为其接收接口上配置的逻辑网络的一部分时,此模式很有用。在生成请求时,我们将检查我们包括目标 IP 的所有子网,并在源地址来自此类子网时保留源地址。如果没有这样的子网,则根据级别 2 的规则选择源地址。
2
始终为此目标使用最佳的本地地址。在此模式下,我们忽略 IP 数据包中的源地址,并尝试选择我们喜欢与目标主机通信的本地地址。通过在包含目标 IP 地址的传出接口上在所有子网上查找主 IP 地址来选择此类本地地址。如果没有找到合适的本地地址,我们将选择我们在传出接口上或所有其他接口上具有的第一个本地地址,我们希望我们收到回复,即使我们宣布的源 IP 地址是什么。
备注
-
使用来自
conf/{all,interface}/arp_announce
的最大值。 - 提高限制级别,为从已解析的目标处收到答案,同时降低级别宣布更有效的发送者的信息提供了更多机会。
-
使用来自
- arp_ignore
定义不同的发送回复模式,以响应解析本地目标 IP 地址的接收 ARP 请求
类型 Default(默认) 整数
0
值 效果 0
(默认):回复任何本地目标 IP 地址,在任何接口上配置
1
仅当目标 IP 地址是传入接口上配置的本地地址时才回复
2
仅当目标 IP 地址是传入接口上配置的本地地址并且发件人 IP 地址是此接口上同一子网中的一部分时才回复
3
不要回复通过范围主机配置的本地地址,只回复全局地址和链接地址的解决方案
4-7
保留
8
在 {interface} 上收到 ARP 请求时,请勿回复来自 conf/{all,interface}/arp_ignore 的最大值。
备注
- arp_notify
定义用于地址和设备更改通知模式。
类型 Default(默认) 布尔值
0
值 效果 0
不做任何操作
1
在设备启动或硬件地址更改时生成无饱和的 arp 请求。
备注
- arp_accept
定义 ARP 表中尚不存在的粒度 ARP 帧的行为
类型 Default(默认) 布尔值
0
值 效果 0
不要在 ARP 表中创建新条目
1
在 ARP 表中创建新条目。
注意
如果此设置开启,回复和请求类型的粒度 arp 都会触发要更新的 ARP 表。如果 ARP 表已包含粒度 arp 帧的 IP 地址,则会更新 arp 表,不论此设置是开启还是关闭。
- app_solicit
在退回到多播探测前通过网络链接发送到用户空间 ARP 守护进程的最大探测数(请参见 mcast_solicit)。
类型 Default(默认) 整数
0
备注
请参阅 mcast_solicit
- disable_policy
禁用此接口的 IPSEC 策略(SPD)
类型 Default(默认) 布尔值
0
needinfo
- disable_xfrm
禁用这个接口上的 IPSEC 加密,无论策略是什么
类型 Default(默认) 布尔值
0
needinfo
- igmpv2_unsolicited_report_interval
下一个主动 IGMPv1 或 IGMPv2 报告重新传输的间隔以毫秒为单位。
类型 Default(默认) 整数
10000
备注
Milliseconds
- igmpv3_unsolicited_report_interval
下次非请求 IGMPv3 报告重新传输的间隔以毫秒为单位。
类型 Default(默认) 整数
1000
备注
Milliseconds
- tag
允许您编写一个数字,根据需要使用。
类型 Default(默认) 整数
0
- xfrm4_gc_thresh
为 IPv4 目标缓存条目开始收集垃圾回收的阈值。
类型 Default(默认) 整数
1
注意
在这个值上两次,系统会拒绝新分配。
2.3.2. 全局内核 tunables
系统管理员能够通过全局内核可调项配置和监控正在运行的系统上的常规设置。
全局内核可调项包含在 /proc/sys/kernel/
目录中,可直接作为指定控制文件或分组到其他子目录中,以用于各种配置主题。要调整全局内核可调项,系统管理员需要修改控制文件。
以下参数的描述已在内核文档站点中使用。[2]
- dmesg_restrict
指明是否禁止非特权用户使用
dmesg
命令查看来自内核日志缓冲器的消息。
- core_pattern
指定核心转储文件模式名称。
最大长度 Default(默认) 128 个字符
"核心"
- hardlockup_panic
当检测到硬锁定时,控制内核 panic。
类型 值 效果 整数
0
内核在硬锁定时不会 panic
整数
1
硬锁定中的内核 panic
为了 panic,系统需要首先检测硬锁定。检测由 nmi_watchdog 参数控制。
更多资源
- softlockup_panic
当检测到软锁定时,控制内核 panic。
类型 值 效果 整数
0
内核在软锁定时不 panic
整数
1
软锁定中的内核 panics
默认情况下,在 RHEL7 上,这个值为 0。
有关
softlockup_panic
的更多信息,请参阅 kernel_parameters。
- kptr_restrict
指明是否对通过
/proc
和其他接口公开内核地址施加限制。类型 Default(默认) 整数
0
值 效果 0
在打印前对内核地址进行哈希处理
1
在某些情况下,将打印的内核指针替换为 0 的指针
2
无条件地替换打印的内核指针
如需更多信息,请参阅 Kernel sysctl 文档。
- nmi_watchdog
控制 x86 系统上的硬锁定检测器。
类型 Default(默认) 整数
0
值 效果 0
禁用锁定检测器
1
启用锁定检测器
硬锁定检测器会监控每个 CPU 是否有响应中断的能力。
如需了解更多详细信息,请参阅 Kernel sysctl 文档。
- watchdog_thresh
控制 watchdog
hrtimer
、NMI 事件和软/硬锁定阈值的频率。默认阈值 软锁定阈值 10 秒
2 *
watchdog_thresh
将此可调项设置为零可完全禁用锁定检测。
- panic, panic_on_oops, panic_on_stackoverflow, panic_on_unrecovered_nmi, panic_on_warn, panic_on_rcu_stall, hung_task_panic
这些可调项在哪些情况下指定内核应 panic。
要查看有关一组
panic
参数的详情,请参阅 Kernel sysctl 文档。
- printk, printk_delay, printk_ratelimit, printk_ratelimit_burst, printk_devkmsg
这些可调项控制记录或打印内核错误消息。
有关
printk
参数组的详情,请参阅 Kernel sysctl 文档。
- shmall, shmmax, shm_rmid_forced
这些可调项对共享内存的控制限制。
有关
shm
参数组的详情,请参考 Kernel sysctl 文档。
- threads-max
控制
fork()
系统调用所创建的线程的最大数量。Min 值 最大值 20
由 FUTEX_TID_MASK(0x3fffff)提供.
按照可用的 RAM 页面检查 threads
-max
值。如果线程结构占用了太多可用 RAM 页面,readm-max
会相应地减少。如需了解更多详细信息,请参阅 Kernel sysctl 文档。
- pid_max
PID 分配总结值.
要查看更多信息,请参阅 Kernel sysctl 文档。
- numa_balancing
此参数启用或禁用自动 NUMA 内存均衡。在 NUMA 计算机上,如果 CPU 访问远程内存,则性能会受到影响。
如需了解更多详细信息,请参阅 Kernel sysctl 文档。
- numa_balancing_scan_period_min_ms, numa_balancing_scan_delay_ms, numa_balancing_scan_period_max_ms, numa_balancing_scan_size_mb
这些可调项可检测页面是否正确放置到运行任务的本地内存节点。
有关
numa_balancing_scan
参数组的详情,请参阅 Kernel sysctl 文档。