我正在运行一个 csh 脚本,该脚本在运行科学模型之前调用unlimit
和。limit
该脚本看起来像这样(为简洁起见被截断):
#!/bin/csh -f
# ...
unlimit
limit
/usr/bin/time $BLD/$EXEC # Where `$BLD/$EXEC` is the path to the model
date
exit
运行脚本会产生以下错误:
unlimit
unlimit: memorylocked: Can't remove limit
unlimit: maxproc: Can't remove limit
unlimit: openfiles: Can't remove limit
从 Bash检查ulimit
:
$ 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) 63711
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) 63711
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
从 csh尝试unlimit
(不指定任何资源):
$ sudo csh
# unlimit
unlimit: memorylocked: Can't remove limit
unlimit: maxproc: Can't remove limit
unlimit: openfiles: Can't remove limit
limit
csh的输出,并尝试unlimit
使用指定的资源:
$ sudo csh
# whoami
root
# limit
cputime unlimited
filesize unlimited
datasize unlimited
stacksize 8192 kbytes
coredumpsize 0 kbytes
memoryuse unlimited
memorylocked 64 kbytes
maxproc 63711
openfiles 1024
# unlimit openfiles
unlimit: openfiles: Can't remove limit
# unlimit memorylocked
unlimit: memorylocked: Can't remove limit
我运行的是 Ubuntu 14.04:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
我猜测运行unlimit
应该在运行模型之前消除所有资源限制,并且 的输出limit
应该验证这一点。为什么 root 用户无法消除限制?unlimit
只能以 root 身份运行吗?
答案1
ulimit 试图将这些资源的最大使用量增加到高于 sysctl 为整个系统配置的最大使用量。此外,实际上不可能为 Linux 配置无限数量的某些资源,例如打开的文件。
请注意,限制所有资源并不是一个好主意——如果模型失败,您真的需要几 GB 的核心转储吗?仅增加那些对运行模型造成瓶颈的资源。由于您可以成功运行模型,这表明您的现代计算机上的可用资源可能比最初编写代码的计算机上的可用资源多得多。
答案2
请参阅csh
手册页,它记录了limit
和unlimit
内置函数。是unlimit
删除所有限制, 是limit
打印当前限制。我猜写这篇文章的人在某个时候遇到了某种资源限制问题,并将它们作为一种防御手段,以确保没有限制并打印它们(如果有)。