当前位置: 首页 > news >正文

WebRTC 服务器之SRS服务器性能优化配置

1.概述

        SRS (Simple Realtime Server) 中提供的各种性能优化选项。这些选项允许您针对不同场景优化 SRS,从而在延迟、吞吐量和资源利用率之间取得平衡。有关常规配置的信息,请参阅配置。

1.1 性能提升目标

    流媒体服务器的性能通常通过以下方式衡量:

    • 吞吐量:可以处理的并发连接数
    • 延迟:录制和播放之间的延迟
    • 带宽效率:系统对可用网络资源的利用程度
    • 资源使用情况:CPU、内存和 I/O 要求

    如上图所示,SRS 提供了几类性能优化,可以对其进行配置以匹配您的特定使用。

    2. 网络 I/O 优化

    2.1 合并读取 (MR)

    合并读取通过减少系统调用来提高读取性能。SRS 不是单独读取少量数据,而是等待积累更多数据,然后再分批处理数据。

     play {# 启用/禁用mr on;# 睡眠持续时间,以毫秒为单位mr_latency 350;}

    2.2 合并写入 (MW)和TCP_NODELAY

    Merged Write 通过批处理传出消息来提高发送性能。SRS 不是单独编写每条消息,而是累积消息并一起发送。

    在 SRS 中默认启用TCP_NODELAY。禁用 Nagle 算法,该算法缓冲小数据包,减少延迟,但代价可能是更多的数据包,有利于实时应用程序。

    vhost your_vhost {play {# 缓冲时间由 (以毫秒为单位)# Default: 350mw_latency 350;}
    }
    vhost __defaultVhost__ {tcp_nodelay     off;
    }

    3. 内存优化

    3.1 RTMP 内存块

    RTMP 块大小决定了如何拆分 RTMP 消息以进行传输。较大的块大小通过减少标头开销来提高效率。

    #减少协议开销
    #将吞吐量提高约 10%
    #默认值 60000 适用于大多数客户端
    #允许的最大值为 65536
    chunk_size 60000;
    

    3.2 块流缓存

    src/core/srs_core_performance.hpp125-130 非配置文件优化,SRS 可以缓存 Chunk 流,以提高处理 RTMP 消息时的性能。

    • 对于小块大小,性能提高了大约 10%
    • 对于较大的数据块大小,性能提高了大约 5%
    • 减少内存分配/释放开销

    4. 延迟设置

     SRS 提供最小延迟模式,该模式优先考虑减少延迟,而不是其他性能方面。

    启用后的效果:
        禁用虚拟主机的合并读取 (MR)
        对使用者队列中的条件变量等待使用超时  trunk/conf/full.conf 中1168-1179
        优先考虑立即交付而不是批处理

    vhost your_vhost {# Whether enable the minimal latency mode.# Default: offmin_latency on;
    }
    

    4.1 GOP 缓存

    GOP(图片组)缓存存储最近的视频数据,以便为新观看者提供快速启动和更流畅的播放。

    优势

    • 为新查看者提供即时播放
    • 查看者无需等待关键帧
    • 平滑播放开始体验
    • 可以禁用以减少内存使用量或实现绝对最小延迟
    vhost your_vhost {play {# Whether to enable the GOP cache.# Default: ongop_cache on;# The max GOP cache size in frames# Default: 256gop_cache_max_frames 256;}
    }
    

    4.2 播放队列

    播放队列设置客户端的最大缓冲时间。效果

    • 限制每个客户端可以缓冲的最大数据数
    • 防止速度较慢的客户端积累过多数据
    • 还可以防止内存耗尽
    vhost your_vhost {play {# The queue length in seconds for player.# Default: 30queue_length 30;}
    }
    

    5. 系统级选项

    5.1 最大连接数

    控制服务器将接受的最大连接数。可能需要使用命令增加系统限制ulimit -HSn

    # the max connections.
    # if exceed the max connections, server will drop the new connection.
    # default: 1000
    max_connections 1000;
    

    5.2 Pithy Print

    控制打印日志消息的频率。降低日志频率可以提高繁忙系统的性能。

    # config for the pithy print in ms,
    # which always print constant message specified by interval,
    # whatever the clients in concurrency.
    # default: 10000
    pithy_print_ms 10000;
    

    6.高级性能调优

    SRS 支持各种 TCP 套接字选项,这些选项可以针对特定环境进行调整:

    选择Default描述
    TCP_NODELAY启用禁用 Nagle 算法
    SO_SNDBUF自动计算套接字发送缓冲区大小
    SO_RCVBUF默认情况下未设置套接字接收缓冲区大小
    SO_REUSEADDR启用允许重复使用本地地址

    7. 示例配置

    7.1 低延迟场景

    vhost low_latency {min_latency on;play {gop_cache off;queue_length 5;mr off;mw_latency 100;}
    }
    

    7.2 高吞吐量场景

    vhost high_throughput {play {gop_cache on;queue_length 60;mr on;mr_latency 700;mw_latency 500;}
    }

    7.3 平衡配置

    vhost balanced {play {gop_cache on;queue_length 30;mr on;mr_latency 350;mw_latency 350;}
    }

    结论

    优化 SRS 性能关键注意事项:

    1. 延迟与吞吐量:较低的延迟通常是以吞吐量降低为代价的,反之亦然
    2. 资源使用:更积极的缓存可以提高性能,但需要更多的内存
    3. 客户端兼容性:某些优化可能不适用于所有客户端

    从默认配置开始,该配置在大多数情况下都能提供良好的平衡,然后根据您的特定要求和监控数据进行调整。

    相关文章:

  1. 在 GitLab 中部署Python定时任务
  2. 私有仓库 Harbor、GitLab
  3. 云计算训练营笔记day02(Linux、计算机网络、进制)
  4. UE5 材质淡入淡出
  5. 【工具使用-数据可视化工具】Apache Superset
  6. 超表面加工流程
  7. 前端知识-forwardRef
  8. 区块链+数据库:技术融合下的应用革新与挑战突围
  9. Kubernetes笔记(1)Kubernetes入门
  10. 解锁RAG:AI 2.0时代的“知识外挂”是如何炼成的?
  11. 开源之夏2025-VisActor 社区题目及参赛者选/培介绍
  12. 当K8S容器没有bash时7种高阶排查手段
  13. ESP32_IDF_idf.py指令详解
  14. 阿里云前端Nginx部署完,用ip地址访问却总访问不到,为什么?检查安全组是否设置u为Http(80)!
  15. Element-Plus-X开源程序是Vue3 + Element-Plus 开箱即用的企业级AI组件库前端的解决方案
  16. 判断两个结构是否相同的一种方法
  17. EasyRTC嵌入式音视频通信SDK技术,助力工业制造多场景实时监控与音视频通信
  18. k8s service的类型
  19. Stream和Collections工具类
  20. vue3搭建后台管理系统
  21. 习近平同欧洲理事会主席科斯塔、欧盟委员会主席冯德莱恩就中欧建交50周年互致贺电
  22. 体坛联播|米兰逆转热那亚豪取3连胜,阿诺德官宣离开利物浦
  23. 北美票房|“雷霆”开画票房比“美队4”低,但各方都能接受
  24. 岳伟华任北京大学第六医院院长,陆林院士卸任
  25. 五四青年节|青春韵脚
  26. 9米长林肯车开进安徽“皖南川藏线”致拥堵数小时,车主回应争议称配合调查