Nginx

阻止 NGINX 在本地記憶體目錄

  • June 24, 2021

因此,我目前面臨的問題是,當發出 HTTP 請求時,我係統上的 NGINX 會一直在記憶體中記憶體大量影片文件。這導致 NGINX 使用 20GB 以上的記憶體,我不得不頻繁執行sync; echo 1 > /proc/sys/vm/drop_caches *(清除頁面記憶體)*以停止持續交換。我在下面提供了相關配置。

nginx.conf

location /protected/ {
   internal;
   alias /usr/share/nginx/html/videos/;
}

腳本.php

function Download(){
   global $path, $fname;
   $file = "$path/$fname";
   header("Content-Type: video/mp4");
   header("Content-Length: " . filesize($file)); 
   header('Content-Disposition: attachment; filename="'.$fname.'"');
   header("X-Accel-Redirect: /protected/$fname");
   exit;
}

我在 nginx.conf 中嘗試過的內容:

sendfile off;
if_modified_since off;
expires off;
etag off;
proxy_no_cache 1;
proxy_cache_bypass 1;
open_file_cache off;

PS:我正在使用 pcstat 和 fincore 計算這些文件的記憶體使用量,這些 MP4 文件在使用者觀看時被 100% 記憶體,每個文件的大小為 5GB+。

可以使用設置禁用 nginx 服務的文件的作業系統記憶體directio <size><size>是文件大小的門檻值,大於該大小的文件將直接使用DMA複製,並且文件不被記憶體。

引用自:https://serverfault.com/questions/1067735