先说一下遇到的问题情况
我在给一个web项目做压力测试的时候,1000一下的并发没有问题,并发数一旦破1000就会出现问题,看日志打印,有一个比较关键的地方就是(too many open files)
具体的异常信息不记得了
大概就是每一个连接创建的一个线程都会去访问一个xml文件,并发数上来了之后,超出了最大文件打开数,就会造成读取xml文件失败,最直接的导致了dom4j的document异常
解决这个问题有两种办法(推荐第二种,先说第一种)
【查看最大文件打开数】
ulimit -a
这里箭头所指的1024就是默认的数值
也就是为什么我并发数破1000之后就会出问题
注意:这个数值是单个用户的限制数量,也就是说我root能打开1024,zhangsan也能,lisi也能,并不是系统总共能打开的数量
【修改open files-方法1】
有两个命令,都好用
ulimit -n 2048
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也不生效