Redis作为常用的高性能缓存和键值数据库,在高并发场景下很容易出现连接数耗尽的问题,在宝塔面板部署的环境中,除了Redis自身的配置限制,系统文件句柄数的默认限制也会成为连接数提升的瓶颈。我们可以通过调整系统参数和Redis配置来优化这个问题。

一、查看当前系统文件句柄数限制
首先我们需要确认当前系统的文件句柄数限制,避免后续修改后没有生效。可以通过下面的命令查看当前会话的限制:
# 查看当前用户的最大文件打开数限制 ulimit -n # 查看系统全局的文件句柄数限制 cat /proc/sys/fs/file-max
默认情况下,很多Linux系统的单进程文件句柄数限制是1024,这个数值对于Redis来说通常偏低,需要调大。
二、修改系统文件句柄数配置
在宝塔面板中修改系统文件句柄数可以通过两种方式,一种是临时修改,一种是永久修改,建议同时操作保证生效。
1. 临时修改(立即生效,重启后失效)
直接在宝塔面板的终端中执行下面的命令,将单进程文件句柄数临时调整为65535:
ulimit -n 65535
2. 永久修改(重启后依然生效)
我们需要修改系统的limits配置文件,在宝塔面板中可以通过文件管理功能编辑/etc/security/limits.conf文件,在文件末尾添加以下内容:
* soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535
修改完成后保存文件,然后还需要编辑/etc/systemd/system.conf和/etc/systemd/user.conf,在文件中添加下面的配置:
DefaultLimitNOFILE=65535 DefaultLimitNPROC=65535
修改完成后执行下面的命令让系统配置生效:
systemctl daemon-reload
三、修改Redis配置提升连接数
系统文件句柄数调整完成后,还需要修改Redis自身的配置来允许更多的连接。在宝塔面板中可以通过软件商店找到Redis,点击设置进入配置修改页面。
1. 修改Redis最大连接数配置
在Redis配置文件中找到maxclients配置项,如果没有则手动添加,将其值设置为需要的最大连接数,比如设置为10000:
# Redis最大连接数配置 maxclients 10000
需要注意的是,Redis的最大连接数不能超过系统分配给Redis进程的文件句柄数限制,否则设置会不生效。
2. 调整Redis其他相关配置
如果Redis配置了密码,还需要确认requirepass配置正确,同时可以调整timeout参数,设置连接空闲超时时间,避免无用连接占用资源:
# 连接空闲超时时间,单位秒,0表示不超时 timeout 300 # Redis访问密码 requirepass your_redis_password
四、重启服务并验证配置生效
修改完所有配置后,需要重启Redis服务让配置生效,在宝塔面板的Redis设置页面点击重启按钮即可。
重启完成后可以通过以下方式验证配置是否生效:
# 连接Redis服务 redis-cli -a your_redis_password # 查看Redis最大连接数配置 config get maxclients # 查看当前Redis连接数 info clients
如果config get maxclients返回的结果是我们设置的数值,同时当前连接数可以正常上升,说明优化已经生效。
五、注意事项
- 文件句柄数不是设置越大越好,需要根据服务器的实际内存和负载情况调整,避免占用过多系统资源。
- 修改系统配置文件前建议先备份原文件,避免修改错误导致系统异常。
- 如果Redis运行在容器中,还需要调整容器的文件句柄数限制,否则系统层面的修改可能不会生效。
- 高并发场景下还需要关注Redis的内存使用情况,避免连接数提升后内存耗尽导致服务崩溃。