是否有可能改变软-和硬限制一个的具体过程?
就我而言,我的流程是mongod,很多网络资源告诉我只需执行:
ulimit -n <my new value>
Run Code Online (Sandbox Code Playgroud)
我目前的想法:
我看到人们交替使用术语ulimit & rlimit,我可以说他们指的是同一件事吗?
为了防止分叉炸弹,我遵循了这个http://www.linuxhowtos.org/Tips%20and%20Tricks/ulimit.htm
ulimit -a体现了新的设置,但是当我运行(如root中bash):(){ :|:&};:的虚拟机仍继续最大CPU +内存,系统将冻结。
如何确保用户不会因为使用 fork 炸弹或运行有缺陷的应用程序而导致系统瘫痪?
操作系统:RHEL 6.4
我记得最近的事情是将软硬内存锁 ulimit 更改为无限制。现在我无法通过 ssh 进入机器。
这是 ssh 日志。
Authenticated to IP ([IP]:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug1: Sending environment.
debug1: Sending env LC_CTYPE =
debug2: channel 0: request env confirm 0
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 …Run Code Online (Sandbox Code Playgroud) 我在不同的 GNU/Linux 安装上对此进行了测试:
perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'
Run Code Online (Sandbox Code Playgroud)
系统 A 和 D
我遇到的第一个限制是 1024。通过将其放入 /etc/security/limits.conf 可以轻松提高:
* hard nofile 1048576
Run Code Online (Sandbox Code Playgroud)
然后运行:
ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)
现在测试转到 1048576。
但是,似乎我无法将其提高到 1048576 以上。如果我将 1048577 放在limits.conf 中,它就会被忽略。
这是什么原因造成的?
系统B
在系统 BI 上甚至无法到达 1048576:
echo 99999999 | sudo tee /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)
/etc/security/limits.conf:
* hard nofile 1048576
Run Code Online (Sandbox Code Playgroud)
在这里我得到:
$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK …Run Code Online (Sandbox Code Playgroud) 我有/etc/security/limits.conf,这似乎没有被应用:
a soft nofile 1048576 # default: 1024
a hard nofile 2097152
a soft noproc 262144 # default 128039
a hard noproc 524288
Run Code Online (Sandbox Code Playgroud)
a我的用户名在哪里,当我运行ulimit -Hn和 时ulimit -Sn,它显示:
4096
1024
Run Code Online (Sandbox Code Playgroud)
只有一个其他文件/etc/security/limits.d的内容是:
scylla - core unlimited
scylla - memlock unlimited
scylla - nofile 200000
scylla - as unlimited
scylla - nproc 8096
Run Code Online (Sandbox Code Playgroud)
我还尝试将这些值附加到/etc/security/limits.conf然后重新启动,并执行以下操作:
echo '
session required pam_limits.so
' | sudo tee -a /etc/pam.d/common-session
Run Code Online (Sandbox Code Playgroud)
但它没有用。我的操作系统是Ubuntu 17.04.
问题的上下文:根据POSIX 规范, ARG_MAX 是函数系列的命令行参数的最大长度exec()。这让我相信这是实际的参数数量,但这显然不起作用:
$ ulimit -s
8192
$ touch {1..18000}.jpg
$ rm *.jpg
$
Run Code Online (Sandbox Code Playgroud)
显然,尽管长度超过 8192 个项目,但效果很好。根据DW 的回答,8192应该以 kB 为单位的大小。很明显,之前的假设是错误的。
这是实际的问题进来:我如何找出项目的实际金额将获得上述8192 KB的限制?换句话说,我必须执行什么样的计算才能确保这种*.jpg类型的 glob 会导致Argument list too long错误?
请注意,这不是What 定义单个命令参数的最大大小的副本。我知道getconf ARG_MAX和ulimit -s价值观,这不是我的问题。我需要知道如何生成大小超过 limit 的足够多的参数。换句话说,我需要找到一种方法来获取错误,而不是避免它。
本文声称该-m标志ulimit在现代 Linux 中没有任何作用。我找不到其他任何东西来证实这一说法。它准确吗?
您可以尝试通过设置最大驻留集大小 (ulimit -m) 来限制进程的内存使用。这对 Linux 没有影响。man setrlimit 说它曾经只适用于古代版本。您应该限制最大虚拟内存量 (ulimit -v)。
如果它确实在旧版本的 Linux 中工作,那么哪个版本停止支持它?
我正在尝试了解 Linux 进程。我对各自的术语感到困惑pid_max,ulimit -u和thread_max。
这些术语之间究竟有什么区别?有人可以澄清这些差异吗?
当我运行 docker 并使用该--ulimit memlock=-1:-1选项时,-1 的软/硬值是什么意思?这是否意味着我允许此容器/进程锁定无限量的内存?