繁体   English   中英

Nginx 容器增加 memory 发送绑定卷上的视频元数据后使用

[英]Nginx container increase memory use after sending metadata of videos on binded volume

我有一个 AWS 服务器,上面运行着 docker 个容器 服务器包含很多 mp4 视频(几百 GB) 每个视频大约 30 MB

其中一项服务是 React 应用程序,它允许一个一个地观看视频,但页面上的视频总数为 5-20

每次当我打开包含从未观看过的视频的页面时,nginx 容器都会增加 50-150 MB 到 memory 使用量,最终整个应用程序将被冻结。

应用程序不适用于高负载(一次 1-2 个用户)所以我使用

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    resolver 127.0.0.11 ipv6=off;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;

keepalive_timeout  65;

client_max_body_size 5M;

include /etc/nginx/conf.d/*.conf;` 

在 nginx 设置中。

容器也简单地绑定到包含视频的目录。

有趣的是,在重新启动容器 memory 后,使用量将下降到正常的 2-3 MB,如果我打开最近几天打开的页面,则不会上升

所以问题只能在包含非常旧的视频的旧页面上重现

在 nginx 容器内,一切都平静而良好,memory 进程和工作人员的使用很少,所以我什至不知道“谁”到底在使用 memory

有没有人知道在哪里挖掘以尝试修复这个不需要的“缓存”?

react 代码很长,所以我不能在这里真正分享它,但总的来说它是一个组件视频,所以在最小的组件内部它看起来像这样:

   import React 'react';
    const EVideo = ({
                      props,
                    }) => {
      const onLoad = e => {// some logic to set initial playback rate}

  const onTimeUpdate = e => {//some logic to calculate video time into business logic time}

  return
  (<><video
    ref={videoRef}
    poster={props.poster}
    src={props.video_path}
    onLoadedMetadata={onLoad}
    onTimeUpdate={onTimeUpdate}
    playsInline
  />
    <div>Here business logic results will be shown</div>
  </>)
}

这是由于您正在使用的浏览器的预加载行为而发生的。 浏览器正在预取它还没有看到的视频。 您可以使用 video 元素的preload属性来控制浏览器的这种默认行为。

在 video 元素中设置preload=none应该可以防止浏览器预取视频。 在此处阅读有关preload的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM