背景说明:
使用Jmeter 进行压力测试,同时在linux环境下使用“lsof -p 4154 | wc -l”查看io访问量。
进行压力测试时发现io访问量在4500左右,服务器redis报错,错误信息too many open files error。
原因是因为在linux下面ulimit命令限制了可以打开文件描述符的最大数量。默认是1024.而redis的最大连接数maxclients却远远大于这个数量。
这样问题就出现了,比如redis的连接是10000,那么是否redis就真的能够接受10000的连接呢?答案是不是的。redis还受到系统的一些限制。比如ulimit。
最后通过ulimit命令更改了打开描述符的数量。提高了IO量的级别比如:
- ulimit -n 65535
如果依然出现“Toomany open files”,使用ulimit发现“openfiles (-n)”仍然是1024,那么之前设置的65535是没起作用,而切换到root用户发现却是65535;而在非root用户下
ulimit -n 65535
会报异常:
ulimit: max user processes: cannot modify limit
原来是被/etc/security/limits.conf 限制了,打开此文件即可看到,对默认用户是有限制的,因此可以加入
* soft noproc 65535
* hard noproc 65535
* soft nofile 65535
* hard nofile 65535
这样就非root用户就可以设置ulimit为65535了。
修改之后测试发现io访问量可以提高到10000.