因为近期互联网直播/点播需求量激增,我们在项目对接时也遇到各种各样关于视频直播和点播的问题。今天就为大家分享一个并发报错的案例。
提出问题
用户在使用互联网直播/点播平台EasyDSS进行视频会议直播过程中,单路视频的在线用户到300人左右就出现无法响应的问题,服务器报500错误。对系统进行重启后,服务会再次挂掉。
分析问题
沟通得知,互联网直播/点播平台的系统使用与并发均在局域网中,用户使用浏览器观看。通过运行日志查看,300个连接出现500错误,是底层开的 http 请求过多导致,也叫做linux系统打开文件数过多,引发数据库访问失败,整个程序就全部不能正常执行了。除了ceph本身相关参数设置外,还可以修改 linux最大打开文件数和数据库迁移。
解决问题
第一步:增加连接数
首先查看当前系统最大的文件打开数,运行如下命令,先对服务器当前设置的文件数查看:
root@iZj6cj2eq1jzcj0fzwz7f5Z:~# ulimit -Hn
4096
root@iZj6cj2eq1jzcj0fzwz7f5Z:~# ulimit -Sn
1024
返回的结果是 1024,这个不够用,那么我就修改一下。客户目前是4台服务器通过转推的形式同时运行,每台服务器平均并发量为500。
如果以最大的量,300个用户,一个用户同时过来5个连接,再加上软件内部还要维护一层连接,300 X 5 X 2,最大可能会 3000 个。当然一般不会到3000,因为很多请求来了就会关闭掉。一个用户一个连接(这里的连接指的是 http 请求,一个请求就算一个连接)
根据这修改打开文件数量的上限
root@iZj6cj2eq1jzcj0fzwz7f5Z:~# sysctl -n -e fs.file-max
4069
根据这修改打开文件数量的上限,在 /etc/security/limits.conf 文件里,最后加上
- soft nofile 3500
- hard nofile 3500
然后重启 nginx 推出重进
第二步:数据库迁移到mysql
当用户数很多的时候,建议将数据库迁移至 mysql使用。系统默认采用的数据库是sqlite,对并发量的支持很少。当然 mysql也需要查看访问 mysql的软件,如果每个软件里面都没有释放数据库链接,可能也不行。