打开的文件和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
阅读(8510) | 评论(0) | 转发(1) |