昨天装了一个linux虚拟机,把虚拟机的端口设置成了9999,内部使用没问题,结果在windows环境下使用Xshell 6和Xftp连接linux虚拟机的时候,连接不上,不知道哪里出了问题,一直解决不了,搁置了。
今天关闭eclipse重启tomcat,tomcat正常启动,但是往tomcat里add项目的时候,凭直觉有明显的卡顿,add过程十分缓慢。更严重的是add完成之后,代码已经复制到tomcat规定目录,但是项目没有任何反应,没有生成启动会生成的缓存,完全没有启动。
由于启动日志跳的太快了,一直没有看清,最后复盘的时候才找到这个错误信息,一个LocateRegistry.createRegistry(9999)的异常。
查了一下,这是个java的jmx,一个为应用程序、设备、系统等植入管理功能的框架,它在Server start前必会 rmiregistry 9999 注册端口,或者LocateRegistry.createRegistry(9999)。
马上去查了下是谁占用了9999端口,
netstat -aon|findstr "9999" 查出占用端口号的进程的FID
tasklist|findstr "xxxx" 根据FID查询是哪个进程
一查,是linux虚拟机无疑。
最后删除了linux虚拟机,重新安装了一个其他端口的,问题解决,linux虚拟机也能连上了。
个人复盘的情形是这样的:
首先,我装了linux虚拟机,将端口号设置为9999。启动linux虚拟机,但是因为我当时启动着项目,9999占用中,所以linux不能呗外部连接,Xshell 6和Xftp连接失败。
然后,今天关闭了tomcat,清除了java的相关进程,jmx关闭。linux虚拟机一直保持后台状态,迅速占用了9999端口。导致重新启动tomcat时,jmx LocateRegistry.createRegistry(9999)异常,jmx启动失败。实际上这时候Xshell 6和Xftp应该能用了,但是我没有去尝试。
最后就是因为端口冲突,两败俱伤。
以后设置端口的时候,先netstat -aon|findstr "xxxx" 查一下端口有没有被使用吧。