如果我像这样更改设置:
# sysctl -w net.core.rmem_default=500000
# sysctl -w net.ipv4.tcp_rmem='4000 90000 10000000'
- 在重型实时生产机器(CentOS 7)上执行此操作安全吗?是否存在已知风险?
- 此更改是否适用于当前正在系统上传输数据的先前建立的套接字?
- 如果不是,那么此更改是否需要重新启动进程或 shell 才能生效?
答案1
它是完全安全的。
不是,这些 sysctl 变量的新值仅影响新的套接字。
重启后,进程将使用新的默认值重新创建套接字。但进程可以使用 SO_RCVBUF 套接字选项自行设置缓冲区大小。
答案2
根据 redhat 文档,rmem_default 不应大于 rmem_max。
rmem_default:是所有连接类型的默认 OS 接收缓冲区大小。因此,除非绝对需要,否则不要给出太大的值(大多数情况下,默认值有效)。
tcp_rmem :第一个值告诉内核每个 TCP 连接的最小接收缓冲区,并且此缓冲区始终分配给 TCP 套接字,即使在系统压力很大的情况下也是如此。... 指定的第二个值告诉内核为每个 TCP 套接字分配的默认接收缓冲区。此值将覆盖其他协议使用的 /proc/sys/net/core/rmem_default 值。... 此变量中指定的第三个也是最后一个值指定可以为 TCP 套接字分配的最大接收缓冲区。
您可以通过以下方式重新加载设置sysctl --系统