关于atomikos 这个分布式事务管理开源包,有时候会报  log already in use 这样的错误,每次删除了服务中的一些文件就正常了,我大概说下原因。


如果项目中用了atomikos 来管理事物,那么在启动web服务的时候,就会产生如下四个文件:tm.outtm.out.lcktmlog0.logtmlog.log.lckatomikos默认配置名字


并且会将tm.outtmlog0.log这两个文件给锁住,别人不可以用,直到web服务停止运行时候释放锁。


这样一来,如果这两个文件被锁,又有其他地方用到这两个文件的时候,系统就会报这个错误。


一般导致这两个问题的原因我了解到的如下:


1.同一个web服务里运行多个项目,而这几个项目中有多于一个项目用到了atomikos,会产生此问题,这样解决的办法需要修改atomikos源码包。(公司项目基本不会出现一个web服务下跑多个应用项目)

2.在启动web服务的时候,由于一些原因没有及时的停掉服务,这时候又启动的web服务,有可能锁还没有释放就访问了这两个文件,也可以导致此错误。

   此问题可利用脚本重启应用,在脚本中添加删除tm.out文件的操作,从而解决该问题


一般出现此问题后需要手动停掉 web服务器,然后删除呗锁住的文件,在重新启动web服务,重新生成文件即可解决此问题。