系统调优:如何解决系统报错too many open files

一、检查系统版本是否手工升级

关于lsb_release -a和/etc/issue显示的发行版本号不同,原因只有一个:系统内核手动升级了

对于高并发高http连接的应用程序例如www或Java,会遇上Socket/File: Can’t open so many files或too many open files的问题,最好通过使用ulimit -n xx 修改每个进程可打开的文件数,缺省值是1024

二、如何增大用户打开最大进程数

ulimit -a 来显示当前的各种用户进程限制

系统原始文件

ulimit命令有分软硬设置,加-H硬限制是实际的限制,加-S软限制是warnning限制,只会做出warning;

grep '^*' /etc/security/limits.conf

* soft  65535

* hard 65535

修改方法:

方法一:

1.在/etc/rc.local中增加ulimit -SHn 65535

  编辑rc.local文件增加一行ulimit -SHn 65535,或者直接执行命令:echo "ulimit -SHn 65535">>/etc/rc.local (此时不会立即生效,需重启服务器,执行步骤2则可使之立即生效)

2.在/etc/profile中增加ulimit -SHn 65535

  编辑profile文件增加一行ulimit -SHn 65535,或者直接执行命令:echo "ulimit -SHn 65535">>/etc/profile,然后source /etc/profile让参数即时生效

方法二:修改limits.conf配置文件生效

nofile(可打开的文件描述符的最大数)和nproc(单个用户可用的最大进程数量)

修改后执行命令查看:grep '^*' /etc/security/limits.conf,显示如下:

* soft nproc 65535

* hard nproc 65535

* soft nofile 65535

* hard nofile 65535

退出用户终端重新登录,使配置文件生效

详情请查看:http://blog.51cto.com/manfred12/1541274

附:

ulimit用于shell启动进程所占用的资源

参数介绍:

-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes

 
原文地址:https://www.cnblogs.com/pistachio123/p/9628476.html