有没有试过?好不容易把占用端口的进程 kill 掉,满心欢喜启动程序,结果啪嗒一声,还是启动不了,甚至比之前报错更吓人?小编前几天就遇上这事儿了,kill 了 8080 端口后,Tomcat 服务器死活起不来,急得差点重装系统。其实这种情况不算少见,多半不是大问题,就是有些小细节没注意到。今天就把可能的原因和解决办法捋一捋,希望能帮到你,一起往下看吧!
一、先看看是不是端口还没 “腾出来”
kill 完端口,程序启动不了,第一个要查的就是端口到底空出来没。
有时候啊,咱们以为进程被 kill 了,但系统反应慢,端口还没真正释放,这时候启动程序,还是会提示 “端口被占用”。该怎么办呢?
- 等个半分钟到一分钟,让系统缓一缓,再启动程序试试;
- 要是着急,就再用命令行查一次端口,输入 “netstat -ano | findstr 端口号”,看看还有没有 LISTENING 的进程,有的话再 kill 一次。
小编上次就是没等系统反应过来,连续启动好几次都失败,后来歇了几十秒,居然成了。或许暗示着系统释放资源需要一点时间,不能太心急。
二、进程被杀太狠,配置文件乱了
虽然 kill 端口是针对进程的,但有时候用力太猛,可能会把程序的配置文件弄乱,尤其是那些正在写数据的时候被强制终止的程序。
比如数据库程序,kill 进程的时候它可能正在保存数据,突然中断,配置文件就可能损坏。这时候启动程序,会提示 “配置错误” 或者 “文件损坏”。解决办法倒也简单:
- 找到程序的配置文件目录,一般在安装目录的 “conf” 文件夹里;
- 看看有没有带 “backup” 或者日期的备份文件,比如 “server.xml.bak”,把它改回原来的名字(删掉.bak);
- 要是没有备份,那就卸载程序,重新安装一次,基本能解决。
不过话说回来,不是所有程序都有自动备份功能,所以 kill 进程前,最好先正常关闭程序,万不得已再强制 kill,这是小编血的教训。
三、防火墙挡路了,程序连不上网络
这一点很容易被忽略,kill 端口后,程序启动不了,可能不是程序本身的问题,而是防火墙突然把程序给拦住了。
尤其是 Windows 系统,有时候会自作主张,认为刚被强制终止的程序有风险,就不让它联网了。怎么检查呢?
- 按下 Win+I 打开设置,找到 “更新和安全” 里的 “Windows 安全中心”;
- 点 “防火墙和网络保护”,看看是不是有提示 “已阻止某个应用”;
- 找到你的程序,勾选 “允许通过防火墙通信”,尤其是 “私有网络” 和 “公有网络” 都勾上。
小编之前帮朋友处理过类似问题,折腾半天发现是防火墙在搞鬼,放行之后立马就启动成功了。
四、依赖的其他程序没启动,程序 “孤掌难鸣”
很多程序不是单独运行的,得依赖其他服务,比如 web 服务器依赖数据库,游戏客户端依赖登录服务器。如果你 kill 端口的时候,不小心把依赖的程序也干掉了,那主程序肯定启动不了。
该怎么办呢?
- 想想这个程序需要哪些其他程序配合,比如启动 Tomcat 可能需要 MySQL 先启动;
- 把这些依赖的程序一一启动起来,再试试启动主程序;
- 要是记不清依赖哪些程序,就看看程序的帮助文档,里面一般会写。
具体这些依赖程序之间是如何协同工作的,具体机制待进一步研究,但保证它们都正常运行,总没错。
五、实在没辙了,还有终极大法
要是上面的办法都试了,程序还是启动不了,也别灰心,还有几招可以试试:
- 重启电脑,这招虽然笨,但很多时候能解决莫名其妙的问题,系统重启后,端口、进程都会重置;
- 换个端口启动程序,比如原来用 8080,改成 8081,在程序的配置文件里改一下端口号就行;
- 到程序的官方论坛或者客服那里问问,把报错信息发给他们,专业人士可能一眼就看出问题所在。
小编个人觉得,重启电脑是最省心的,尤其是对新手来说,不用琢磨那么多,重启之后说不定啥都好了。当然,能自己找到问题并解决,成就感肯定更大。
总之,kill 端口后程序启动不了,别慌,一步一步排查,多半是小问题。先查端口释放没,再看配置文件,然后检查防火墙和依赖程序,实在不行就重启或换端口。希望这些办法能帮到你,少走点弯路。