ulimit资源限制
有时候一个程序在一台主机上跑得好好的,拿到另一个主机上跑,却出问题了。或都内存不够,或都文件数不对,或报段错误等。
这时有可能是系统资源作了限制。
了解系统资的限制工具:
ulimit命令:
ulimit为shell内建指令,可用来控制shell执行程序的资源。
在我的fadora 里的资源限制情况:
[root@localhost long]# 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) 3845
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 4096
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) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
下面是对应参数解析
-a 列出所有当前资源极限。
-c 以 512 字节块为单位,指定核心转储的大小。
-d 以 K 字节为单位指定数据区域的大小。
-f 使用 Limit 参数时设定文件大小极限(以块计),或者在未指定参数时报告文件大小极限。缺省值为 -f 标志。
-H 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限。
-m 以 K 字节为单位指定物理存储器的大小。
-n 指定一个进程可以拥有的文件描述符的数量的极限。
-s 以 K 字节为单位指定堆栈的大小。
-S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者。
-t 指定每个进程所使用的秒数。
ulimit 命令是shell启动的,也就是只能修改当前的工作环境。
如果要系统自动记住这个配置,就编辑/etc/profile文件,
在 “ulimit -S -c 0 > /dev/null 2>&1”行下,添加“ulimit -s 262140”,保存重启系统就可以了!
下面可以测试一下:
ulimit -f 1 //文件的最大块数是1. 而我的系统1块是1K. 即限制了文件最大1K。
[long@localhost less1]$ ulimit -f
1
用perl 写一个文件,结果报错。
[long@localhost less1]$ ./mkexc_id.pl > file.txt
文件大小超出限制(吐核)
查看此时,file.txt 最的大小:
[long@localhost less1]$ ls -rlt aa
-rw-rw-r-- 1 long long 1024 7月 17 13:47 file.txt
可以看出是的1024k.
其他资源的限制类似