在测试和运维环节经常需要部署多个应用程序在同一台服务器上,这样经常就会碰到端口冲突的问题(即端口被其他服务程序占用),那么如何查找出是哪个应用程序占用了要使用的端口呢?下面几招教你快速解决端口冲突问题。
netstat命令说明
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息,在Windows和CentOS系统下命令参数发现略有区别。
Windows系统下的netstat命令参数:
CentOS系统下的netstat命令参数:
通过对比netstat在Windows和CentOS系统下命令参数我们可以看出在展示进程号上,Windows系统中加-o参数来显示进程号,而CentOS系统中加-p参数来显示进程号;所以使用netstat展示端口连接时Windows和CentOS系统下命令分别为:netstat -ano和netstat –anp。这两个命令是展示所有的端口连接,如果端口连接很多时不方便查找我们想要的端口是否存在。此时需要再加上端口进行更加查找展示,Windows下查找的命令是findstr *,CentOS下查找的命令是grep *(此处的*使用端口号替代)。
查看端口是否被占用
Windows下查看端口是否被占用的命令为netstat -ano | findstr "8088",若已有程序占用执行结果如下图:
CentOS下查看端口是否被占用的命令为netstat -anp | grep "8083",若已有程序占用执行结果如下图:
通过进程号查看占用端口的应用程序
netstat只能查看占用端口的进程号,所以还需要其他命令来查询具体应用程序,Windows系统我们使用命令wmic process get name,executablepath,processid | findstr 2984(2984为使用netstat查询的到的进程号),如下图:
CentOS系统我们使用命令ps -ef | grep 48963 (48963为使用netstat查询的到的进程号),如下图:
Java应用程序通过jps命令查看应用程序路径
从上面可以看出均是Java应用程序,但Windows系统下没有像CentOS系统下那样列出了应用程序路径,所以还需要使用Java自带的命令行工具jps 2984(2984为使用netstat查询的到的进程号)来查看Java应用程序路径,如下图:
可以看到执行jps 2984命令后进程号为2984的整个Java应用程序的信息,我们找到user.dir = D:\nexus-2.8.1-01-bundle\nexus-2.8.1-01即可知道占用端口的应用程序路径了。
通过以上的步骤相信如果再出现端口冲突的问题大家都应该能快速找到占用端口的应用程序了。如果大家有更好的方法可以关注我们的微信公众号,回复消息与我们进行探讨。
本文转载自微信公众号「 麻辣软硬件」,可以通过以下二维码关注。转载本文请联系 麻辣软硬件公众号。