redis高并发下,可能有些连接没有释放,导致连接数耗尽,会提示
ERR max number of clients reached
这个时候通过命令查看客户端使用连接数
[root@home-server-60 bin]# ./redis-cli -h 192.168.0.60 -p 6379
192.168.0.60:6379> info Clients
# Clients
connected_clients:3
client_recent_max_input_buffer:4
client_recent_max_output_buffer:0
blocked_clients:0
192.168.0.60:6379>
查看最大连接数配置,这里配置的是10000:
192.168.0.60:6379> config get maxclients
1) "maxclients"
2) "10000"
192.168.0.60:6379>
通过客户端设置最大连接数,这种方法重启redis后就会失效,所以还是改配置文件好些:
192.168.0.60:6379> config set maxclients 8000
OK
192.168.0.60:6379> config get maxclients
1) "maxclients"
2) "8000"
192.168.0.60:6379>
同时可以通过linux端口号查看客户端连接数:
[root@home-server-60 ~]# netstat -an|grep 6379|wc -l
4879
jedis正确的做法是每次都要关闭连接,如set调用,都要close:
public void set(String key ,String value) {
Jedis jedis = getJedis();
jedis.set(key, value);
//释放本次连接
returnJedis(jedis);
}
private Jedis getJedis() {
return jedisPool.getResource();
}
/**
* jedis 3.2做法,释放连接
* @param jedis
*/
private void returnJedis(Jedis jedis) {
if (null != jedis) {
jedis.close();
}
}
注意:
有时客户端连接数配置的有点大,启动的时候会报错:
You requested maxclients of 10000 requiring at least 10032 max file descriptors.
Redis can’t set maximum open files to 10032 because of OS error: Operation not permitted.
Current maximum open files is 4096. Maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase ‘ulimit –n’.
通过命令查看系统open file 的限制,如果有点小,可以改大些。