1. 程式人生 > 其它 >net.core.somaxconn的作用

net.core.somaxconn的作用

net.core.somaxconn 是Linux中的一個kernel引數,表示socket監聽(listen)的backlog上限。什麼是backlog呢?backlog就是socket的監聽佇列,當一個請求(request)尚未被處理或建立時,他會進入backlog。而socket server可以一次性處理backlog中的所有請求,處理後的請求不再位於監聽佇列中。當server處理請求較慢,以至於監聽佇列被填滿後,新來的請求會被拒絕。 

        在Hadoop 1.0中,引數 ipc.server.listen.queue.size 控制了服務端socket的監聽佇列長度,即backlog長度,預設值是128。而Linux的引數 net.core.somaxconn
 預設值同樣為128。當服務端繁忙時,如NameNode或JobTracker,128是遠遠不夠的。這樣就需要增大backlog,例如我們的3000臺叢集就將 ipc.server.listen.queue.size 設成了32768,為了使得整個引數達到預期效果,同樣需要將kernel引數 net.core.somaxconn 設成一個大於等於32768的值。

如何修改net.core.somaxconn


Linux中可以工具 syctl 來動態調整所有的kernel引數。所謂動態調整就是kernel引數值修改後即時生效。但是這個生效僅限於os層面,對於Hadoop來說,必須重啟應用才能生效。 
命令 
# sysctl -a  
會顯示所有的kernel引數及值。 
修改引數值的語法 
# sysctl -w net.core.somaxconn=32768  
以上命令將kernel引數net.core.somaxconn的值改成了32768。這樣的改動雖然可以立即生效,但是重啟機器後會恢復預設值。為了永久保留改動,需要用vi在 /etc/sysctl.conf 中增加一行 
net.core.somaxconn= 4000  
然後執行命令 
# sysctl -p