Java ActiveMQ赢得';无法重新启动,因为KahaDB已锁定

Java ActiveMQ赢得';无法重新启动,因为KahaDB已锁定,java,jetty,activemq,restart,Java,Jetty,Activemq,Restart,要在我的开发机器上本地启动/停止ActiveMQ(5.6),我只需分别运行/ActiveMQ start和/ActiveMQ stop 在我们的QA机器上,我们将其作为服务安装,并分别运行service activemq start和service activemq stop 我只是去弹起QA机器,发出service-activemq-stop,然后service-activemq-start重新启动它 我看到一个进程ID正在被创建,如果我运行ps-aef | grep activemq,我会看

要在我的开发机器上本地启动/停止ActiveMQ(5.6),我只需分别运行
/ActiveMQ start
/ActiveMQ stop

在我们的QA机器上,我们将其作为服务安装,并分别运行
service activemq start
service activemq stop

我只是去弹起QA机器,发出
service-activemq-stop
,然后
service-activemq-start
重新启动它

我看到一个进程ID正在被创建,如果我运行
ps-aef | grep activemq
,我会看到activemq服务器的活生生的进程

但是如果我转到http://:8161/admin,我会看到服务器关闭时出现的典型错误:

Firefox无法建立与服务器8161的连接

编辑:我现在已经尝试了
/active start
service activemq start
方法,但都产生了相同的问题:我看到正在创建一个进程,但在web管理工具中什么都没有

我检查了ActiveMQ的主目录,没有看到任何类型的
日志/
目录,因此我甚至不确定从何处开始调试该问题

要么AMQ没有重新启动,要么其web管理应用程序没有重新启动或运行不正常;不管怎样,我都不知道从哪里开始。提前谢谢

编辑

我在
data/activemq.log
中看到以下错误:

2012-10-07 11:37:14501 |信息|数据库/qa服务器/kahadb/lock已锁定。。。等待10秒以解锁数据库。原因:java.io.IOException:无法锁定文件“/qa server/kahadb/lock”。|org.apache.activemq.store.kahadb.MessageDatabase | main 2012-10-07 11:37:24504 |信息|数据库/qa服务器/kahadb/lock已锁定。。。等待10秒以解锁数据库。原因:java.io.IOException:无法锁定文件“/qa server/kahadb/lock”。|org.apache.activemq.store.kahadb.MessageDatabase | main


检查
data/
目录中的日志

这是打字错误吗<代码>:8161.管理员

尝试
:8161/admin

停止服务并不保证服务已停止。Windows跨越多个线程,并在一定时间后假定服务已停止。如果仍在进程列表中看到进程正在运行,请始终检查、验证和终止该进程。这样做可能会清除它持有的锁。

结果表明,在我们的QA环境中有多个AMQ服务器。当我关闭第一台服务器时,由于某种原因引发了一个异常,因此它没有释放锁。该锁的拥有权随后转移到另一个AMQ实例(第一个服务器是主服务器,第二个服务器是从服务器)


当我尝试重新启动第一台服务器(主服务器)时,它不会重新启动,因为第二台服务器拥有锁。我关闭了第二台服务器并释放了锁,允许我重新启动这两台服务器。

如果上述两种方法都不适用于您的情况,请按照以下简单步骤操作:

  • 转到任务管理器并终止当前运行的所有java进程
  • 以管理员身份运行activemq批处理文件
  • 通过在本地浏览器中打开以下窗口,验证此操作是否正常运行:

  • 转到Win7中的apache安装主文件夹,即apache-activemq-X.XX.X
  • 单击鼠标右键并选择“属性”
  • 更改登录用户对此文件夹的访问权限-“通常,登录用户应该已经具有管理员权限,但如果您在计算机上解压了此apache MQ,则管理员权限将丢失”

  • 现在,您应该让activemq命令平稳运行了

    谢谢@quartzde(+1)-是的,我正要发布一个从日志中看到的异常;请参阅原始问题中的更新。再次感谢!是的,那是一个打字错误(我会改正的)!看起来AMQ没有重新启动。停止前和启动后检查PID。还是一样吗?终止这个过程。再次感谢@quartzde-请看我在Bobby Fisher的回答下面的评论。我已经验证了启动ActiveMQ后PID是否存在,以及停止后PID是否不再存在。此外,我已经验证了我没有多个PID试图相互竞争,例如多个AMQ实例由于我发出的所有开始/停止而相互竞争,等等。可能停止没有释放锁。停止AMQ,清理
    数据/
    ,启动AMQ。谢谢,但是当你说“清理
    数据/
    时,我有点困惑。
    数据/
    是它的日志目录吗(在这种情况下,为什么擦除日志文件会释放锁)?或者你说的“清理
    数据/
    ”是其他意思吗?再次感谢你们到目前为止的帮助,再次感谢+1。另外,我找到了这篇文章,但它对我来说意义不大。我知道我们使用NFS,所以可能有一个“主”实例或其他什么?谢谢@BobbFisher(+1)-但是我在关闭服务之前和之后都用
    ps-aef | grep-activemq
    检查了PID,这两种方法都有(服务activemq-stop和./activemq-stop),并在所有场景中验证PID不再存在/处于活动状态。。。有什么想法吗?看起来您正在linux环境中工作。很抱歉,我假设了OS。但是,查看您发布的日志,似乎activemq正在尝试保留数据库上的锁,但Kakadu库中存在的锁文件告诉我,可能是其他进程正在保留数据库上的锁,或者activemq的锁由于某种原因未被清除。如果您确定没有其他进程在数据库上持有锁,则可以删除锁文件以使activemq正常启动。这完全是错误的。一旦您的服务在OnStop()或OnShutdown()中接收到停止信号,它就会停止,即使您的服务陷入无休止的循环——在这种情况下,Windows会等待直到达到内部超时(可能很短,也可能很长)