我正在使用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])
答案 0 :(得分:3)
在Step2中,列出的所有三个结果实际上都是unix进程。它们都不是tomcat java webserver。所以你正在杀死其中一个进程,它可以帮助你监控实际的tomcat / java进程,当它恢复时...它会尝试再次启动tomcat。运行tomcat的端口从未被释放,内存仍在使用中,因为您永远不会关闭原始的tomcat!因此,您将体验(1)和(3)。
识别Java进程的更好/更简单的方法是将其视为系统监视器等实用程序。您将看到名为“java”的进程,并且将在此处列出进程ID。现在为该pid发出一个kill,它会向你演示foreman + upstart respawn的工作正常。