「Cannot assign requested address.」是因爲Linux分配的客戶端鏈接端口用盡,沒法創建socket鏈接所致,雖然socket正常關閉,可是端口不是當即釋放,而是處於TIME_WAIT狀態,默認等待60s後才釋放。linux
解決辦法:nginx
vi /etc/sysctl.conf net.ipv4.tcp_timestamps=1 net.ipv4.tcp_tw_recycle=1 sysctl -p
還有種問題致使 Cannot assign requested address,本地可分配端口數比較少bash
cat /proc/sys/net/ipv4/ip_local_port_range 查詢可用端口區間服務器
默認是:32768 61000,說明這臺機器本地能向外鏈接61000-32768=28232個鏈接,注意是本地向外鏈接,不是這臺機器的全部鏈接,不會影響這臺機器的 80端口的對外鏈接數。但這個數字會影響到代理服務器(nginx)對app服務器的最大鏈接數,由於nginx對app是用的異步傳輸,因此這個環節的 鏈接速度很快,因此堆積的鏈接就不多。app
解決辦法異步
vi /etc/sysctl.conf net.ipv4.ip_local_port_range = 1024 65535 sysctl -p