2009-10-28 92 views
9

我對監聽系統調用積壓值有疑問。從聽系統呼叫的手冊頁。監聽系統調用積壓值

如果backlog參數大於/ proc/sys/net/core/somaxconn中的值,則將其自動截斷爲該值;這個文件的默認值是128.

這意味着我的服務器一次只能接受< 128個連接。如果我想接受更多連接> 128?我可以簡單地將值設置爲可能的最大數量,以便我可以訪問更多數量的連接?

回答

8

該號碼只是連接隊列的大小,其中新連接等待有人接受它們。一旦您的應用程序調用accept(),就會從該隊列中刪除等待連接。所以,你絕對可以處理128個以上的同時連接,因爲他們通常只在隊列中花費很短的時間。

+0

@Greg - 所以積壓值僅指示連接隊列的大小,但不表示要接受的連接數。一旦接受完成,它將從爲其他連接提供空間的隊列中刪除。 – codingfreak

+0

是的,這是正確的。 –

4

是的。使用命令如

$ echo 1000 >/proc/sys/net/core/somaxconn 

要設置更高的限制。例如,請參閱this page瞭解更多調整提示。

+0

看起來很簡單直接。但是將積壓值增加到最大值會增加內核中爲偵聽隊列分配的內存。有沒有什麼叫合理價值,不會增加開銷並提供更好的性能? – codingfreak

+4

呃...儲存東西通常需要記憶。如果你需要更大的積壓量,但不願意花費內存來存儲它......我不知道你能做什麼,我害怕。 – unwind

1

積壓值不是最大連接數,而是未完成連接的數量,即您不能接受的連接數():ed。