马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
CentOS 上查端口占用是个基础但高频的动作:服务起不来怀疑端口被占、改配置前想确认哪个进程在监听、杀进程之前要搞清是谁占的。这篇把三件最常顺手用的工具按用法拆开,最后说清怎么定位到进程并停掉它。
一、什么场景需要查端口占用
三种典型:新服务启动报端口已被使用;防火墙看着放通了但外部连不上,怀疑服务根本没监听;想重启某个服务但不知道它在哪个进程手上。这三种场景的排查入口其实都是同一件事——先看谁在占用这个端口。
二、netstat:最经典的一套
看全部端口:
netstat -tunlp
这四个参数各有分工:-t 只看 TCP;-u 只看 UDP;-n 直接显示数字形式的地址和端口,不做域名和服务名解析,快;-l 只列处于监听状态的。组合起来就是一眼看全机在听哪些口。
看指定端口,比如 80:
netstat -tunlp | grep 80
能直接看到占用进程号和进程名。
三、lsof:按端口反查进程
lsof 的本意是列打开的文件,在 Linux 里网络连接也算文件,所以它能按端口反查进程,信息比 netstat 更全:
lsof -i :端口号
lsof -i :80
输出里能看到进程号、属主、进程名。拿到进程号之后,想知道这个进程到底是哪个可执行文件:
ps -p 进程号 -o comm=
把进程号换成上一步查到的数字即可。这条组合在做根因判断时特别有用——有时候端口被占的并不是你以为的那个服务。
四、ss:更现代的替代品
ss 是 netstat 的接替者,读取内核(sock 层)信息更快,参数也基本一致:
ss -tuln
-t、-u、-l、-n 的含义和 netstat 相同。看指定端口:
ss -tuln | grep 80
五、找到进程之后怎么停
确认占用进程的身份之后再动手,别直接杀。停有两种方式:比较温和的让服务自己停,比如走它自己的停止命令;或者直接用 kill 发信号:
kill -9 进程号
-9 是强制立即终止,用在服务自己停不掉的场景。生产环境建议先确认这个进程停掉之后有没有别的依赖,尤其是它上面还挂着业务的时候。
六、三件工具怎么选
- 想快速看一眼全机器在听什么:ss -tuln,输出干净、速度快。
- 想按端口查到完整进程信息:lsof -i :端口,信息最全。
- 老系统或者文档里给的命令:netstat -tunlp,兼容性最好。
- 三个都不在的话先装:ss 来自 iproute,lsof 和 netstat 多数系统自带。
七、小结
排查顺序固定下来其实很简单:先 ss 或 netstat 找到谁在监听,再 lsof 拿进程号,ps 确认进程名,确认没有业务依赖后才 kill。真正容易出错的不是命令,而是没搞清楚就杀进程——线上一次误杀,比多敲两分钟命令的代价大得多。
qidao123.com企服评测-应用市场 编辑提示
|