背景

在启动服务器的时候,偶尔会遇到端口占用的问题,导致服务器启动失败。大致的报错是这样的:

解决方案

通常解决方案有三种:

  1. 手动更换服务端口
  2. 查找当前占用端口的进程,将这些进程kill掉
  3. 自动更换服务端口方案

1. 手动更换服务端口

这个比较好理解,就是手动更改一下服务配置里使用的端口。

优势

  • 可以自己配置指定的端口。常规用法,没啥优势

劣势

  • 更换的端口可能也被占用了,你还得再换
  • 如果端口配置是在源码里有git记录的,那么你在提交代码的时候可能还要改回去,不然会影响到其他人

2. 查找当前占用端口的进程,将这些进程kill掉

首先查找到占用端口的进程

# lsof -i:8080
lsof -i:端口号

kill占用端口的进程

# kill -9 3880
kill -9 PID

大致流程是这样的:

优势

  • 无需更换端口

劣势

  • 有误杀重要进程的风险

使用这个方案时一定要慎重!!!你一定要先搞清楚你要kill掉的进程发挥了什么样的作用,避免误杀。

3. 自动更换服务端口方案

目前有部分工具内部已经实现了自动更换端口的效果,但是如果你项目目前的状态还没有支持自动切换服务端口,而你又有希望自动更换服务端口的强烈愿望,可以看一下这位老哥的示例:

端口占用后自动更换端口 fixed [issues13](https://github.com/KuangPF/mpvue-weui/is... · KuangPF/mpvue-weui@2081cba

优势

  • 一次编码,多次受益

劣势

  • 最终使用的端口不完全可控

总结

综合以上三种方案,我更推荐方案三。但是方案三也是有一定成本和前提的,不是所有的项目当前都能用方案三。我日常都是用方案二,因为不想改源码,但是用方案二的时候一定要慎重啊!!