用ulimit来调整最大文件描述符数量

打开的文件和socket都要占用文件描述符fd,在某些场景fd就不够用了,这时就需要用ulimit来调整当前系统的最大fd数量。
ulimit 限制的是当前 shell 进程以及其派生的子进程。
如果没有root权限的话,只能压低限制而不能提升。
可以放在启动脚本,或者直接在shell中运行。
ulimit -a 查看所有限制,以及设定参数。
ulimit -n 1000000 #文件描述符数量
ulimit -f 1000 #创建文件的大小,手册上说是blocks(512 bytes),但是试了下似乎是kb
ulimit -v 1000 #每个进程能够使用的虚拟内存
ulimit -s 1024 #线程堆栈的大小
ulimit -c unlimited #core dump文件限制,默认关闭

永久修改最大文件描述符数
#----------------------------------------------------------------------
if ! grep /etc/security/limits.conf -rne '^[^#].*nofile'; then
        sudo sed /etc/security/limits.conf -e '/End of file/i\
*                soft   nofile          100000\
*                hard   nofile          100000\
root             soft   nofile          100000\
root             hard   nofile          100000' -i
fi
#----------------------------------------------------------------------


开启core dump
#----------------------------------------------------------------------
if ! grep /etc/security/limits.conf -rne '^[^#].*core'; then
        sudo sed /etc/security/limits.conf -e '/End of file/i\
*                soft    core            100000\
*                hard    core            100000\
root             soft    core            100000\
root             hard    core            100000' -i
fi
#----------------------------------------------------------------------

允许core dump保留pid信息:
将下面两句加入rc.local:
echo "1" > /proc/sys/kernel/core_uses_pid
echo "/root/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
#----------------------------------------------------------------------
if ! grep /etc/rc.local -rne core_pattern; then
        sudo sed /etc/rc.local -e'/^exit 0/iecho 1 > /proc/sys/kernel/core_uses_pid\necho /root/core-%e-%p-%t > /proc/sys/kernel/core_pattern' -i
fi
#----------------------------------------------------------------------

更详细的可以 man limits.conf

你可能感兴趣的:(Linux&Unix,Shell)