服务器直播服务器优化:零基础配置与调优
优化前需要准备什么
做服务器直播服务器优化前,先确认环境满足以下条件:
- 一台Linux服务器(推荐Ubuntu 20.04+或CentOS 7+),拥有root权限。
- 已部署直播服务软件:常见的有Nginx + nginx-rtmp-module或SRS(Simple-RTMP-Server)。如果还没装,可参考官方文档快速安装。
- 知道服务器的公网IP,且防火墙已放行直播相关端口(默认RTMP:1935,HTTP-FLV:8080,WebRTC:8000等)。
- 准备一个简单的推流工具(如OBS Studio)或ffmpeg用于测试。
第一步:调整直播服务软件的关键参数
以Nginx-rtmp为例,
编辑Nginx配置文件(如/etc/nginx/nginx.conf或/etc/nginx/conf.d/rtmp.conf),
在rtmp块中增加以下优化参数:
rtmp {
server {
listen 1935;
chunk_size 4096;
max_connections 1000;
application live {
live on;
record off;
# 调整缓冲区大小,减少卡顿
buflen 100ms;
# 降低延迟,适合直播互动
drop_idle_publisher 10s;
# 增加gop缓存时长(单位毫秒)
gop_cache on;
gop_cache_max_size 5000;
}
}
}
说明:chunk_size 4096提高数据传输效率;buflen 100ms让客户端缓存更短,延迟更低;gop_cache开启I帧缓存,新观众能更快看到画面。
如果是SRS,修改conf/srs.conf,在vhost段加入类似参数:
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
hls {
enabled on;
hls_fragment 5;
hls_window 30;
}
}
修改后重启服务:systemctl restart nginx 或 ./objs/srs -c conf/srs.conf -e。
第二步:系统内核参数优化
直播服务器对网络和内存要求较高,以下内核参数能明显提升吞吐量。
编辑/etc/sysctl.conf,追加最后:
net.core.rmem_default = 65536
net.core.rmem_max = 8388608
net.core.wmem_default = 65536
net.core.wmem_max = 8388608
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.ipv4.tcp_congestion_control = bbr
net.core.somaxconn = 1024
说明:rmem和wmem系列参数增大TCP读写缓冲区,
减少丢包;tcp_congestion_control = bbr启用BBR拥塞算法,
适合弱网环境;somaxconn提高连接队列长度。
执行sysctl -p立即生效。
第三步:检查防火墙和带宽限制
- 放行端口:如果使用iptables或ufw,确保1935(RTMP)、8080(HTTP-FLV)、8000(WebRTC)等端口开放。例如ufw:
ufw allow 1935/tcp。 - 带宽估算:假设每路直播2Mbps,100路需要200Mbps上行。用
iftop或nload实时监控带宽,避免过载。 - 防止单IP耗尽连接:在Nginx的stream或http块加
limit_conn:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 50;
}
}
}
高频问题与避坑说明
Q:推流正常,但观众端延迟很高(10秒以上)?
A:检查buflen和gop_cache设置。Nginx-rtmp中buflen不要超过200ms;如果开启HLS直播,hls_fragment设小(如2秒)。另外客户端播放器可能默认有较大缓冲,手动设置buffer=1s(如用Video.js时)。
Q:服务器CPU占用过高,推流卡顿?
A:可能是编码器分辨率太高或码率过大。建议在OBS中设置输出分辨率不超过1080p,码率控制在3-6Mbps。同时排查是否开启了多余的转码服务(如SRS的transcode功能)。
Q:连接被断开或频繁超时?
A:检查max_connections是否过低,以及内核参数net.ipv4.tcp_fin_timeout(默认60秒,可改为30秒,减少TIME_WAIT):在/etc/sysctl.conf添加net.ipv4.tcp_fin_timeout=30。
避坑提醒:
- 不要同时开启太多日志记录(如
access_log off;或设置access_log /dev/null;),否则IO会成为瓶颈。 - 如果使用SRS,注意版本差异:旧版配置项名不同,建议用最新稳定版。
- 优化后不要立即部署到生产,先用测试工具模拟10路并发,观察延迟和丢包情况。
验证优化效果
完成以上调整后,用ffmpeg模拟推流测试:
ffmpeg -re -i test.flv -c copy -f flv rtmp://你的服务器IP/live/stream
同时用ffplay拉流:
ffplay rtmp://你的服务器IP/live/stream -fflags nobuffer -flags low_delay
观察延迟是否在1秒以内(局域网环境下应小于500ms)。
也可用"OBS Studio + 网络带宽监控" 边推流边看面板的"CPU使用率"和"网络发送速率",确认没有突增。
最后通过htop或glances查看CPU、内存、网络负载,确保各指标在合理范围。
如果一切正常,恭喜你完成了服务器直播服务器优化。
如果你正在处理服务器直播服务器优化,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。