Windows下查找占用特定端口的应用进程

引言: 在windows下经常会碰到,某个端口被占用,无法启动特定应用的问题,需要找到占用特定端口的程序,并停掉它,然后才能正常继续工作,今天我们将介绍如何来查找端口的占用。

1. 问题的提出

    端口被占用的典型问题:

2016-07-18 13:55:53.587  INFO 1040 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-07-18 13:55:53.735 ERROR 1040 --- [           main] o.a.coyote.http11.Http11NioProtocol      : Failed to start end point associated with ProtocolHandler ["h

java.net.BindException: Address already in use: bind
        at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_45]
        at sun.nio.ch.Net.bind(Net.java:437) ~[na:1.8.0_45]
        at sun.nio.ch.Net.bind(Net.java:429) ~[na:1.8.0_45]
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_45]
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_45]
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:351) ~[tomcat-embed-core-8.0.36.jar:8.0.36]
        at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:763) ~[tomcat-embed-core-8.0.36.jar:8.0.36]
        at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:474) ~[tomcat-embed-core-8.0.36.jar:8.0.36]
        at org.apache.catalina.connector.Connector.startInternal(Connector.java:986) [tomcat-embed-core-8.0.36.jar:8.0.36]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) [tomcat-embed-core-8.0.36.jar:8.0.36]
        at org.apache.catalina.core.StandardService.addConnector(StandardService.java:239) [tomcat-embed-core-8.0.36.jar:8.0.36]
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:194
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:151) [spring-boot-1.3.6.RELE
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:293) [spring-
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) [spring-boot-1.3.6.RELEA
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) [spring-context-4.2.7.RELEASE.jar:4.2.7.RE
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) [spring-boot-1.3.6.RELEASE.jar
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:760) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE]
        at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:360) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:306) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.3.6.RELEASE.jar:1.3.6.RELEASE]
        at com.rain.wx.WxDemoApplication.main(WxDemoApplication.java:10) [classes/:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
        at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
        at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:478) [spring-boot-maven-plugin-1.3.6.RELEASE.jar:1.3.6.RELEASE]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]

2016-07-18 13:55:53.799 ERROR 1040 --- [           main] o.apache.catalina.core.StandardService   : Failed to start connector [Connector[HTTP/1.1-8080]]
  上述示例,即为windows下8080端口被占用,无法正常启动tomcat

2.  如何来查找哪个进程在占用?

    方法1: netstat -ano | findstr "8080"

D:\Dev\webspace\WXDemo>netstat -ano | findstr "8080"
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       3060
  TCP    10.10.153.158:59023    180.163.32.199:8080    ESTABLISHED     6392
  TCP    [::]:8080              [::]:0                 LISTENING       3060
   定位出占用8080的是PID为3060的进程

    方法2:tasklist | findstr "port"

D:\Dev\webspace\WXDemo>tasklist | findstr "3060"
TNSLSNR.EXE                   3060 Services                   0     22,580 K
  同样可以定位出PID为3060的进程。

 区别:  一般情况下推荐使用netstat来查找。 tasklist是基于进程维度来查找的,有可能有疏漏,比如这里的外部端口180.163.32.199:8080,就有可能疏漏掉。

3.  解决问题

    TNSLSNR.exe是Oracle express edition中的某个服务OracleXETNSListener,故从控制面板->服务中,找到它,停用即可。

4. 总结

    重新启动应用即可正常工作,记住这里的2个命令即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值