問題:tomcat使用startup.bat啟動時,可以使用JMX方式監(jiān)控(通過jdk6/bin/jconsole.exe連接測試),同時查看tomcat6的網(wǎng)絡(luò)連接時(使用了360的網(wǎng)絡(luò)連接查看器-_-),也會有配置的JMX的監(jiān)聽端口(我們這里配置的1090)。但是把tomcat做成NT服務(wù)之后,就無法使用jconsole連接,同時在網(wǎng)絡(luò)連接里也看不到1090監(jiān)聽端口
原因:最根本的原因是startup.bat會去調(diào)用catalina.bat,而catalina.bat中配置了JMX的相關(guān)參數(shù)。但是注冊成系統(tǒng)服務(wù)時就不會去調(diào)用catalina.bat。
解決:根據(jù)原因,解決方法就是在注冊服務(wù)時加上相應(yīng)的參數(shù)。想到了兩條路徑,修改tomcat/bin/service.bat,在里面添加參數(shù)。另一個方法是直接修改注冊后的服務(wù)的參數(shù)。
第一種方法,看了看service.bat,沒仔細研究,也沒去嘗試。
第二種方法,打開服務(wù)的屬性頁面,理論上應(yīng)該是在可執(zhí)行文件路徑后面加一些參數(shù)(從mysql的參數(shù)推斷來看,不知道是不是如此),但是此項是無法編輯的(圖1)。
google的結(jié)果是先看到了一篇通過修改注冊表的方法來修改參數(shù)的方法,在[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\ITSM\Parameters\Java]下修改Options參數(shù),添加如下內(nèi)容(圖2):
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1090
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
修改后測試發(fā)現(xiàn)可以連接,但是修改注冊表畢竟不方便(當然可以寫成.reg文件直接讓工程師去執(zhí)行)。再查一下修改tomcat參數(shù)的文章,說到可以利用tomcat6w.exe來修改參數(shù)。
在tomcat/bin下面有tomcat6.exe和tomcat6w.exe,其中tomcat6.exe自然是服務(wù)運行時必須的文件。曾經(jīng)用過jbuilder且使用jbuilder的原理來把jar包生成exe,所以對這個帶w的exe,第一印象就是對應(yīng)的窗口化的程序。雙擊tomcat6w.exe執(zhí)行,提示找不到服務(wù)tomcat6。
我理解tomcat默認會把服務(wù)注冊為tomcat6,而我們使用了service install ITSM,注冊后的服務(wù)是ITSM,于是鬼使神差的就把tomcat6w.exe復制了一份改名為ITSM,雙擊執(zhí)行,打開了ITSM服務(wù)的配置界面(圖3)。界面里的Java選項卡中發(fā)現(xiàn)java options中已經(jīng)有了JMX相關(guān)的參數(shù)。此時才意識到原來這里的設(shè)置就是對應(yīng)的注冊表中設(shè)置的那些參數(shù)。
至此,對于tomcat的參數(shù)設(shè)置終于明了,也意識到在catalina里面配置的增大jvm內(nèi)存的參數(shù),在注冊為服務(wù)后,其實也沒起作用。
后來又測試了一下,刪除tomcat6w.exe對服務(wù)并沒有影響,它只是個純粹的圖形化的配置界面。當然tomcat6.exe是不能刪的,刪了服務(wù)肯定就無法啟動了。

(圖1)

(圖2)

(圖3) |