啓動我們自己的服務時,分配端口號需要注意什麼

在一個Linux上跑一個服務,需要指定一個監聽端口(系統調用listen),當client請求服務時,系統爲該請求建立 tcp連接,該連接的port值是一個隨機數字。該數字的取值範圍配置在
/proc/sys/net/ipv4/ip_local_port_range 文件中,我的機器上的內容如下:

32768   61000

啓動我們自己的服務時,分配端口號需要注意儘量不要在這個區間內

否則容易報類似下面的錯:

E0513 10:29:17.856476840   14733 server_chttp2.cc:40]        {"created":"@1589336957.856392895","description":"No address added out of total 1 resolved","file":"src/core/ext/transport/chttp2/server/chttp2_server.cc","file_line":395,"referenced_errors":[{"created":"@1589336957.856389192","description":"Failed to add any wildcard listeners","file":"src/core/lib/iomgr/tcp_server_posix.cc","file_line":342,"referenced_errors":[{"created":"@1589336957.856378048","description":"Unable to configure socket","fd":10,"file":"src/core/lib/iomgr/tcp_server_utils_posix_common.cc","file_line":216,"referenced_errors":[{"created":"@1589336957.856373682","description":"Address already in use","errno":98,"file":"src/core/lib/iomgr/tcp_server_utils_posix_common.cc","file_line":189,"os_error":"Address already in use","syscall":"bind"}]},{"created":"@1589336957.856388669","description":"Unable to configure socket","fd":10,"file":"src/core/lib/iomgr/tcp_server_utils_posix_common.cc","file_line":216,"referenced_errors":[{"created":"@1589336957.856386083","description":"Address already in use","errno":98,"file":"src/core/lib/iomgr/tcp_server_utils_posix_common.cc","file_line":189,"os_error":"Address already in use","syscall":"bind"}]}]}]}

假定你啓動了一個服務,監聽的端口爲50056,它正好落在了32768~61000區間。在A機器上能正常啓動,並運行良好。但在B機器上仍然有可能會無法啓動,並報上面的錯。甚至你在B機器上使用lsof -i :50056這個命令去查看是否有被佔用情況,也會發現沒啥進程佔用,也看不出什麼問題。

保險的做法,就是監聽端口直接避開這個區間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章