apernet / hysteria-website

MIT License
11 stars 10 forks source link

【BUG】系统缓冲区大小 #31

Open zhangtony239 opened 1 month ago

zhangtony239 commented 1 month ago

官网文档中使用了sysctl -w来写入配置,但实测我这固化不了,得nano /etc/sysctl.conf写入才行。

Ubuntu 24.04 6.8.0-36-generic

36-Ubuntu SMP PREEMPT_DYNAMIC Mon Jun 10 10:49:14 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

haruue commented 1 month ago

这个算系统差异, 比如在 Arch Linux 上, 得写到 /etc/sysctl.d/*.conf 才行

zhangtony239 commented 1 month ago

还是建议在文档中补一下了,谢谢!

haruue commented 1 month ago

研究了下 sysctl 的 -w 选项应该是从来都没有过持久化的功能。

在 procps 于 2002 年的 最早版本(以前他们可能使用别的版本控制)中, sysctl 的 -w 选项是用于开启 WriteMode , 当时的 sysctl 只有在指定 -w 时, 才会将后续的参数 parse 成赋值, 以及「写入」到 /proc/sys 下的对应文件里。(没错, Linux 的 sysctl, 其实就是将 key 的 . 换成 / 接在 /proc/sys/ 后变成文件路径, 然后对这个路径进行读写, 例如 net.ipv4.tcp_congestion_control 实际上就对应 /proc/sys/net/ipv4/tcp_congestion_control)。

这个行为在两年后的 这个版本 中就被改变, 如果后面的参数包含 =, 那么也视为 WriteMode。 从这时候开始指定 -w 其实就不必要了。

在 2018 年, 有人注意到了这个问题, 这时候 sysctl 已经支持指定多个 key 了。 -w 的文档被从「Use this option when you want to change a sysctl setting.」变更为「Use this option when all arguments prescribe a key to be set.」, 也就是说, -w 只用于强制这条命令是「设置」选项。

haruue commented 1 month ago

能在所有系统上同时 设置+持久化 的命令应该是下面这样

sysctl -w net.core.rmem_max=16777216 >> /etc/sysctl.d/99-sysctl.conf

有点太长了, 我们考虑一下怎么在文档里提及它。