2011-10-06 65 views
2

我正在運行一個專用的代理服務器與Squid,我試圖感受到服務器可以處理的最大連接數。我意識到這歸結於Linux機器上的可用文件描述符。在Linux中的文件描述符的理論限制

我發現很多關於增加最大文件描述符的信息,但我想找出理論上的最大值。根據StackOverflow問題"Why do operating systems limit file descriptors?",它歸結爲可用的系統RAM,這很有意義。

現在,考慮到我有多少內存可用,如何確定操作系統文件描述符的最大值?一些顯然仍然允許系統穩定運行的值。

也許有人可能有一個想法給其他高端生產服務器?什麼是最大化同時連接(文件描述符)的潛在數量的「標準」?任何有關如何爲Linux系統最大化文件描述符的見解都將不勝感激。

+3

在用完描述符之前,您將遇到其他資源問題。 – spraff

回答

2

你有很多限制。

  • 複用。如果您的應用程序使用了不錯的後端,這應該不是問題。 Libev聲稱在100,000個文件描述符下複用350us延遲。

  • 應用速度。在每個請求的這種規模(相當低)下1ms的應用程序延遲將花費近兩分鐘的時間爲最佳條件下的100,000個請求提供服務。

  • 帶寬。根據您的應用程序和協議效率,這可能是一個問題。你說這是一個魷魚代理...如果你是代理網站:沒有緩存請求一個網站的客戶端可以接收從幾百KB到幾MB的任何地方。如果每個客戶端的平均完整頁面請求數爲500KB,那麼您會以每秒2000個請求的速度完成全千兆位連接。這可能是你的限制因素。

2000文件描述符是一個相當小的數量。我已經看到,像Python這樣的語言中的簡單應用可以擴展到單個處理器內核上的超過3000個活動連接,而不會出現延遲。

您可以使用像運行在多臺客戶端計算機上的apachebench這樣的軟件來測試您的squid代理,以獲得一些實際的數字。將文件描述符限制提高到2000+並查看會發生什麼,以及它是否會在以後發生變化,這是相當容易的。