文章历史示例中,父 shell 的软硬值保持 32/64。第一个子进程只把自身改成 48/64;第二个子进程仍继承 32/64,修改不反向传播。

在真正启动工作负载的进程中设置文件上限

shell 内建的 ulimit 改变的是该 shell 及其随后启动进程的资源限制。对于文件描述符,RLIMIT_NOFILE 包含当前生效的软值与硬性上界。当终端显示很宽松的数字,独立受管服务却仍然无法打开文件或接受连接时,关键往往在于这些值从哪里继承。只知道某个命令可以调大数字,并不足以证明改到了真正执行工作负载的进程。 限制从实际启动者传给新子进程,子进程局部修改不会反向传播。Bash 赋值若不选 -S 或 -H,可能同时降低软硬值。 坏掉的样子 软值通常约束新的描述符分配。普通进程可以在现有硬上限内提高软值,也可以降低硬值;提高硬值则需要相应权限,而且仍然受内核约束。因此,启动时继承的硬值太低,可能使应用无法设置自己打算使用的软值。不能只检查应用配置写了多少,还要核对它是否真正有能力应用那个数字,以及失败有没有被正确处理。 ...

七月 19, 2027 · 2 分钟 · XB Field Notes