技術(shù)博客已遷移至個(gè)人頁(yè)遣疯,歡迎查看 yloopdaed.icu
您也可以關(guān)注 JPP - 這是一個(gè)Java養(yǎng)成計(jì)劃,需要您的加入凿傅。
前言
在測(cè)試服務(wù)器的使用過(guò)程缠犀,由于大家的使用沒(méi)有非常規(guī)范,所以經(jīng)常會(huì)出現(xiàn)服務(wù)啟動(dòng)不起來(lái)的問(wèn)題聪舒。這類問(wèn)題的產(chǎn)生經(jīng)常是因?yàn)槟闩渲玫姆?wù)端口號(hào)被其他程序占用了辨液。
那么如何定位一臺(tái)服務(wù)器中端口的使用情況呢?這里推薦兩個(gè)非常好用的命令
查看正在使用的端口
netstat -tnlp
-t : 指明顯示TCP端口
-u : 指明顯示UDP端口
-l : 顯示監(jiān)聽(tīng)套接字
-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)聽(tīng)的端口號(hào)。
以tomcat為例潜叛,從最右側(cè) Program name
為 java 的就是 tomcat秽褒。因?yàn)樗怯?java 開發(fā)的一款 servlet 容器。
通惩担可以通過(guò) jps
命令查看tomcat的PID销斟。名稱為 Bootstrap 。
為什么 tomcat 啟動(dòng)叫 Bootstrap椒舵?給大家留個(gè)問(wèn)題蚂踊,答案在/bin/startup.sh 和 /bin/catalina.sh 中
從上面的圖可以看出,我這臺(tái)機(jī)器的tomcat占用了兩個(gè)端口:8005和8080笔宿,前者是用來(lái)監(jiān)聽(tīng)SHUTDOWN指令的犁钟。
最后
這篇博客沒(méi)有太多內(nèi)容,就是分享一個(gè)好用的命令行工具泼橘,便于大家查看服務(wù)器中已經(jīng)占用的端口號(hào)涝动。這樣在配置新服務(wù)的過(guò)程中可以避免因?yàn)槎丝诒徽加枚速M(fèi)時(shí)間。
文章中途有一些發(fā)散的知識(shí)和問(wèn)題侥加,都是跟網(wǎng)絡(luò)編程相關(guān)的捧存。等我學(xué)習(xí)完成后再輸出。