flnxi-Wu/docs/guides/FRP服务器诊断修复报告.md
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

6.4 KiB
Raw Blame History

🔧 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. 备份原配置

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"?

  1. 限制过低:原始限制 65,536 对于长时间运行的 FRP 服务器来说不足
  2. 连接累积:FRP 作为穿透服务,会维持大量长连接
  3. 没有及时清理:某些僵死连接可能没有被及时释放

为什么达到 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 状态:✅ 已修复并验证