您的位置:首页 > 其它

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

2016-07-18 14:13 459 查看
引言: 在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个命令即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows 端口 占用 命令