root 用户的默认资源上限

root 用户的默认资源上限

我偶然发现,在我的 Ubuntu 12.04 上,root 用户的一些资源被限制了。我没有明确限制任何东西,就 root 用户而言,我的 limits.conf 是空的。以下是 root 用户的 ulimit -a 的输出

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 95931
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 95931
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

所以我相信这是默认的上限。所以我的问题是默认限制 root 用户的这些资源的原因是什么?现在,当我尝试使用以下命令以 root 用户身份将文件限制设置为无限制时,我收到操作不允许的错误。

ulimit -H -n unlimited

是什么阻止我将限制设置为无穷大以及将其设置为无穷大是否安全?

答案1

init这些默认限制已硬编码到内核源代码中。这些限制由内核为进程设置,其他进程从中继承init。请参阅这里

为什么在尝试将打开文件数设置为无限制时会出错,可能是因为系统范围的设置不是无限制的,请使用 进行检查cat /proc/sys/fs/file-max。请参阅这里

文件最大值和文件编号:

file-max 中的值表示 Linux 内核将分配的最大文件句柄数。当您收到大量有关文件句柄用尽的错误消息时,您可能需要增加此限制。

echo 300000 > /proc/sys/fs/file-max如果您以 root 身份运行,或者使用root 身份运行,则可以更改该系统范围的限制sysctl -w fs.file-max=300000。要使这些更改永久生效,请添加类似于以下内容的行

fs.file-max=300000

/etc/sysctl.conf文件,例如以echo "fs.file-max=300000" >> /etc/sysctl.confroot 身份运行。

相关内容