做运维这几年,我见过太多小白被“端口被占用”这四个字搞崩溃。
明明代码写得没问题,服务就是起不来。
或者更惨的是,服务跑着跑着,突然连不上了。
这时候,第一反应不是去查日志,而是满世界问:网络服务器端口怎么查?
说实话,这种问题真的没必要问人。
自己动手,丰衣足食。
今天我不整那些虚头巴脑的理论,直接上干货。
咱们分两种情况,Linux和Windows,因为大部分生产环境都是Linux,所以我重点说Linux。
先说Linux,这是重头戏。
很多新手喜欢用 netstat,觉得它经典。
但我告诉你,netstat 在很多新系统里已经被标记为过时了。
虽然还能用,但不够直观,也不够快。
我推荐你用 ss 命令,这是 socket statistics 的缩写。
速度快,信息全,而且几乎在所有现代Linux发行版里都默认安装。
打开终端,输入:ss -tlnp
别眨眼,这行命令包含了所有TCP监听端口。
看到结果后,你会看到类似这样的列表。
比如 0.0.0.0:22 或者 [::]:22。
这就是SSH端口,默认22,别乱动。
如果你看到 0.0.0.0:8080,那大概率是你的Java应用或者Nginx。
这时候,你就知道端口是谁占用了。
如果不确定,直接复制那个PID,去查进程。
当然,如果你还是习惯用 netstat,也没毛病。
输入 netstat -tlnp 也是一样的效果。
只是记得,如果提示命令不存在,那就去装 net-tools 包。
接下来是Windows用户,这帮兄弟可能觉得Linux命令太复杂。
其实Windows也有命令行,叫 netstat。
打开CMD,或者PowerShell,输入:netstat -ano
这个命令会列出所有活动连接和监听端口。
重点看最后那个PID,进程ID。
然后去任务管理器,切换到“详细信息”选项卡。
找到对应的PID,就能知道是哪个软件在占用端口。
比如PID 1234 对应的是 chrome.exe,那就是浏览器在占端口。
如果是PID 0,那是系统内核,别动它。
这里有个坑,很多人查端口,只查了本地。
但如果你是想查远程服务器开放了哪些端口,那就得用 nmap。
nmap 是端口扫描的神器。
输入 nmap -p 1-65535 IP地址
这会扫描目标服务器的所有端口。
但注意,别乱扫别人的服务器,那是违法的。
只扫你自己拥有的服务器。
扫描结果会告诉你哪些端口是 open,哪些是 filtered。
open 表示服务正在运行,filtered 表示被防火墙挡住了。
这时候,你就明白了,为什么你的服务在本地能通,远程不通。
因为防火墙没开端口。
这时候,你需要去云控制台,或者服务器里的 iptables/firewalld 里放行端口。
这才是解决问题的根本。
很多人问我,网络服务器端口怎么查才能最快?
我的答案是:先查本地,再查远程,最后查防火墙。
顺序错了,查半天也是白搭。
再分享一个真实案例。
有个朋友的项目,每次重启都报端口被占用。
他查了半天,发现是之前的Java进程没杀干净。
僵尸进程占着端口,新进程起不来。
这时候,用 ss -tlnp 就能一眼看到那个PID。
直接 kill -9 PID,搞定。
简单粗暴,但有效。
还有,别迷信图形化工具。
像Navicat、Xshell这些,虽然方便,但在排查底层问题时,不如命令行直观。
命令行不会骗你,它显示什么就是什么。
图形界面可能会缓存,或者显示不全。
最后,给大家一个避坑指南。
查端口时,一定要区分 IPv4 和 IPv6。
有时候你看到 127.0.0.1:8080,只监听本地。
但你的应用需要监听 0.0.0.0:8080,才能被外部访问。
这时候,查到了端口也没用,因为绑定地址不对。
所以,查端口不仅仅是看数字,还要看绑定地址。
这才是老运维的细心之处。
希望这些经验能帮你少走弯路。
如果你还在为端口问题头疼,或者搞不定复杂的网络配置。
别硬扛,找专业人士聊聊。
有时候,一句指点,能省你三天时间。
本文关键词:网络服务器端口怎么查