背景
在调试rpc和api服务的代码时,启动服务就出现bind:Address already in use的问题,意思是端口被占用了,在尝试了许多方法后终于解决,现总结如下。
解决方案
kill掉占用端口的进程
执行以下代码查看端口占用情况
netstat -ntlp
定位到端口的pid值,例如我需要的端口号是9001,则对应pid为3197
然后,执行代码kill掉该进程
kill -9 3197
然后重启服务即可。
一般来说,到这里端口占用的问题就可以解决了,然而我在启动rpc服务时仍然报错。。
问题定位
经过排查,我在docker容器中执行了api和rpc的服务代码,但由于连接超时导致服务未关闭,才造成了端口的占用。执行代码可以查看docker容器的识别号:
docker ps
然后执行以下代码查看该容器内的进程,比如这个容器的识别号是f5f7ab7cbdd6
docker top f5f7ab7cbdd6
可以看到,之前启动的rpc和api服务仍在运行,因此需要把它们kill掉
注意:需要把相关的进程都kill掉,比如上图需要kill掉的进程是30904,31090,31009和31197,最后呈现下面的画面
这样,再重新启动rpc和api服务就不会报错了。