網店版重生系列:Linux下Jboss啓動、關閉、端口配置等常見問題FAQ

  1. 單臺Linux服務器中如何部署多個獨立應用,即多個應用不能run在一個jboss實例中?
    換言之,這個問題也可以這樣描述:在單臺Linux服務器中服務啓動多個Jboss實例?
    默認情況下,jboss啓動時加載server/default/目錄下的配置,要實現多個實例的啓動,主要是解決端口衝突的問題,因爲一套端口只能被一個應用佔有;
    一般來說,我們可以在Jboss啓動時通過-Djboss.server.home設置當前實例啓動時加載不同的目錄來實現;
    比如Jboss主程序安裝在/usr/xx/jboss/,應用放在/home/admin/app/;那此時就可以cp一份default目錄到當前應用app目錄下,通過-Djboss.server.home=/home/admin/app/default來啓動該實例;
    若直接在/usr/xx/jboss/server/下複製default目錄並改名爲yy,則可以用更簡單的參數-c yy來啓動; 
    對於多應用的情況,我們仍然要解決端口衝突的問題,有兩種方式:
    其一,直接修改各應用對應的default目錄下的所有配置端口,主要涉及配置文件conf/jboss-service.xml、tomcat下的server.xml;該方法比較土,很容易出錯,因爲端口衆多,只要有一項端口沒有改,jboss就將無法正常啓動;若應用較少,比如就只有2個,那這種方式勉強可以用用;
    其二,在jboss-service.xml中啓用jboss.system:service=ServiceBindingManager這個mbean服務,設置ServerName、StoreURL屬性;將各套應用對應的端口全部配置在同一個文件中;推薦採用該方案,具體可參考:
  2. Jboss無法正常啓動,報異常javax.management.MBeanRegistrationException: preRegister() failed?
    一般來說,上面的異常出現在4.2及其以後的版本中,比較詳細的異常如下:
    這主要是因爲Jboss啓動了一個jboss.remoting:service=NetworkRegistry的mbean服務,啓動時卻又無法根據當前hostname找到IP!
    解決方案爲在/etc/hosts中綁定當前服務器的主機名和IP,比如10.2.224.214 mall_dev4; 
    對於4.2系列之前的版本,如果沒有綁定主機名和IP,雖然會出現以下的異常,但並不一定會影響應用的正常啓動;
  3. Jboss已經正常啓動,但是無法用IP或者綁定IP訪問應用?
    熟悉Linux相關知識的筒靴都知道一個端口是綁定在某個地址上的,可以是一個,也可以是多個,一個端口在同一個地址上不能被兩個應用佔有;
    出現這個問題一般是因爲你使用的是4.2系列及其之後的版本,因爲從這個系列開始,Jboss默認綁定的端口由之前的0.0.0.0變成了127.0.0.1;前者表示綁定當前服務器下所有地址,包括自身的IP、127.0.0.1;而後者只綁定了127.0.0.1,而沒有綁定本機IP,通過IP去訪問應用自然也就無法成功了,因爲訪問的IP地址沒有開放對應的端口;
    對於默認的這種情況,一般來說jboss是要和apache搭配使用的,apache暴露應用外部訪問的端口,然後apache再監聽本地(也就是127.0.0.1)的端口;
    當然這個默認配置也是可以修改的,方式也比較多,比如:
    方式1,啓動腳本中通過參數-b, --host=<host or ip>指定地址,比如-b 0.0.0.0就表示綁定所有地址;
    方式2,啓動腳本中通過參數-Djboss.bind.address指定地址,比如-Djboss.bind.address=0.0.0.0;
    方式3,直接修改需要對外暴露的端口綁定地址,比如tomcat/server.xml中的http端口綁定address信息;
  4. Jboss正常啓動,但是用shutdown腳本無法關閉應用?
    對於jboss的關閉,shutdown命令允許好幾種方式的關閉,可以參考該命令的幫助: 一般來說,我們使用-s參數來關閉,也即通過JNDI URL;
    若是基於JNDI URL的方式出現這種情況一般有三種可能:
    其一,當前應用所使用的default目錄內的內容與當前運行jboss自身的default內容不一致,比如當前jboss版本爲4.0.5,而啓動時指定的default卻是從jboss 4.2.1中cp過來的;這種情況在搭建環境時經常出現,因爲一般直接從另外一臺linux服務器中scp過來,但其實兩臺服務器自身安裝的jboss版本不一致;
    其二,shutdown命令中指定的JNDI端口與實際應用啓動的JNDI端口不一致
    其三,/etc/hosts中對當前主機名綁定的IP地址不正確,比如當前服務器實際的IP地址爲10.2.224.214,而hosts中綁定的卻是10.0.0.1;
    總之,出現此類情況都是因爲jboss自身無法正確接收到正確的關閉命令所致,一般來說在jboss的server.log中會拋如下的異常信息:
  5. 如何對Linux下的Jboss應用進行debug?
    其實這個問題和Jboss是否部署在Linux下沒有直接關係,可以在jboss啓動時指定遠程debug端口即可,比如:

    然後在eclipse中新建remote debug時指定對應的端口即可; 
發佈了135 篇原創文章 · 獲贊 69 · 訪問量 97萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章