今天壓力測(cè)試某服務(wù)時(shí)發(fā)現(xiàn)一個(gè)特別詭異的問(wèn)題埠啃,redis-cli連接后端redis-server,客戶(hù)端所在的服務(wù)器只能建立28232個(gè)連接,然后就返回errorno = 1鼻吮,然后更奇葩的是系統(tǒng)負(fù)載直線上升到idle=0
因?yàn)橛玫氖翘摂M機(jī)车吹,一直懷疑虛擬機(jī)是共用宿主機(jī)的本地端口筹裕,但咨詢(xún)了系統(tǒng)的同學(xué)說(shuō),這個(gè)沒(méi)有問(wèn)題窄驹,再加上每次都是整好這個(gè)數(shù)朝卒,覺(jué)得必有蹊蹺,決定做如下兩個(gè)測(cè)試:
1.用多臺(tái)服務(wù)器的客戶(hù)端壓測(cè)redis-server乐埠,redis連接數(shù)只能到5W——redis中設(shè)置了maxclients抗斤,修改之后,能突破6W
2.用同一臺(tái)服務(wù)器上客戶(hù)端上壓測(cè)多redis-server丈咐,連接1個(gè)server能到28232個(gè)連接后瑞眼,仍然還能連接20000個(gè)連接到其他redis
這兩個(gè)結(jié)果推翻了宿主機(jī)本地端口限制的懷疑。
到底是為什么呢扯罐?繼續(xù)咨詢(xún)牛人负拟,提示我們看看ip_local_port_range的參數(shù)
cat /proc/sys/net/ipv4/ip_local_port_range
發(fā)現(xiàn)是:32768 61000
正好相差28232個(gè)!4鹾印掩浙!
咨詢(xún)我們的OP,為什么設(shè)置這么一個(gè)參數(shù)秸歧?得到的答復(fù)是厨姚,為了避免一些server程序的listen端口被占用而無(wú)法啟動(dòng)。
那為什么沒(méi)有空閑本地端口idle=0呢键菱?通過(guò)查看故障時(shí)的監(jiān)控發(fā)現(xiàn)谬墙,硬中斷變得很多,每秒鐘5000+
解決問(wèn)題中查的幾個(gè)資料記錄下來(lái):
http://www.oschina.net/question/17_31076
https://www.cyberciti.biz/tips/linux-increase-outgoing-network-sockets-range.html
http://blog.chinaunix.net/uid-116213-id-3376727.html
http://www.lenky.info/archives/2013/03/2245
http://blog.csdn.net/bd_zengxinxin/article/details/51781630
同時(shí)有一個(gè)小小的感悟:如果懷疑他,就親手去驗(yàn)證他拭抬!