Linux上的jar包冲突问题

记录一下问题,留下曾经的痕迹。

       某天在新机子上搭建了新的游戏服务器,运行一段时间后发现有玩家反馈某些功能用不了,赶紧把日志拉下来看看,发现是有类方法找不到(java.lang.NoSuchMethodError)。把加载的jar包对了一遍,发现有两个同名不同版本的jar包,低版本的jar包确实没该方法,那就是jar包冲突了。

       那报错问题就找到了,但是还有一个奇怪的问题就是在之前其他机子上已经搭建的服务器并没有出现这个错误,为何有的机子上出现,有的机子上没出现呢?带着这个问题网上查询了下是否有其他人遇到这样的问题。只有比较少的人遇到了这种状况,而且都没有比较好的找到问题根源。通过jinfo命名查看了下进程启动时的信息,发现问题机子和没问题机子的jar包加载顺序的是不一样的,而linux上jar包的加载顺序决定于其文件系统给文件分配的inode值大小,机子的系统环境基本都是一致的,相同上传过程理论上文件生成次序应该是一致的,不过从实际看来不同机子linux给上传的jar包的inode值大小顺序是不一定的,可能跟上传工具有关,如果是同时多任务上传就可能是这种问题,后来跟运维确认了应该就是这种问题。疑问解决了,感觉轻松了不少。

总结:因为一直没出现问题而忽略有jar包冲突的情况是非常危险的事情,一旦环境稍有改变问题就可能爆发,所有以后对jar包的添加审核必须谨慎

你可能感兴趣的:(java)