技術(shù)博客已遷移至個(gè)人頁,歡迎查看 yloopdaed.icu
您也可以關(guān)注 JPP - 這是一個(gè)Java養(yǎng)成計(jì)劃,需要您的加入。
前言
在測(cè)試服務(wù)器的使用過程,由于大家的使用沒有非常規(guī)范,所以經(jīng)常會(huì)出現(xiàn)服務(wù)啟動(dòng)不起來的問題。這類問題的產(chǎn)生經(jīng)常是因?yàn)槟闩渲玫姆?wù)端口號(hào)被其他程序占用了。
那么如何定位一臺(tái)服務(wù)器中端口的使用情況呢?這里推薦兩個(gè)非常好用的命令
查看正在使用的端口
netstat -tnlp
-t : 指明顯示TCP端口
-u : 指明顯示UDP端口
-l : 顯示監(jiān)聽套接字
-p : 顯示進(jìn)程標(biāo)識(shí)符和程序名稱,每一個(gè)套接字都屬于一個(gè)程序。
-n : 不進(jìn)行DNS輪詢,顯示IP(可以加速操作)
-a : 顯示全部(包括ESTABLISHED)
套接字就是socket,表示一對(duì)IP/PORT的組合。每個(gè)套接字對(duì)應(yīng)一個(gè)PID,相當(dāng)于給一個(gè)應(yīng)用程序賦予了收發(fā)通訊協(xié)議的能力
網(wǎng)關(guān),用于匹配目標(biāo)IP于掩碼的與運(yùn)算結(jié)果,網(wǎng)絡(luò)層完成,尋找下一跳
這里關(guān)于套接字和網(wǎng)關(guān)的信息不展開,等我完全理解以后可能會(huì)整理一篇博客
這里 -u
不是很常用。
查詢結(jié)果以我自己的一臺(tái)服務(wù)器為例:
上圖中本地地址和遠(yuǎn)端地址的組合對(duì)應(yīng)一個(gè)PID,其中本地地址和遠(yuǎn)端地址的組合就是一個(gè)socket。多個(gè)socket指向同一個(gè)PID,就是多路復(fù)用。
上圖中本地地址 Local Address
一欄中顯示出了目前所有正在監(jiān)聽的端口號(hào)。
以tomcat為例,從最右側(cè) Program name
為 java 的就是 tomcat。因?yàn)樗怯?java 開發(fā)的一款 servlet 容器。
通常可以通過 jps
命令查看tomcat的PID。名稱為 Bootstrap 。
為什么 tomcat 啟動(dòng)叫 Bootstrap?給大家留個(gè)問題,答案在/bin/startup.sh 和 /bin/catalina.sh 中
從上面的圖可以看出,我這臺(tái)機(jī)器的tomcat占用了兩個(gè)端口:8005和8080,前者是用來監(jiān)聽SHUTDOWN指令的。
最后
這篇博客沒有太多內(nèi)容,就是分享一個(gè)好用的命令行工具,便于大家查看服務(wù)器中已經(jīng)占用的端口號(hào)。這樣在配置新服務(wù)的過程中可以避免因?yàn)槎丝诒徽加枚速M(fèi)時(shí)間。
文章中途有一些發(fā)散的知識(shí)和問題,都是跟網(wǎng)絡(luò)編程相關(guān)的。等我學(xué)習(xí)完成后再輸出。