Linux系统下提升redsocks最大连接数(超过128)及配置文件listenq参数疑问
Linux系统下提升redsocks最大连接数(超过128)及配置文件listenq参数疑问
嗨,我来帮你搞定这个问题!
一、如何把redsocks的max_conn调到128以上
其实调整max_conn本身并不复杂,关键是要配合系统层面的配置,不然光改redsocks参数可能达不到预期效果:
- 修改redsocks配置文件
找到你的redsocks配置文件(通常是/etc/redsocks.conf或者自定义路径),直接修改max_conn参数,比如改成:
数值可以根据服务器负载和资源情况调整,比如1024、2048都可以,只要系统能扛得住就行。max_conn = 512; - 调整Linux系统的文件描述符限制
每个网络连接都会占用一个文件描述符,系统默认的文件描述符上限可能不够支撑大量连接:- 临时生效(当前会话):执行命令
ulimit -n 4096 - 永久生效:编辑
/etc/security/limits.conf,添加以下两行(数值可按需调整):
保存后重启系统或者重新登录用户才能生效。* soft nofile 4096 * hard nofile 8192 - 调整系统全局文件描述符上限:编辑
/etc/sysctl.conf,添加
然后执行fs.file-max = 65536sysctl -p让配置立即生效。
- 临时生效(当前会话):执行命令
- 重启redsocks服务
修改完配置后,重启redsocks才能让新的max_conn参数生效,比如用systemd管理的话:systemctl restart redsocks
二、解释配置文件里的listenq参数
你看到的这行注释:
// listenq = 128; // SOMAXCONN equals 128 on my Linux box.
它说的是redsocks监听套接字的连接请求队列长度(对应TCP的backlog参数)。当有大量客户端同时发起连接请求时,这个队列用来存放那些已经完成TCP三次握手、但还没被redsocks进程处理的连接。
注释里的SOMAXCONN是Linux内核默认的最大backlog值,很多系统默认是128。如果你的服务器并发连接请求特别多,也可以把这个值调大(比如改成listenq = 256;),但要注意同步调整内核参数net.core.somaxconn:
编辑/etc/sysctl.conf添加
net.core.somaxconn = 256
然后执行sysctl -p生效,不然listenq设置的数值超过内核默认的SOMAXCONN的话,会被内核自动截断到SOMAXCONN的数值,相当于白改了。
备注:内容来源于stack exchange,提问作者sadeq




