2012-12-26 48 views
3

我正在使用節點版本v0.8.16。 它與openssl 1.0.0f捆綁在一起,包含SSL_OP_NO_COMPRESSION和SSL_MODE_RELEASE_BUFFERS。在呼入HTTPS請求,並保持連接打開node.js中SSL連接的大約內存開銷是多少?

我的測試SSL服務器只回送的Hello World。 從我的測試來看,每個ssl連接的內存開銷約爲150k。

哪些是節點SSL連接的近似內存開銷? 在這種情況下,我如何減少ssl內存使用量?

回答

8

SSL需要每個連接空間:

  • 插座FD
  • 約16K用於接收緩衝器的最大可能的SSL記錄,其與加密套件
  • 輸出緩衝器輕微變化,大概也大約16K
  • 空間來計算
  • 握手狀態,連接狀態,握手MAC等每個消息的MAC
  • 一個指針到SSL會話,這是相同的目標連接之間共享的,並且其必須包含的加密套件,協議,預主保密字,共享祕密,會話ID,對方的證書鏈,超時變量,...
  • 其他任何我沒有想到的。

另外的TCP連接將消耗內核空間,例如爲套接字發送和接收緩衝區。

+0

偉大的清單!此外,我必須補充一點,因爲大多數實現與「消費者」(應用程序代碼)沒有緊密關聯,並且消費者不知道或關心SSL/tLS內部,所以還存在用於解碼數據的緩衝區(接收後)和數據發送之前。這種緩衝區比其他的東西佔用更多的空間。這種緩衝區可以在特定情況下進行優化,但並非總是如此。 –

+0

@ EugeneMayevski'EldoSCorp你通常需要一個明文接收緩衝區,但你並不真的需要一個明文發送緩衝區:與合適的API設計,你不需要任何人。例如,JSSE SSLEngine依靠應用程序來提供全部四個。 – EJP

+0

對,它「依賴於應用程序」,這意味着緩衝區仍然存在;) –

3

SSL需要大約128K或更多(取決於實現)每對內存緩衝區連接,所以你可能會不能夠減少所使用的內存量。

+0

我使用openssl 1.0.0f的節點。你能爲我指出一些文件嗎?是否有可能減少內存緩衝區的大小? – haijin

+1

@海金文件你在問什麼?這是SSL工作的方式。我們作爲SSL/TLS引擎的實現者知道這一點,但我懷疑你會發現任何文檔都指出「SSL需要128 Kb」。正如我寫的那樣,無法減小緩衝區大小,因爲在這種情況下,SSL引擎將無法工作。 –

+0

是的,我知道openssl文件糟透了,我是ssl新手,所以我想知道是否有一組常量或結構定義了SSL連接的內存緩衝區的大小。我發現在openssl crypto/bio/bf_buff.c中,bio ibuf/obuf的默認大小是4096,文檔說你不能降低到4k以下。這只是一個生物緩衝區ctx。我認爲這只是你提到的內存緩衝區的一部分。我試圖找到一些有關內存使用情況的文檔,以及服務器端SSL連接內存的詳細分解。 – haijin