背景
在启动服务器的时候,偶尔会遇到端口占用的问题,导致服务器启动失败。大致的报错是这样的:
解决方案
通常解决方案有三种:
- 手动更换服务端口
- 查找当前占用端口的进程,将这些进程kill掉
- 自动更换服务端口方案
1. 手动更换服务端口
这个比较好理解,就是手动更改一下服务配置里使用的端口。
优势
- 可以自己配置指定的端口。
常规用法,没啥优势
劣势
- 更换的端口可能也被占用了,你还得再换
- 如果端口配置是在源码里有git记录的,那么你在提交代码的时候可能还要改回去,不然会影响到其他人
2. 查找当前占用端口的进程,将这些进程kill掉
首先查找到占用端口的进程
# lsof -i:8080
lsof -i:端口号
kill占用端口的进程
# kill -9 3880
kill -9 PID
大致流程是这样的:
优势
- 无需更换端口
劣势
- 有误杀重要进程的风险
使用这个方案时一定要慎重!!!你一定要先搞清楚你要kill掉的进程发挥了什么样的作用,避免误杀。
3. 自动更换服务端口方案
目前有部分工具内部已经实现了自动更换端口的效果,但是如果你项目目前的状态还没有支持自动切换服务端口,而你又有希望自动更换服务端口的强烈愿望,可以看一下这位老哥的示例:
优势
- 一次编码,多次受益
劣势
- 最终使用的端口不完全可控
总结
综合以上三种方案,我更推荐方案三。但是方案三也是有一定成本和前提的,不是所有的项目当前都能用方案三。我日常都是用方案二,因为不想改源码,但是用方案二的时候一定要慎重啊!!