gongxiangp2/docs/FRP资源消耗分布分析.md

9.8 KiB
Raw Blame History

FRP资源消耗分布分析

分析时间: 2026-01-12
目标: 明确FRP配置优化对客户端(素材库服务器)和服务端(穿透服务器)的资源消耗影响


📊 资源消耗分布总览

配置项 客户端(素材库服务器) 服务端(穿透服务器) 说明
poolCount 内存+20M, CPU+5%, 文件描述符+600 内存+20M, CPU+5%, 文件描述符+600 双向连接,两端都需要资源
heartbeatInterval 网络流量+0.5KB/s, CPU+1% 网络流量+0.5KB/s, CPU+1% 心跳包双向,两端都处理
heartbeatTimeout 无额外消耗 无额外消耗 只是超时时间,不增加资源
tcpKeepAlive 网络流量+0.3KB/s 网络流量+0.3KB/s TCP保活双向,两端都处理
tcpKeepAliveInterval 网络流量+0.2KB/s 网络流量+0.2KB/s 保活间隔,两端都处理
LimitNOFILE 仅提高限制值 需要相应提高限制值 两端都需要文件描述符
MemoryMax 仅提高限制值 需要相应内存 两端都需要内存维护连接
CPUQuota 仅提高限制值 需要相应CPU 两端都需要CPU处理连接

🔍 详细分析

1. poolCount (连接池大小)

客户端(素材库服务器 - 192.168.58.20)

资源消耗:

  • 内存: +15-25MB
    • 每个连接池连接需要维护状态、缓冲区
    • 30个连接 × 0.5-1MB = 15-30MB
  • CPU: +3-5%
    • 处理连接状态、数据转发
    • 心跳包处理
  • 文件描述符: +600个
    • 30个连接池连接 × 每个连接需要多个文件描述符
  • 网络连接: +20个TCP连接
    • 与穿透服务器保持的连接数

服务端(穿透服务器 - 180.97.221.140:7000)

资源消耗:

  • 内存: +15-25MB
    • 相同:每个连接需要维护状态、缓冲区
    • 30个连接 × 0.5-1MB = 15-30MB
  • CPU: +3-5%
    • 相同:处理连接状态、数据转发
    • 心跳包处理、数据包转发
  • 文件描述符: +600个
    • 相同:每个连接需要文件描述符
  • 网络连接: +20个TCP连接
    • 相同:与客户端保持的连接数

关键点:

  • ✅ 两端资源消耗相同
  • ✅ 连接是双向的,两端都需要维护
  • ⚠️ 穿透服务器也需要相应增加资源

2. heartbeatInterval (心跳间隔)

客户端(素材库服务器)

资源消耗:

  • 网络流量: +0.5KB/s(发送心跳包)
  • CPU: +1%(生成和发送心跳包)

服务端(穿透服务器)

资源消耗:

  • 网络流量: +0.5KB/s(接收心跳包)
  • CPU: +1%(接收和处理心跳包)

关键点:

  • ✅ 两端资源消耗相同
  • ✅ 心跳包是客户端发送,服务端接收并响应
  • ⚠️ 穿透服务器需要处理更多心跳包

3. heartbeatTimeout (心跳超时)

客户端和服务端

资源消耗:

  • ➡️ 无额外资源消耗
  • 只是超时判定时间,不增加实际资源使用

4. tcpKeepAlive (TCP保活)

客户端(素材库服务器)

资源消耗:

  • 网络流量: +0.3KB/s(发送TCP保活包)
  • CPU: 0(由内核处理,不占用应用CPU)
  • 内存: 0(由内核处理)

服务端(穿透服务器)

资源消耗:

  • 网络流量: +0.3KB/s(接收TCP保活包)
  • CPU: 0(由内核处理,不占用应用CPU)
  • 内存: 0(由内核处理)

关键点:

  • ✅ 两端资源消耗相同
  • ✅ TCP保活由内核处理,应用层无额外CPU/内存消耗
  • ✅ 只是网络流量增加

5. tcpKeepAliveInterval (TCP保活间隔)

客户端和服务端

资源消耗:

  • 网络流量: +0.2KB/s(两端相同)
  • 其他资源无影响

6. LimitNOFILE (文件描述符限制)

客户端(素材库服务器)

影响:

  • 只是提高限制值,不增加实际消耗
  • 但需要足够的文件描述符支持更多连接

服务端(穿透服务器)

影响:

  • ⚠️ 也需要提高文件描述符限制
  • 需要支持更多客户端连接
  • 如果穿透服务器有多个客户端,需要更大的限制值

关键点:

  • ⚠️ 穿透服务器也需要相应提高LimitNOFILE
  • 如果穿透服务器服务多个客户端,需要更大的限制值

7. MemoryMax (内存限制)

客户端(素材库服务器)

影响:

  • 只是提高限制值
  • 实际使用取决于负载(预计+20-50MB)

服务端(穿透服务器)

影响:

  • ⚠️ 也需要足够的内存
  • 每个连接需要内存维护状态
  • 如果穿透服务器服务多个客户端,需要更多内存

关键点:

  • ⚠️ 穿透服务器也需要足够的内存
  • 建议穿透服务器内存 ≥ 客户端连接数 × 1MB

