nexus 挂掉启动报错解决

nexus:3.13.01

nexus启动日志:

./nexus run   (注意nexus start是看不到日志的)

问题:

nexus由于内存溢出挂掉,重新启动报错  Error injecting constructor, java.nio.file.FileAlreadyExistsException: /data/nexus/sonatype-work/nexus3/elasticsearch/nexus/nodes/0/__es__.tmp

问题分析:

查看nexus的ES版本;在ES的源码中通过关键字__es__.tmp找到了相关源码,如下所示:

 ensureAtomicMoveSupported方法是在ES启动时初始化GatewayMetaState对象时调用的,从方法注释可以看出这个方法是为了测试ES运行环境中是否支原子性地移动一个文件。测试的方法就是,先创建一个名为__es__.tmp的文件,在将其移动到名为__es__.final的文件,如果这个操作成功,说明支持,如果报异常说明不支持。测试结束后会通过调用Files.deleteIfExists(src);Files.deleteIfExists(target);将__es__.tmp 与__es__.final这两个文件都删除。

在看我们的报错


显然报这个错是因为ensureAtomicMoveSupported方法方法试图创建__es__.tmp的时候他已经存在了。至于为什么存在这个文件,我的推测是,上次ES启动过程中在__es__.tmp创建到删除这段时间,ES进程被强制杀死导致__es__.tmp没有被删除。

解决方法

解决这个异常的方法很容易想到,那就是手动把__es__.tmp删除,再重启NEXUS即可。

另外,需要说明的是ES的开发者已经意识到这个缺陷,并且将其在5.x版本中修复。

 参考连接:https://blog.csdn.net/qqqq0199181/article/details/87935519

原文地址:https://www.cnblogs.com/thirteen-yang/p/13591459.html