### 部分设备无法连接到TCP服务器的原因
0. 失败的日志找到了报错:WARNING Server::accept_connection(): accept() failed, Error: Too many open files,原因为“文件描述符”数量限制
1. 检查的位置有
1. 系统限制 ulimit -n
2. supervisor minfds 配置,这里是个巨坑,想不到
2. 系统调整方案
在Linux系统中,可以打开的TCP连接数量受到多个因素的影响,包括操作系统的配置、硬件资源(如内存和CPU)、网络配置等。以下是一些关键的因素和配置选项,可以帮助你优化和增加TCP连接的数量:
1. **文件描述符限制**:
– 查看当前用户的文件描述符限制:
“`bash
ulimit -n
“`
– 临时增加当前会话的文件描述符限制:
“`bash
ulimit -n 100000
“`
– 永久增加文件描述符限制,编辑 `/etc/security/limits.conf`,添加:
“`
* soft nofile 100000
* hard nofile 100000
“`
2. **系统文件描述符限制**:
– 查看和设置系统范围的文件描述符限制:
“`bash
cat /proc/sys/fs/file-max
echo 1000000 > /proc/sys/fs/file-max
“`
– 永久生效,编辑 `/etc/sysctl.conf`,添加:
“`
fs.file-max = 1000000
“`
然后运行 `sysctl -p` 以应用更改。
3. **TCP连接跟踪表(netfilter conntrack)**:
– 查看和设置当前的连接跟踪表大小:
“`bash
cat /proc/sys/net/netfilter/nf_conntrack_max
echo 1000000 > /proc/sys/net/netfilter/nf_conntrack_max
“`
– 永久生效,编辑 `/etc/sysctl.conf`,添加:
“`
net.netfilter.nf_conntrack_max = 1000000
“`
然后运行 `sysctl -p`。
4. **TCP端口范围**:
– 查看和设置可用的TCP端口范围:
“`bash
cat /proc/sys/net/ipv4/ip_local_port_range
echo “1024 65535” > /proc/sys/net/ipv4/ip_local_port_range
“`
– 永久生效,编辑 `/etc/sysctl.conf`,添加:
“`
net.ipv4.ip_local_port_range = 1024 65535
“`
然后运行 `sysctl -p`。
5. **TCP回收和再利用**:
– 启用TCP连接的快速回收和再利用:
“`bash
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
“`
– 永久生效,编辑 `/etc/sysctl.conf`,添加:
“`
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
“`
然后运行 `sysctl -p`。
通过调整这些配置,可以大大增加Linux系统能够同时打开的TCP连接数量。但请注意,增加TCP连接数量也可能增加系统负载,因此需要根据具体需求和硬件资源进行合理调整。
3. supervisor 修改minfds配置
在宝塔面板中使用 Supervisor 时,修改 `minfds` 配置以增加可以打开的文件描述符数量需要一些额外的步骤。以下是详细的步骤:
### 步骤 1:找到 Supervisor 配置文件
1. 登录宝塔面板。
2. 在面板左侧的菜单中找到并点击 “软件管理”。
3. 找到 Supervisor 并点击 “设置” 或 “配置文件”,打开 Supervisor 的配置文件进行编辑。
### 步骤 2:编辑 Supervisor 配置文件
Supervisor 的配置文件路径通常是 `/etc/supervisord.conf` 或 `/etc/supervisor/supervisord.conf`。你需要在配置文件中添加或修改 `minfds` 选项。
1. 打开配置文件进行编辑:
“`bash
sudo nano /etc/supervisord.conf
“`
或者:
“`bash
sudo nano /etc/supervisor/supervisord.conf
“`
2. 在 `[supervisord]` 部分中添加或修改 `minfds` 选项。例如,设置为 100000:
“`ini
[supervisord]
minfds=100000
“`
### 步骤 3:确保系统文件描述符限制适当
除了修改 Supervisor 的 `minfds` 配置外,还需要确保系统文件描述符限制足够高。具体步骤如下:
1. **编辑 `/etc/security/limits.conf` 文件**:
“`bash
sudo nano /etc/security/limits.conf
“`
添加以下内容:
“`ini
* soft nofile 100000
* hard nofile 100000
“`
2. **编辑 `/etc/pam.d/common-session` 和 `/etc/pam.d/common-session-noninteractive` 文件**:
“`bash
sudo nano /etc/pam.d/common-session
sudo nano /etc/pam.d/common-session-noninteractive
“`
添加以下内容:
“`ini
session required pam_limits.so
“`
3. **编辑 `/etc/sysctl.conf` 文件**:
“`bash
sudo nano /etc/sysctl.conf
“`
添加以下内容:
“`ini
fs.file-max = 1000000
“`
然后运行以下命令以应用更改:
“`bash
sudo sysctl -p
“`
### 步骤 4:重新启动 Supervisor
在修改配置文件后,重新启动 Supervisor 以应用更改:
“`bash
sudo supervisorctl reload
“`
或使用 systemd 来重新启动 Supervisor 服务:
“`bash
sudo systemctl restart supervisord
“`
### 步骤 5:验证配置
1. 确认配置生效,检查 Supervisor 的日志文件,通常位于 `/var/log/supervisor/supervisord.log`,查看是否有相关的日志记录。
2. 确认新的文件描述符限制生效:
“`bash
su – your_user -c ‘ulimit -n’
“`
将 `your_user` 替换为运行 Supervisor 的用户。
3. 查看当前系统打开的文件描述符数量:
“`bash
lsof | wc -l
“`
通过这些步骤,你可以在宝塔面板中正确配置 Supervisor 的 `minfds`,确保系统能够处理更多的 TCP 连接,从而避免 `Too many open files` 错误。