我偶然发现,在我的 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.conf
root 身份运行。