8. CPUQuota (CPU限制)

客户端(素材库服务器)

影响:

  • 移除CPU限制,允许使用更多CPU
  • 预计CPU使用从14.4% → 20-30%

服务端(穿透服务器)

影响:

  • ⚠️ 也需要足够的CPU
  • 处理更多连接、数据转发需要更多CPU
  • 如果穿透服务器服务多个客户端,CPU需求更高

关键点:

  • ⚠️ 穿透服务器CPU使用也会增加
  • 建议穿透服务器CPU使用率 < 70%

📊 综合资源消耗对比

客户端(素材库服务器 - 192.168.58.20)

资源类型 增加量 当前状态 是否可接受
内存 +20-50MB 38MB → 58-88MB ✅ 是(限制1G)
CPU +10-20% 14.4% → 24-34% ✅ 是(服务器充足)
网络流量 +1-2KB/s 可忽略 ✅ 是
文件描述符 +600个 4096 → 8192限制 ✅ 是

服务端(穿透服务器 - 180.97.221.140:7000)

资源类型 增加量 说明 是否可接受
内存 +20-50MB 每个客户端连接需要内存 ⚠️ 需要确认
CPU +10-20% 处理更多连接和数据转发 ⚠️ 需要确认
网络流量 +1-2KB/s 心跳包和保活包 ✅ 是(可忽略)
文件描述符 +600个/客户端 如果服务多个客户端,需要更大限制 ⚠️ 需要确认

⚠️ 重要发现

1. 双向资源消耗

所有连接相关的优化都会同时影响两端:

  • ✅ 客户端(frpc)需要更多资源
  • ⚠️ 服务端(frps)也需要更多资源

2. 穿透服务器需要考虑的因素

如果穿透服务器(180.97.221.140:7000)服务多个客户端:

场景 资源需求
仅服务素材库 资源增加 = 客户端增加量
服务多个客户端 资源增加 = 所有客户端增加量之和

示例:

  • 如果穿透服务器服务3个客户端,每个客户端poolCount从10→30
  • 穿透服务器需要支持: 3 × 20 = 60个额外连接
  • 内存增加: 3 × 20MB = 60MB
  • CPU增加: 3 × 5% = 15%

3. 网络流量是双向的

  • 客户端发送心跳包 → 服务端接收
  • 服务端响应心跳包 → 客户端接收
  • 两端网络流量增加相同

🔍 穿透服务器资源检查建议

需要检查的指标

  1. 当前资源使用:

    # 在穿透服务器上执行
    # 检查frps进程资源使用
    ps aux | grep frps
    
    # 检查当前连接数
    netstat -an | grep :7000 | grep ESTABLISHED | wc -l
    
    # 检查内存使用
    free -h
    
    # 检查CPU使用
    top -p $(pgrep frps)
    
  2. 服务多少个客户端:

    # 检查连接到frps的客户端数量
    netstat -an | grep :7000 | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort -u | wc -l
    
  3. 文件描述符使用:

    # 检查frps进程的文件描述符使用
    lsof -p $(pgrep frps) | wc -l
    

💡 建议

对客户端(素材库服务器)

✅ 可以立即执行所有优化:

  • 资源增加在可接受范围内
  • 服务器资源充足

对服务端(穿透服务器)

⚠️ 需要先检查:

  1. 检查当前资源使用:

    • 内存使用率
    • CPU使用率
    • 文件描述符使用
    • 当前连接数
  2. 检查服务多少个客户端:

    • 如果只服务素材库:可以安全执行
    • 如果服务多个客户端:需要评估总资源需求
  3. 建议的穿透服务器配置:

    • 内存: ≥ 2GB(如果服务多个客户端,建议4GB+)
    • CPU: ≥ 2核(如果服务多个客户端,建议4核+)
    • 文件描述符限制: ≥ 16384(如果服务多个客户端)
    • 网络带宽: ≥ 10Mbps(取决于客户端数量和流量)

📋 穿透服务器优化检查清单

执行优化前

  • 检查穿透服务器当前内存使用率
  • 检查穿透服务器当前CPU使用率
  • 检查穿透服务器当前连接数
  • 检查穿透服务器服务多少个客户端
  • 检查穿透服务器文件描述符限制
  • 评估总资源需求

执行优化后

  • 监控穿透服务器内存使用
  • 监控穿透服务器CPU使用
  • 监控穿透服务器连接数
  • 监控穿透服务器错误日志
  • 如果资源不足,考虑升级服务器配置

✅ 总结

资源消耗分布

  1. 客户端(素材库服务器):

    • ✅ 资源增加在可接受范围内
    • ✅ 可以立即执行优化
  2. 服务端(穿透服务器):

    • ⚠️ 也需要增加相同或更多的资源
    • ⚠️ 需要先检查当前资源使用情况
    • ⚠️ 如果服务多个客户端,资源需求会成倍增加

关键建议

  1. 客户端优化: 可以立即执行
  2. 服务端检查: 执行优化前,先检查穿透服务器的资源使用情况
  3. 监控: 执行优化后,同时监控客户端和服务端的资源使用

最后更新: 2026-01-12