Tomcat的Upstart脚本在Ubuntu上重生

时间:2013-03-04 15:41:53

标签: tomcat ubuntu upstart foreman

我正在使用foreman export upstart /etc/init来设置tomcat应用服务器,以便在Ubuntu中监控和维护可用性。

但是我想提出一些建议:

1)用sudo service tomcat start启动我的实例...如果我尝试使用kill <pid>杀死进程...我可以看到它立即被Upstart实用程序重生...但是它太快了!所需的端口尚未发布。解决这个问题的解决办法是什么?

SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-nio-8443"]
8 java.net.BindException: Address already in use
9       at sun.nio.ch.Net.bind0(Native Method)
43 Caused by: java.net.BindException: Address already in use
44      at sun.nio.ch.Net.bind0(Native Method)

2)我使用initctl list | grep tomcat找出pid(本例中为3518)并终止该过程:

$ initctl list | grep tomcat
  tomcat start/running
  tomcat-web-1 start/running, process 3518
  tomcat-web start/running

有可能杀死tomcat-web-1实际上是测试Upstart重生能力的错误方法吗?

3)另一个挑战是如果我这样做一两次,我会很快遇到记忆问题:

376 Error occurred during initialization of VM
377 Could not reserve enough space for object heap

4)最后,默认脚本似乎只处理错误的退出条件的respawn。但是机器重启并不算作其中之一那么应该如何增强foreman export upstart /etc/init的导出来处理这种情况呢?

我想知道是否还有其他人遇到过类似的挑战和/或有解决方法吗?


更新#1(2013年3月4日):

要完成(4),我只需编辑appname.conf文件的start on语句以包含start on (... OR runlevel [2345])

1 个答案:

答案 0 :(得分:3)

在Step2中,列出的所有三个结果实际上都是unix进程。它们都不是tomcat java webserver。所以你正在杀死其中一个进程,它可以帮助你监控实际的tomcat / java进程,当它恢复时...它会尝试再次启动tomcat。运行tomcat的端口从未被释放,内存仍在使用中,因为您永远不会关闭原始的tomcat!因此,您将体验(1)和(3)。

识别Java进程的更好/更简单的方法是将其视为系统监视器等实用程序。您将看到名为“java”的进程,并且将在此处列出进程ID。现在为该pid发出一个kill,它会向你演示foreman + upstart respawn的工作正常。