Linux处理too many open files

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31226223/article/details/78932196

先说一下遇到的问题情况

我在给一个web项目做压力测试的时候,1000一下的并发没有问题,并发数一旦破1000就会出现问题,看日志打印,有一个比较关键的地方就是(too many open files)

具体的异常信息不记得了

大概就是每一个连接创建的一个线程都会去访问一个xml文件,并发数上来了之后,超出了最大文件打开数,就会造成读取xml文件失败,最直接的导致了dom4j的document异常

解决这个问题有两种办法(推荐第二种,先说第一种)

【查看最大文件打开数】

ulimit -a

这里写图片描述

这里箭头所指的1024就是默认的数值

也就是为什么我并发数破1000之后就会出问题

注意:这个数值是单个用户的限制数量,也就是说我root能打开1024,zhangsan也能,lisi也能,并不是系统总共能打开的数量

【修改open files-方法1】

有两个命令,都好用

#命令1
ulimit -n 2048
#命令2
ulimit -HSn 2048

参数 -H  设定资源的硬性限制;-S  设定资源的弹性限制;

这两个参数具体有什么作用我还没有细致的研究

执行任意一条命令之后,我们再来看看限制数量

这里写图片描述

我们很直观的看到数值已经变成了我们更改后的数值,很方便

但是也有弊端,就是仅在当前shell下生效,如果我再启动一个shell,或者我退出之后再进来,那么这个设置就不再生效

这里写图片描述

右边的是我新启动的shell界面,我们可以看到,新的shell的数据是没有改变的

【修改open files-方法2】

打开文件“/etc/security/limits.conf”(命令行请用vim)

这里写图片描述

在底部加入配置

*   soft    nofile    8192
*   hard    nofile    8192

这里写图片描述

这里的“*”的意思就是所有用户都生效

保存

不需要重启机器,重新登录即可生效

【注意】

以上设置我在Red Hat上均生效,在Ubuntu不生效

Ubuntu系统需要把“*”换为root,而且仅root生效,写zhangsan的话,zhangsan也不生效

猜你喜欢

转载自blog.csdn.net/qq_31226223/article/details/78932196
今日推荐