2013-03-04 50 views
1

我使用foreman export upstart /etc/init來設置tomcat應用服務器,以便在Ubuntu中監視和維護可用性。Tomcat在Ubuntu上重生的Upstart腳本

但也有,我想一些建議了幾個挑戰:

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的網絡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])

回答

3

在第二步,所有列出的三個結果實際上是unix進程。他們都不是tomcat java web服務器。所以你正在殺死其中一個進程,它可以幫助你監控實際的tomcat/java進程,當它回來時它會嘗試再次啓動tomcat。運行tomcat的端口從未被釋放,並且內存仍在使用中,因爲你從不關閉原始的tomcat!因此你會遇到(1)和(3)。

識別java進程的更好/更簡單的方法是查看它的實用程序,如系統監視器。您將看到一個名爲'java'的進程,進程ID將在那裏列出。現在爲該pid發出殺戮,這將演示給你,領班+暴發重生很好。