今天用php連接最近新開發的一個服務做測試,發現命令行打印出:Cannot assign requested address
網上找了下原因,大致上是由於客戶端頻繁的連服務器,由於每次連接都在很短的時間內結束,導致很多的TIME_WAIT,以至於用光了可用的端 口號,所以新的連接沒辦法綁定端口,即“Cannot assign requested address”。是客戶端的問題不是服務器端的問題。通過netstat,的確看到很多TIME_WAIT狀態的連接。
client端頻繁建立連接,而端口釋放較慢,導致建立新連接時無可用端口。
網上的解決方法:
執行命令修改如下2個內核參數 (需要root權限)
sysctl -w net.ipv4.tcp_timestamps=1 開啟對於TCP時間戳的支持,若該項設置為0,則下面一項設置不起作用
sysctl -w net.ipv4.tcp_tw_recycle=1 表示開啟TCP連接中TIME-WAIT sockets的快速回收