为什么 ulimit 无法成功限制常驻内存以及如何限制?
我启动一个新的 bash shell,然后执行:
ulimit -m 102400
ulimit -a
"
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) 102400
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) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
"
然后,我执行编译一个巨大的项目。它的链接将使用大内存,超过2G。结果,进程ld使用了超过2G的常驻内存。
有什么不对吗?如何使用 ulimit 或者我可以使用其他程序来限制常驻内存?
限制常驻内存的目标是因为当一个进程几乎用完所有内存时计算机就会死机。
I start a new bash shell, and execute:
ulimit -m 102400
ulimit -a
"
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) 102400
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) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
"
and then ,I execute compiling a huge project. the Linking of it will use large memory, more then 2G. The result, process ld used more then 2G resident memory.
is there any wrong ? how to use ulimit or can I use other programs to limit resident memory?
the target of limit resident memory, is because computer will freeze when one process almost used all memory.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据
setrlimit< 的手册页/代码>
:
您可能想通过
ulimit -v
设置虚拟内存大小According to the man page for
setrlimit
:You probably want to set the virtual memory size instead, via
ulimit -v
您可以使用 cgroup 限制驻留内存。请参阅驻留集大小 (RSS) 限制不起作用< /a>
You can restrict the resident memory using cgroups. See Resident Set Size (RSS) limit has no effect
尽管限制
最大内存大小
不起作用,但您可以限制数据段大小
。这与驻留内存不同,但它仍然有助于防止内存使用失控。Although limiting
max memory size
doesn't work, you can limitdata seg size
. This isn't the same thing as resident memory, but it's still helpful in protecting against runaway memory usage.