从前有一个SpringBoot程序,我启动了它。很不幸启动失败,报错如下:
[2020-04-29 16:30:51.086] [main] [ERROR] [apache.catalina.core.StandardService:182 ] - Failed to start connector [Connector[HTTP/1.1-8081]] org.apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-8081]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) at org.apache.catalina.core.StandardService.addConnector(StandardService.java:225) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:261) at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:198) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.startWebServer(ServletWebServerApplicationContext.java:311) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:164) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386) at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230) at onemore.study.EightZeroEightOneApplication.main(EightZeroEightOneApplication.java:18) Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalina.connector.Connector.startInternal(Connector.java:1020) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 13 common frames omitted Caused by: java.net.BindException: Address already in use: bind at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:433) at sun.nio.ch.Net.bind(Net.java:425) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:219) at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1156) at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:591) at org.apache.catalina.connector.Connector.startInternal(Connector.java:1018) ... 14 common frames omitted
很明显,启动失败的原因是8081端口被占用了。这个很简单,找到占用端口的进程,把它杀掉就可以了。
查找占用8081端口的进程的PID:
C:\>netstat -nao | findstr "8081" TCP 0.0.0.0:8081 0.0.0.0:0 LISTENING 25056 TCP [::]:8081 [::]:0 LISTENING 25056
根据进程的PID查找进程名:
C:\>tasklist | findstr 25056 macmnsvc.exe 25056 Services 0 7,548 K
根据进程名杀掉进程:
C:\>taskkill /f /t /im macmnsvc.exe 错误: 无法终止 PID 25056 (属于 PID 824 子进程)的进程。 原因: 拒绝访问。
拒绝访问?这是什么进程?搜了一下,原来是McAfee Agent,杀毒软件肯定有保护机制,无法结束进程。又搜了一下,McAfee Agent如何修改端口。只在McAfee论坛上找到了一篇几年的帖子,McAfee工程师是这样回复的:
按照McAfee工程师的指引,我没有找到对应的配置选项,可能是时间久远版本不同了。解决方法的寻找之路就此陷入了尴尬的境地。
不过,在搜索的过程中,我发现一个叫做FrmInst.exe的程序,它用于McAfee Agent框架安装。它有很多参数,详见用于在 Windows 上安装 McAfee Agent 的命令行选项。我注意到一个参数:/REMOVE
,如果 McAfee Agent 未使用,则将其删除。 如果正在使用,McAfee Agent 将更改为更新程序模式。 于是,我尝试了一下:
"C:\Program Files\McAfee\Common Framework\x86\FrmInst.exe" /REMOVE=AGENT
McAfee Agent开始被重新安装,重新安装后奇迹出现了,8081端口不再被占用了。
温馨提示:FrmInst.exe的路径可以不同,可以在McAfee的目录中搜索FrmInst.exe。