簡體   English   中英

處理超過1024個文件描述符,在Linux上的C語言中

[英]Handling more than 1024 file descriptors, in C on Linux

我正在使用epoll(邊緣觸發)和線程的線程網絡服務器,我正在使用httperf來對我的服務器進行基准測試。

到目前為止,它的表現非常好或幾乎完全符合發送請求的速度。 直到1024障礙,一切都放慢到大約30個請求/秒。

在64位的Ubuntu 9.04上運行。

我已經嘗試過了:

  • 成功增加文件描述符的ulimit數。 它只是沒有提高1024個並發連接以上的性能。

    andri @ filefridge:〜/ Dropbox / School / Group 452 / Code / server $ ulimit -n
    20000

我很確定這種減速是在操作系統中發生的,因為它發生在事件發送到epoll之前(是的,我也增加了epoll的限制)。

我需要對程序可以處理的並發連接數進行基准測試,直到它開始變慢(沒有操作系統干擾)。

如何讓我的程序運行超過1024個文件描述符?

這個限制可能是有原因的,但是出於基准測試的目的,我需要它。

更新

謝謝你的所有答案,但我想我找到了罪魁禍首。 在我的程序中重新定義__FD_SETSIZE后,一切開始變得更快。 當然ulimit也需要提升,但沒有__FD_SETSIZE我的程序永遠不會利用它。

謝謝你的所有答案,但我想我找到了罪魁禍首。 在我的程序中重新定義__FD_SETSIZE后,一切開始變得更快。 當然ulimit也需要提升,但沒有__FD_SETSIZE我的程序永遠不會利用它。

請參閱C10K問題頁面。 它包含有關如何實現“10000個並發連接”目標的深入討論,同時保持高性能並管理為每個客戶提供服務。

它還包含有關在一次處理大量連接時如何提高內核性能的信息。

只是不要。

是的,我的意思是。

如果您需要增加文件描述符,則代碼中存在隱藏的錯誤。 追捕它而不是治療它的症狀。 記得在完成后關閉文件描述符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM