国标GB28181协议视频监控平台EasyGBS编译ARM版播放视频时nginx占用内存下降困难问题优化

大家知道TSINGSEE青犀视频团队的大部分产品都开发过其他的编译版本,比如ARM版。我们在使用国标视频平台EasyGBS的ARM版本中就出现了一个问题,即程序播放视频时,nginx内存升上去之后就很难在降下来,导致资源一直被占用。

当视频并发播放时,nginx内存占用升高如下:

40.png

当停止并发播放后,经过十分钟左右,可以看到nginx内存占用依然没有降低。

41.png

通过进一步排查,我们发现程序启动nginx是启动了一个主进程和一个工作work进程。所以我们在程序中添加监测代码,当内存占用不符合规则时,则主动释放内存。

42.png

首先,查找当前nginx的worer的进程id,然后找到当前worker占用的内存大小,对内存进行判断,过高或者不正常则主动释放内存。

//从程序中查找某个进程名字,然后启动
func qi() {
       pid, err := GetPid("easydss: worker process")
       if err != nil {
              fmt.Println("err,", err)
              return
       }
       fmt.Println("pid,", pid)
       if pid == "" {
              return
       }
       pid64, err := strconv.ParseUint(pid, 10, 32)
       if err != nil {
              fmt.Println(err)
       }
       proce, err := process.NewProcess(int32(pid64))
       Memory, err := proce.MemoryPercent()
       if err != nil {
              fmt.Println("err,", err)
       }
       fmt.Println("Memory,", Memory)
       if Memory > 95 {
              fmt.Println("需要手动重启")
              err := proce.Kill()
              if err != nil {
                     fmt.Println("err,", err)
              }

       }

添加监测代码后再次并发播放测试:

43.png

停止测试后一分钟左右,可以看到内存能够有效降低下来了:

44.png

TSINGSEE青犀视频开发的国标EasyGBS平台是一款具备高可用性的视频平台,除了支持级联外,还支持二次开发和集成,我们为此提供了丰富的API接口,如果大家有兴趣,欢迎联系我们获取测试账号进行测试。

微信图片_20201125161027.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值