文章目录
- 参数查看和修改
- 网络
- net.core.netdev_max_backlog
- net.core.netdev_budget_usecs
- net.core.netdev_budget
- net.ipv4.conf.all.rp_filter=0
- net.ipv4.conf.default.rp_filter=0
- net.ipv4.conf.default.arp_announce=2
- net.ipv4.conf.lo.arp_announce=2
- net.ipv4.conf.all.arp_announce=2
- net.ipv4.tcp_max_tw_buckets=5000
- net.ipv4.tcp_syncookies=1
- net.ipv4.tcp_max_syn_backlog=1024
- net.ipv4.tcp_synack_retries=2
- net.ipv4.tcp_keepalive_time=1800
- net.ipv4.tcp_keepalive_probes=3
- net.ipv4.tcp_keepalive_intvl=15
- net.core.rmem_max = 128000000
- net.core.somaxconn = 10000
- net.core.busy_poll = 0
- net.core.busy_read = 0
- 准备看代码了解参数作用
- 文件系统
- fs.file-max = 655350
- 进程资源
- kernel.pid_max = 655350
- 内核
- kernel.randomize_va_space
- 调试
- kernel.core_pattern = core.%e
参数查看和修改
全部参数查看:
sysctl -a
参数修改临时示例:
$ sudo sysctl -w net.core.netdev_budget=3600
参数永久修改可以写入/etc/sysctl.conf 文件。
网络
net.core.netdev_max_backlog
net.core.netdev_max_backlog 是 Linux 内核中的一个参数,它定义了允许送到队列的数据包的最大数目,也就是网卡设备将请求放入队列的长度。
- 值通常是 1000
在高速链路上,如果网络流量非常大,可能需要增加这个值以避免数据包丢失。可以通过查看 /proc/net/softnet_stat 文件来确定是否发生了 netdev backlog 队列溢出,其中第二列代表了由于 netdev_max_backlog 队列溢出而被丢弃的包总数。
net.core.netdev_budget_usecs
netdev_budget_usecs 是 Linux 内核中的一个参数,用于控制 NAPI(New API)轮询周期的最大时长。
- 值通常是 2000 表示 2000 微秒(2 毫秒)
如果网络环境需要更快的数据处理,可以适当增加这个值;反之,如果需要减少网络数据处理对 CPU 的占用,可以减小这个值。
net.core.netdev_budget
netdev_budget 是 Linux 内核中的一个参数,用于控制网络设备在 NAPI(New API)轮询模式下,每次软中断(softirq)处理过程中允许处理的最大数据包数量。
- 值通常是 300
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.all.rp_filter 是一个网络配置参数,用于设置反向路径过滤(Reverse Path Filtering)的行为。反向路径过滤是一种网络安全特性,用于防止IP地址欺骗和保护网络不受某些类型的攻击。
默认是1:
- 值1(严格模式):仅当数据包的源地址可以通过路由器的反向路径到达时,数据包才会被接受。这是最安全的模式,但可能会误杀一些合法的流量。
- 值0(宽松模式):数据包的源地址不经过反向路径过滤检查,可能会接受一些伪造的IP地址数据包。
- 值2(松散模式):仅当数据包的源地址严格匹配反向路径时,数据包才会被接受。这比严格模式更宽松,但比宽松模式更严格。
在路由器或防火墙上启用反向路径过滤,可以提高网络的安全性,防止外部的攻击。在内部网络中,反向路径过滤可以帮助防止内部主机之间的IP地址欺骗。反向路径过滤可能会对网络性能产生一定影响,因为它需要额外的路径检查。在某些情况下,严格的反向路径过滤可能会误杀一些合法的流量,比如通过NAT转换的流量。
net.ipv4.conf.default.rp_filter=0
同上。
net.ipv4.conf.default.arp_announce=2
net.ipv4.conf.default.arp_announce 是Linux内核中的一个网络配置参数,用于设置默认的ARP(地址解析协议)宣告行为。这个参数影响系统如何处理发送ARP请求和响应ARP请求的行为。用于控制ARP宣告、防止ARP泛洪、地址冲突检测。
默认是1:
- 0:允许频繁地发送ARP宣告,适用于某些特殊网络环境。
- 1(默认):限制ARP宣告的速率,以防止ARP泛洪。
- 2:进一步限制ARP宣告,只在确认地址冲突时才发送。
性能影响:较低的arp_announce值可能会增加网络上的ARP流量,从而影响网络性能。
安全性:较高的arp_announce值可以帮助检测和解决地址冲突,但也可能被用于某些类型的网络攻击
net.ipv4.conf.lo.arp_announce=2
同上。
net.ipv4.conf.all.arp_announce=2
同上。
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.tcp_max_tw_buckets 是Linux内核中的一个网络配置参数,用于设置TCP协议的"Time Wait"套接字(sockets)的最大数量。这个参数对系统如何处理TCP连接的关闭过程有直接影响。作用:限制Time Wait套接字数量、避免资源耗尽、调整网络性能。
默认值:32768
高并发服务器:在高并发的网络服务器环境中,限制"Time Wait"套接字的数量可以防止系统资源耗尽。
性能调优:在需要优化TCP连接性能的场景下,可能需要调整这个参数以适应特定的网络流量模式。
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies 是 Linux 内核中的一个网络配置参数,它用于启用或禁用 TCP 同步 cookies(也称为 SYN cookies)。这是一种安全特性,旨在减轻 SYN 洪泛(SYN flood)攻击的影响。
默认值:1,表示启用
高风险服务器:对于容易受到 SYN 洪泛攻击的服务器(如 Web 服务器、邮件服务器等),启用 TCP 同步 cookies 是一种有效的防御措施。
资源受限环境:在资源有限的环境中,启用 TCP 同步 cookies 可以帮助服务器更好地处理大量的连接请求。
net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_max_syn_backlog 是Linux内核中的一个网络配置参数,用于设置TCP协议在三次握手过程中,对于尚未完成握手的连接请求(即处于SYN接收状态的连接)的最大队列长度。
默认值:512
资源限制:如果设置的值过高,可能会导致服务器因为跟踪太多半打开的连接而耗尽资源。
安全风险:如果设置的值过低,可能会使服务器容易受到SYN洪泛攻击的影响。
性能影响:较大的值可能会提高服务器处理连接请求的能力,但也可能会增加内存的使用量。
系统默认值:大多数Linux发行版的默认值已经适合大多数场景,但根据具体的网络环境和需求,可能需要进行调整。
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_synack_retries 是Linux内核中的一个网络配置参数,用于设置在TCP三次握手过程中,内核在接收到初始SYN请求后,重传SYN-ACK(同步确认)数据包的最大次数。
默认值:5
网络不稳定环境:在网络连接不稳定或延迟较高的环境中,适当增加重传次数可以帮助确保TCP连接的成功建立。
性能调优:在某些性能敏感的应用中,可能需要调整重传次数以优化连接建立的响应时间
net.ipv4.tcp_keepalive_time=1800
net.ipv4.tcp_keepalive_time 是Linux内核中的一个网络配置参数,它定义了TCP连接在没有任何数据交换的情况下,内核在发送keepalive探测之前等待的时间长度。
默认值:7200,表示7200分钟
长时间连接:对于需要维持长时间连接的应用(如数据库连接、远程桌面等),keepalive可以帮助确保连接的活跃性。
网络不稳定环境:在网络连接可能不稳定的环境中,适当调整keepalive时间可以帮助快速发现并关闭无效连接。
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_keepalive_probes 是Linux内核中的一个网络配置参数,它定义了当TCP连接在一段时间内没有任何数据交换后,内核在放弃连接之前发送的keepalive探测包的最大数量。
默认值:9
过多的keepalive探测可能会增加网络流量和系统负载,但过少的探测可能不足以确保及时检测到死连接。
长时间空闲连接:对于可能长时间空闲但仍需要维持的连接,keepalive探测可以帮助确保连接的及时检测和关闭。
网络不稳定环境:在网络连接可能不稳定的环境中,适当调整keepalive探测次数可以帮助快速发现并关闭无效连接。
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_intvl 是 Linux 内核中的一个网络配置参数,它定义了在 TCP 连接的 keepalive 探测过程中,内核发送连续的 keepalive 探测包之间的时间间隔。
默认值:75
过短的探测间隔可能会增加网络流量和系统负载,但过长的间隔可能不足以及时检测到死连接。
长时间空闲连接:对于需要长时间保持活跃状态的连接,适当调整探测间隔可以确保连接的及时检测和维护。
网络不稳定环境:在网络连接可能不稳定的环境中,增加探测频率可以帮助快速发现并处理无效连接。
net.core.rmem_max = 128000000
net.core.rmem_max 是 Linux 内核中的一个网络配置参数,用于设置 socket 接收缓冲区的最大大小。这个参数影响 TCP 接收窗口的最大尺寸,进而影响网络数据传输的效率。
默认值:212992
高带宽网络:在高带宽网络连接上,增加 rmem_max 值可以提高数据接收的效率。
网络性能调优:在进行网络性能调优时,可能需要根据网络条件和应用需求调整接收缓冲区的大小。
net.core.somaxconn = 10000
net.core.somaxconn 是 Linux 内核中的一个网络配置参数,用于设置监听队列(listen queue)的最大长度。这个参数影响 TCP 服务器在处理大量并发连接请求时的行为。
默认值:4096
高并发服务器:在 Web 服务器、数据库服务器或其他需要处理大量并发连接请求的服务器上,可能需要调整 somaxconn 的值以提高性能。
性能调优:在进行网络性能调优时,可能需要根据服务器的负载和并发连接需求调整监听队列的长度。
net.core.busy_poll = 0
net.core.busy_poll 是 Linux 内核中的一个网络配置参数,它用于控制忙轮询(busy polling)的特性。忙轮询是一种网络接口卡(NIC)的驱动程序策略,它允许驱动程序连续检查接收到的数据包,而不是依赖于中断处理。
默认值:0,表示忙轮询默认被禁用
其他正数值表示在设备队列上忙轮询等待数据包的近似时间(以微秒为单位)。
较小的值(如10微秒)意味着忙轮询会更快地返回,因此CPU的使用率可能会相对较低。但这也可能导致错过一些数据包,从而影响性能。较大的值(如100微秒)意味着忙轮询会持续更长时间,可能会增加CPU的使用率,但也更有可能捕获到数据包,减少延迟。
启用忙轮询可能会提高网络性能,但也可能会增加 CPU 利用率,因为 CPU 需要更频繁地轮询网络接口卡。不适当的忙轮询级别可能会导致 CPU 过载,反而降低系统性能。
高性能网络应用:在需要最小化网络延迟和最大化吞吐量的应用中,如高频交易系统或某些类型的在线游戏,忙轮询可能提供性能优势。
网络性能调优:在进行网络性能调优时,可能需要根据网络硬件和应用需求调整忙轮询级别。
net.core.busy_read = 0
net.core.busy_read 是 Linux 内核中的一个网络配置参数,它与网络设备驱动程序的忙轮询(busy polling)特性相关。忙轮询是一种技术,允许驱动程序持续检查网络接口卡(NIC)是否有数据包到达,而不是依赖于传统的中断驱动方式。
默认值:0,表示忙轮询默认被禁用
其他正数值表示在设备队列上忙轮询等待数据包的近似时间(以微秒为单位)。
较小的值(如10微秒)意味着忙轮询会更快地返回,因此CPU的使用率可能会相对较低。但这也可能导致错过一些数据包,从而影响性能。较大的值(如100微秒)意味着忙轮询会持续更长时间,可能会增加CPU的使用率,但也更有可能捕获到数据包,减少延迟。
高性能网络设备:在高性能网络设备上,忙轮询可以显著提高数据包的处理速度和吞吐量。
实时系统:在需要严格实时响应的系统中,忙轮询可以减少数据包处理的延迟。
准备看代码了解参数作用
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
文件系统
fs.file-max = 655350
fs.file-max 是Linux内核的一个参数,用于设置系统级别的文件描述符(file descriptors)的最大数量。文件描述符是Linux系统中用于表示打开文件或其他输入/输出资源的抽象指标,它们被用于各种系统调用中。
默认值:9223372036854775807
服务器环境:在服务器上,尤其是Web服务器或数据库服务器,可能会需要打开大量的文件描述符来处理多个客户端连接。
性能监控:在系统性能监控和调优过程中,可能需要根据系统负载调整文件描述符的限制。
进程资源
kernel.pid_max = 655350
kernel.pid_max 是 Linux 内核中的一个参数,用于设置系统可以生成的最大进程标识符(Process Identifier,PID)的值。在 Linux 系统中,每个运行的进程都会被分配一个唯一的 PID。
默认值:4194304
高并发系统:在需要同时运行大量进程的系统中,可能需要增加 kernel.pid_max 的值。
系统调优:在系统性能调优过程中,可能需要根据系统负载和资源使用情况调整 kernel.pid_max 的值。
内核
kernel.randomize_va_space
randomize_va_space 是 Linux 内核的一个安全功能,用于实现地址空间布局随机化(ASLR, Address Space Layout Randomization)。这个功能通过随机化进程的内存地址空间来增加攻击者预测程序内存布局的难度,从而提高系统的安全性。
- 0:关闭进程地址空间随机化。这是默认值,对于不支持此功能的架构或者使用 norandmaps 参数启动的内核来说,ASLR 会被禁用。
- 1:开启部分随机化,包括 mmap 基地址、栈和 VDSO 页面的地址会被随机化。这意味着共享库将被加载到随机地址,对于使用位置无关可执行文件(PIE)链接的二进制文件,代码起始位置也会被随机化。
- 2:开启完全随机化,在级别 1 的基础上,进一步开启堆的随机化。
内核配置中启用了 CONFIG_COMPAT_BRK 选项,默认值是1;如果 CONFIG_COMPAT_BRK 被禁用默认值是2。
调试
kernel.core_pattern = core.%e
kernel.core_pattern 是 Linux 内核中的一个参数,用于定义内核转储(core dump)文件的命名规则和存储位置。当一个进程由于某些原因(如段错误)崩溃时,内核可以选择生成一个核心转储文件,这个文件包含了进程崩溃时的内存映像和寄存器状态等信息,这对于调试和分析程序错误非常有用。