.
.
.
.
.
我们经常使用的网络程序偶尔会遇到端口被占用的情况,但是却苦于无法找到占用端口的程序,这篇文章将教你两个命令,轻松排查端口占用问题。
关键命令:
1.查询端口占用:netstat -ano | findstr "7001"
2.查询占用端口的进程:tasklist /fi "pid eq 2072"
3.[赠送]干掉占用的进程:taskkill /im avp.exe /f
下面开始进入正题,扯一扯事件的始末。急于解决问题的朋友就不必往下看了,上面三条命令足矣解决燃眉之急。
有一天早晨,用小学生写作文的话说就是风和日丽晴空万里,我来到办公室启动各种开发环境准备开始苦逼的一天。
Weblogic 启动到80%左右就一直停在那里,控制台最后一行已经输出了:
<2013-11-13 上午10时26分53秒 CST> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>
正常来说即使 Eclipse Progress 进度条显示不到100%也可以使用浏览器访问了,可是谁知用浏览器一访问,返回:
Internet Explorer cannot display the webpage
隐隐的有种不详的预感,但是也没做太多的怀疑,毕竟进度条还没走完。
等啊等,等啊等。。。启动进度一直停留在百分之80几,等了10分钟,Eclipse 终于报了一个错误,似乎是说Weblogic启动超时。
再启动还是同样的问题。。
排查了半天,想了各种办法,依然找不出原因来。
无奈只好仔细看控制台上输出的日志,忽然一行log赫然映入眼帘:
<2013-11-13 上午10时26分53秒 CST> <Error> <Server> <BEA-002606> <Unable to create a server socket for listening on channel "Default[6]". The address 127.0.0.1 might be incorrect or another process is using port 7001: java.net.BindException: Address already in use: JVM_Bind.>
哈哈,踏破铁鞋无觅处,原来错误消息就在眼前。。很明显它说7001端口被占用了。
于是就该拿出上面的命令来解决问题了!
赶紧启动CMD:
C:\Users\yuhuashi>netstat -ano | findstr "7001"
TCP 127.0.0.1:7001 127.0.0.1:7001 ESTABLISHED 2072
7001端口被PID为2072的进程给占用了,赶紧看看2072是何方神圣:
C:\Users\yuhuashi>tasklist /fi "pid eq 2072"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
avp.exe 2072 Services 0 93,628 K
哈,被我抓到了。。是avp.exe,即卡巴斯基。
呃,排查到此就结束了,元凶也被抓到了,只是要不要对它 kill 呢?那就要看各位看官的实际情况适当解决了。
不过这里说一下这个附赠的 taskkill 命令。
这个命令可以将某个进程结束掉,这里我用我那个启动失败的 Weblogic 给大家做个示范:
C:\Users\yuhuashi>taskkill /im java.exe /f
SUCCESS: The process "java.exe" with PID 4772 has been terminated.
成功结束了 java.exe 进程。
im 参数表示要结束的进程名称,当然也可以使用 pid,改成 /pid 参数即可。
如果你输入了一个不存在的进程名称或者PID,那么执行结果如下:
C:\Users\yuhuashi>taskkill /im java.exe /f
ERROR: The process "java.exe" not found.