强烈向大家推荐一个好网站,【我要自学网】,教程由在校老师录制,有办公会计、平面设计、室内设计、机械设计、网页编程、影视动画等教程.....让你足不出门,都可以体验学校的专业教育!
在/etc/security/limits.conf添加
cat > /etc/security/limits.conf <<EOF
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
EOF
然后重启
echo -n > /etc/security/limits.d/90-nproc.conf
many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。 引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。
- 查看系统的配置 ulimit -a | grep open,发现系统的配置正常。
- 查看程序服务的打开文件限制,cat /proc/40636/limits,发现服务的限制并没有继承系统设置的,还是系统默认的1024限制。
- 查看程序服务打开文件数(连接数)情况,lsof -p 40636 | wc -l,发现已经超出限制,所以报错。
- 再看看程序服务打开了哪些连接,lsof -p 40636 > openfiles.log,发现很多http连接打开没有关闭,看ip是报警服务的接口,于是顺着这条线索,终于找到了原因,因为程序中读取到的配置解析时报错给报警服务,大量的报警服务连接后未关闭,才导致的too many open files,这是问题的关键,但是程序为什么没有继承系统设置的最大配置限制,还需要继续查看。
–
系统最大打开文件描述符数:
查看
$ cat /proc/sys/fs/file-max
6553600
#3 设置
$ vim /etc/sysctl.conf
fs.file-max = 6553600
查询:
[oceanstar@192 cap]$ ulimit -n
1024
[oceanstar@192 cap]$ ulimit -Hn
4096
[oceanstar@192 cap]$ ulimit -Sn
1024
查看某进程的文件打开数
cat /proc//limits
ls -lh /proc//fd
ls -lh /proc//fd|wc -l
lsof -p 78757 | wc -l
调整
Linux ulimit命令用于控制shell程序的资源。
ulimit为shell内建指令,可用来控制shell执行程序的资源。
-a 显示目前资源限制的设定。
-c <core文件上限> 设定core文件的最大值,单位为区块。
-d <数据节区大小> 程序数据节区的最大值,单位为KB。
-f <文件大小> shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制。
-m <内存大小> 指定可使用内存的上限,单位为KB。
-n <文件数目> 指定同一时间最多可开启的文件数。
-p <缓冲区大小> 指定管道缓冲区的大小,单位512字节。
-s <堆叠大小> 指定堆叠的上限,单位为KB。
-S 设定资源的弹性限制。
-t <CPU时间> 指定CPU使用时间的上限,单位为秒。
-u <程序数目> 用户最多可开启的程序数目。
-v <虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB。