# 🔧 FRP 公网服务器诊断与修复报告 **服务器信息:** - IP地址:180.97.221.140 - 用户名:root - 检查时间:2025年11月5日 13:48 --- ## 📊 问题诊断 ### ❌ 发现的问题 **严重错误:文件描述符数量耗尽** 1. **错误日志**: ``` [proxy.go:196] met temporary error: accept tcp: accept4: too many open files ``` 2. **根本原因**: - FRP 进程的文件描述符限制:**65,536** - 当前已打开的文件数:**65,536**(达到上限!) - 无法接受新的连接请求 3. **影响范围**: - ❌ youyidian-3d (2320端口) - 无法接受连接 - ❌ nas-ssh (2322端口) - 无法接受连接 - ❌ 其他所有代理服务都受影响 --- ## 🔧 修复步骤 ### 1. 备份原配置 ```bash cp /etc/systemd/system/frps.service /etc/systemd/system/frps.service.backup-20251105-134828 ``` ### 2. 修改 systemd 服务配置 **修改前:** ```ini [Service] LimitNOFILE=65536 ``` **修改后:** ```ini [Service] LimitNOFILE=1048576 ``` ### 3. 应用配置并重启服务 ```bash # 重新加载 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. 外部连接测试 ```bash # 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) ```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) ```ini [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"? 1. **限制过低**:原始限制 65,536 对于长时间运行的 FRP 服务器来说不足 2. **连接累积**:FRP 作为穿透服务,会维持大量长连接 3. **没有及时清理**:某些僵死连接可能没有被及时释放 ### 为什么达到 65,536? 根据日志文件大小判断: - 每天日志约 15-27MB - 说明有大量的连接和传输活动 - 多个客户端(至少3个)长期连接 - 可能存在频繁的连接建立和断开 --- ## 💡 后续建议 ### 1. 定期监控 建议设置监控脚本,定期检查文件描述符使用情况: ```bash #!/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. 设置定时任务 ```bash # 每小时检查一次 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 穿透服务现已正常运行。** --- ## 📞 维护信息 ### 相关命令 ```bash # 查看服务状态 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 **状态**:✅ 已修复并验证