6.4 KiB
6.4 KiB
🔧 FRP 公网服务器诊断与修复报告
服务器信息:
- IP地址:180.97.221.140
- 用户名:root
- 检查时间:2025年11月5日 13:48
📊 问题诊断
❌ 发现的问题
严重错误:文件描述符数量耗尽
-
错误日志:
[proxy.go:196] met temporary error: accept tcp: accept4: too many open files -
根本原因:
- FRP 进程的文件描述符限制:65,536
- 当前已打开的文件数:65,536(达到上限!)
- 无法接受新的连接请求
-
影响范围:
- ❌ youyidian-3d (2320端口) - 无法接受连接
- ❌ nas-ssh (2322端口) - 无法接受连接
- ❌ 其他所有代理服务都受影响
🔧 修复步骤
1. 备份原配置
cp /etc/systemd/system/frps.service /etc/systemd/system/frps.service.backup-20251105-134828
2. 修改 systemd 服务配置
修改前:
[Service]
LimitNOFILE=65536
修改后:
[Service]
LimitNOFILE=1048576
3. 应用配置并重启服务
# 重新加载 systemd 配置
systemctl daemon-reload
# 重启 frps 服务
systemctl restart frps
✅ 修复验证
1. 进程状态
- 新进程 ID:4826
- 文件描述符限制:1,048,576(100万)✅
- 当前打开文件数:22(非常健康)✅
- 运行状态:active (running) ✅
2. 端口监听状态
| 端口 | 状态 | 用途 |
|---|---|---|
| 7000 | ✅ 正常监听 | FRP 服务端主端口 |
| 7500 | ✅ 正常监听 | Dashboard 管理界面 |
| 2320 | ✅ 正常监听 | youyidian-3d 穿透 |
| 2322 | ✅ 正常监听 | NAS SSH 穿透 |
3. 客户端连接状态
所有客户端在服务重启后自动重新连接:
| 客户端 ID | 来源 IP | 代理服务 | 状态 |
|---|---|---|---|
| d5789e601269f688 | 58.216.227.194 | nas-ssh, youyidian-3d | ✅ 已连接 |
| 3b9182d7c7dc5e78 | 180.111.177.153 | ssh-dao02 | ✅ 已连接 |
| 1be0c673e19ea24a | 36.153.91.234 | bi2-* 系列 | ✅ 已连接 |
4. 外部连接测试
# NAS SSH 穿透测试
nc -z -v -w5 180.97.221.140 2322
✅ Connection succeeded!
# Web应用穿透测试
nc -z -v -w5 180.97.221.140 2320
✅ Connection succeeded!
5. 最新日志(无错误)
2025/11/05 13:48:28 [I] frps started successfully
2025/11/05 13:48:31 [I] new proxy [nas-ssh] type [tcp] success
2025/11/05 13:48:31 [I] new proxy [youyidian-3d] type [tcp] success
✅ 没有再出现 "too many open files" 错误
📝 当前 FRP 配置
服务端配置 (/etc/frp/frps.ini)
[common]
bind_addr = 0.0.0.0
bind_port = 7000
dashboard_addr = 127.0.0.1
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = Admin@frp2024
authentication_method = token
token = LiuYunKu_NAS_2024_SecureToken
log_file = /var/log/frps.log
log_level = info
log_max_days = 7
allow_ports = 2320-2400,5238,6000-6100,8000-8100
max_pool_count = 50
# 上传优化配置
heartbeat_timeout = 300
tcp_mux = true
tcp_mux_keepalive_interval = 60
max_ports_per_client = 0
transport_buffer_size = 16777216
Systemd 服务配置 (/etc/systemd/system/frps.service)
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
🎯 系统状态总结
硬件资源
- 系统:CentOS 7 (内核 3.10.0-957)
- FRP 版本:0.52.3 (服务端)
- 内存占用:约 360MB
- 运行时间:重启后运行正常
系统限制
- 系统级文件描述符限制:1,000,000
- FRP进程限制:1,048,576(已优化)✅
- 当前使用:22 / 1,048,576(0.002%)
网络连接
- 活跃客户端:3个
- 活跃代理:7个(nas-ssh, youyidian-3d, ssh-dao02, bi2-*)
- 7000端口:正常监听并接受连接
🔍 根本原因分析
为什么会出现 "too many open files"?
- 限制过低:原始限制 65,536 对于长时间运行的 FRP 服务器来说不足
- 连接累积:FRP 作为穿透服务,会维持大量长连接
- 没有及时清理:某些僵死连接可能没有被及时释放
为什么达到 65,536?
根据日志文件大小判断:
- 每天日志约 15-27MB
- 说明有大量的连接和传输活动
- 多个客户端(至少3个)长期连接
- 可能存在频繁的连接建立和断开
💡 后续建议
1. 定期监控
建议设置监控脚本,定期检查文件描述符使用情况:
#!/bin/bash
# 保存为 /usr/local/bin/check-frps-health.sh
PROCESS_ID=$(pgrep frps)
if [ -z "$PROCESS_ID" ]; then
echo "❌ FRP服务未运行"
exit 1
fi
FD_LIMIT=$(cat /proc/$PROCESS_ID/limits | grep "open files" | awk '{print $4}')
FD_CURRENT=$(ls /proc/$PROCESS_ID/fd | wc -l)
FD_PERCENT=$((FD_CURRENT * 100 / FD_LIMIT))
echo "文件描述符使用情况:"
echo " 当前:$FD_CURRENT"
echo " 限制:$FD_LIMIT"
echo " 使用率:$FD_PERCENT%"
if [ $FD_PERCENT -gt 80 ]; then
echo "⚠️ 警告:文件描述符使用率超过80%"
fi
2. 设置定时任务
# 每小时检查一次
echo "0 * * * * /usr/local/bin/check-frps-health.sh >> /var/log/frps-health.log 2>&1" | crontab -
3. 日志轮转
当前日志每天自动分割,保留 7 天,配置合理 ✅
4. 升级建议
服务端配置文件使用的是 .ini 格式,官方已弃用。建议未来升级到 .toml 或 .yaml 格式。
✅ 结论
FRP 穿透服务已完全恢复正常!
- ✅ 文件描述符限制已从 65,536 提升到 1,048,576
- ✅ 服务成功重启,所有客户端自动重连
- ✅ 所有代理服务正常工作
- ✅ 不再出现 "too many open files" 错误
- ✅ 外部端口连接测试全部通过
您的 3D 共享平台(youyidian-3d)和 NAS SSH 穿透服务现已正常运行。
📞 维护信息
相关命令
# 查看服务状态
systemctl status frps
# 查看实时日志
tail -f /var/log/frps.log
# 查看文件描述符使用
ls /proc/$(pgrep frps)/fd | wc -l
# 重启服务
systemctl restart frps
备份文件位置
- 配置备份:
/etc/systemd/system/frps.service.backup-20251105-134828 - 日志目录:
/var/log/frps*.log
报告生成时间:2025年11月5日 13:50 操作人员:AI 自动诊断与修复 服务器:180.97.221.140 状态:✅ 已修复并验证