1

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

但有一些挑战,我想就以下问题提出一些建议:

1) 在sudo service tomcat start使用kill <pid>... 所需的端口尚未发布。克服这个问题的解决方法是什么?

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

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


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

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

4

1 回答 1

3

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

识别 java 进程的更好/更简单的方法是查看它的实用程序,例如 System Monitor。您将看到一个名为“java”的进程,并且该进程 ID 将在此处列出。现在为该 pid 发出一个 kill 指令,它将向您演示工头 + upstart 重生工作正常。

于 2013-03-05T02:50:30.440 回答