Linux too many open file与Resource temporarily unavailable解决方法 |
发表者:admin分类:Devops2017-02-21 16:33:53 阅读[2880] |
Linux too many open file与Resource temporarily unavailable解决方法
Linux普通用户对打开文件最大数与最大用户进程数,有限制。
[ct@hbyjsdb ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 30439
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可以看出max user processes ,最大用户进程数,才1024,比较小。
open files ,最大打开文件数,才2048,也比较小。
下面说下具体情况,
如果是max user processes 参数太小,就会出现登陆账号出现,Resource temporarily unavailable错误提示。
nproc就是"max user processes",完整描述是: nproc - max number of processes
参数含义:
单个用户可以启动的线程数,因为进程也会启动一个线程,所以也间接对进程数有限制。
注意:
该参数只对普通用户有用,root用户不在此限制。 所以用root用户可以启动几万个线程,无法重现这个问题.
如果是open files ,最大打开文件数设置的参数过小,就会出现too many open file报错。
查看某一进程的打开文件数量:
lsof -p pid | wc -l
查看oracle用户下的打开文件数量:
lsof -u oracle |wc -l
这里参照oracle的配置信息,以下参数基本就是最大参数了。
# vi /etc/sysctl.conf
添加:
fs.file-max= 6815744
# sysctl –p 执行命令生效。
编辑/etc/security/limits.conf ,
由于普通用户有打开进程最大个数与打开文件最大数限制,所以需要修改。
# vi /etc/security/limits.conf
加入以下四行
oracle soft nproc 500000
oracle hard nproc 500000
oracle soft nofile 1048000
oracle hard nofile 1048000
或是将用户名换成 * 号,这样所有普通用户都会生效。
编辑/etc/pam.d/login,使用参数限制生效。
# vi /etc/pam.d/login
session required /lib64/security/pam_limits.so
session required pam_limits.so
(注意64位linux是/lib64 ,32位的是lib)
编辑系统环境配置文件/etc/profile,添加此参数的好处在于,用户很次登陆后都会生效。
需要在最后添加以下内容,
注意这里的参数不能大于limits.conf文件里面的参数。
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 500000
ulimit -n 1048000
else
ulimit -u 500000 -n 1048000
fi
fi
修改完成后最好重启下系统。
参 数:
-a
-c
-d
-f
-H
-m
-n
-p
-s
-S
-t
-u
-v
我们公司服务器需要调整ulimit的stack size 参数调整为unlimited 无限,使用ulimit -sunlimited时只能在当时的shell见效,重开一个shell就失效了。。于是得在/etc/profile的最后面添加ulimit -s unlimited 就可以了,source /etc/profile使修改文件生效。
PS:如果你碰到类似的错误提示
ulimit: max user processes: cannot modify limit: 不允许的操作
ulimit: open files: cannot modify limit: 不允许的操作
为啥root用户是可以的?普通用户又会遇到这样的问题?
看一下/etc/security/limits.conf大概就会明白。
linux对用户有默认的ulimit限制,而这个文件可以配置用户的硬配置和软配置,硬配置是个上限。
超出上限的修改就会出“不允许的操作”这样的错误。
在limits.conf加上
*
*
*
*
就是限制了任意用户的最大线程数和文件数为10240。
转载请标明出处【Linux too many open file与Resource temporarily unavailable解决方法】。
《www.micoder.cc》
虚拟化云计算,系统运维,安全技术服务.
Tags: | [阅读全文...] |
最新评论