
我們有一個 NGINX 運行著許多虛擬主機(約 600 個),不幸的是,每個 NGINX 工作線程都使用大塊的駐留記憶體(約 6GB)
檢查記憶體(字串)時,它會產生您通常在 SSL 憑證中找到的重複元資訊(重複次數超過 100.000 次)。我們只使用少數不同的憑證。
我懷疑 ssl_session_cache 可能是罪魁禍首。它被設定為
ssl_session_cache 共享:SSL:10m;
這將很好地增加我們的記憶體使用量(10MB * 600 = 6GB)但根據文件http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_cache
具有相同名稱的快取可以在多個虛擬伺服器中使用。
增加該值顯然不會影響記憶體使用。
我們也嚴重依賴 lua-resty,但這不應該影響 SSL 的處理方式嗎?
您知道是什麼原因導致記憶體使用率如此高嗎?
nginx版本:openresty/1.13.6.1
答案1
我認為發生這種情況是因為 nginx 為每個虛擬伺服器的設定分配了單獨的內存,並且該記憶體區域包含正在使用的憑證的副本。這意味著即使您只有幾個單獨的證書,當它們在單獨的虛擬伺服器中使用時,它們也會在記憶體中複製。
SSL 會話快取不包含憑證數據,它僅包含客戶端和伺服器之間的活動 SSL 會話的會話資料。
答案2
我們主要使用 Openresty 進行身份驗證。由於我們懷疑 Openresty 導致記憶體使用量過高,因此我們使用 提取所有 lua 部分auth_request
。
在相同數量的主機和 SSL 憑證的情況下,我們現在的記憶體使用量要低得多(每個工作執行緒約 150MB,而不是 6GB)。另外,openresty 只使用可忽略不計的記憶體量。因此,openresty 與我們配置的其他部分相結合似乎存在一些問題。
雖然這並不能完全回答最初的問題,但對於我們以及希望其他遇到此問題的人來說,這是一個有用的解決方法。