温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

linux下jboss启动、关闭、端口配置等常见问题faq -凯发k8网页登录

温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

  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属性;将各套应用对应的端口全部配置在同一个文件中;推荐采用该方案,具体可参考:
  1. [xhtml]
  2. <mbeancode="org.jboss.services.binding.servicebindingmanager" 
  3.   name="jboss.system:service=servicebindingmanager"> 
  4.   <attributename="servername">ports-01attribute> 
  5.   <attributename="storeurl">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xmlattribute> 
  6.   <attributename="storefactoryclassname"> 
  7.     org.jboss.services.binding.xmlservicesstorefactory 
  8.   attribute> 
  9. mbean> 

 

  • jboss无法正常启动,报异常javax.management.mbeanregistrationexception: preregister() failed?
    一般来说,上面的异常出现在4.2及其以后的版本中,比较详细的异常如下:
    [java]
    1. javax.management.mbeanregistrationexception: preregister() failed: [objectname='jboss.remoting:service=networkregistry', class=org.jboss.remoting.network.networkregistry (org.jboss.remoting.network.networkregistry@16b6c55)] 
    2.         at org.jboss.mx.server.registry.basicmbeanregistry.invokepreregister(basicmbeanregistry.java:713
    3.         at org.jboss.mx.server.registry.basicmbeanregistry.registermbean(basicmbeanregistry.java:211
    4.         at sun.reflect.generatedmethodaccessor1.invoke(unknown source) 
    5.         at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25
    6.         at java.lang.reflect.method.invoke(method.java:585
    7.         at org.jboss.mx.interceptor.reflecteddispatcher.invoke(reflecteddispatcher.java:155
    8.         ... 51 more 
    9. caused by: java.lang.runtimeexception: exception creating identity: mall_dev4: mall_dev4 
    10.         at org.jboss.remoting.ident.identity.get(identity.java:211
    11.         at org.jboss.remoting.network.networkregistry.preregister(networkregistry.java:268
    12.         at org.jboss.mx.server.abstractmbeaninvoker.invokepreregister(abstractmbeaninvoker.java:966
    13.         at org.jboss.mx.modelmbean.modelmbeaninvoker.invokepreregister(modelmbeaninvoker.java:489
    14.         at org.jboss.mx.server.abstractmbeaninvoker.preregister(abstractmbeaninvoker.java:654
    15.         at org.jboss.mx.server.registry.basicmbeanregistry.invokepreregister(basicmbeanregistry.java:697
    16.         ... 56 more 

    这主要是因为jboss启动了一个jboss.remoting:service=networkregistry的mbean服务,启动时却又无法根据当前hostname找到ip!
    凯发天生赢家一触即发官网的解决方案为在/etc/hosts中绑定当前服务器的主机名和ip,比如10.2.224.214 mall_dev4;
    对于4.2系列之前的版本,如果没有绑定主机名和ip,虽然会出现以下的异常,但并不一定会影响应用的正常启动;
    [java]
    1. 11:32:12,427 warn  [servicecontroller] problem starting service jboss:service=invoker,type=http 
    2. java.net.unknownhostexception: mall_dev4: mall_dev4 
    3.         at java.net.inetaddress.getlocalhost(inetaddress.java:1308
    4.         at org.jboss.invocation.http.server.httpinvoker.checkinvoker 
    5.         at org.jboss.invocation.http.server.httpinvoker.startservice(httpinvoker.java:101
    6.         at org.jboss.system.servicembeansupport.jbossinternalstart(servicembeansupport.java:289
    7.         at org.jboss.system.servicembeansupport.jbossinternallifecycle(servicembeansupport.java:245
    8.         at sun.reflect.generatedmethodaccessor2.invoke(unknown source) 
    9.         at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25
    10.         at java.lang.reflect.method.invoke(method.java:585
    11.         at org.jboss.mx.interceptor.reflecteddispatcher.invoke(reflecteddispatcher.java:155
    12.         at org.jboss.mx.server.invocation.dispatch(invocation.java:94
    13.         at org.jboss.mx.server.invocation.invoke(invocation.java:86
    14.         at org.jboss.mx.server.abstractmbeaninvoker.invoke(abstractmbeaninvoker.java:264
    15.         at org.jboss.mx.server.mbeanserverimpl.invoke(mbeanserverimpl.java:659
    16.         at org.jboss.system.servicecontroller$serviceproxy.invoke(servicecontroller.java:978
    17.         at $proxy0.start(unknown source) 
    18.         at org.jboss.system.servicecontroller.start(servicecontroller.java:417
  • 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=指定地址,比如-b 0.0.0.0就表示绑定所有地址;
    方式2,启动脚本中通过参数-djboss.bind.address指定地址,比如-djboss.bind.address=0.0.0.0;
    方式3,直接修改需要对外暴露的端口绑定地址,比如tomcat/server.xml中的http端口绑定address信息;
  • jboss正常启动,但是用shutdown脚本无法关闭应用?
    对于jboss的关闭,shutdown命令允许好几种方式的关闭,可以参考该命令的帮助:
    [java]
    1. usage: shutdown [options]  
    2. options: 
    3.     -h, --help                show this help message (default
    4.     -d[=]        set a system property 
    5.     --                        stop processing options 
    6.     -s, --server=        specify the jndi url of the remote server 
    7.     -n, --servername=    specify the jmx name of the serverimpl 
    8.     -a, --adapter=      specify jndi name of the mbeanserverconnection to use 
    9.     -u, --user=         specify the username for authentication 
    10.     -p, --password=     specify the password for authentication 
    11. operations: 
    12.     -s, --shutdown            shutdown the server 
    13.     -e, --exit=         force the vm to exit with a status code 
    14.     -h, --halt=         force the vm to halt with a status code 
    一般来说,我们使用-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中会抛如下的异常信息:
    [java]
    1. exception in thread "main" javax.naming.communicationexception [root exception is java.rmi.connectexception: connection refused to host: 10.0.0.1; nested exception is:  
    2.         java.net.connectexception: connection timed out]  
    3.         at org.jnp.interfaces.namingcontext.lookup(namingcontext.java:707)  
    4.         at org.jnp.interfaces.namingcontext.lookup(namingcontext.java:572)  
    5.         at javax.naming.initialcontext.lookup(initialcontext.java:351)  
    6.         at org.jboss.shutdown.main(shutdown.java:202)  
    7. caused by: java.rmi.connectexception: connection refused to host: 10.0.0.1; nested exception is:  
    8.         java.net.connectexception: connection timed out  
    9.         at sun.rmi.transport.tcp.tcpendpoint.newsocket(tcpendpoint.java:574)  
    10.         at sun.rmi.transport.tcp.tcpchannel.createconnection(tcpchannel.java:185)  
    11.         at sun.rmi.transport.tcp.tcpchannel.newconnection(tcpchannel.java:171)  
    12.         at sun.rmi.server.unicastref.invoke(unicastref.java:94)  
    13.         at org.jnp.server.namingserver_stub.lookup(unknown source)  
    14.         at org.jnp.interfaces.namingcontext.lookup(namingcontext.java:610)  
    15.         ... 3 more  
  • 如何对linux下的jboss应用进行debug?
    其实这个问题和jboss是否部署在linux下没有直接关系,可以在jboss启动时指定远程debug端口即可,比如:
    [java]
    1. -xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n 

    然后在eclipse中新建remote debug时指定对应的端口即可;


  • posted on 2012-03-28 10:58 雪山飞鹄 阅读(5313) 评论(0)  编辑  收藏

    只有注册用户后才能发表评论。


    网站导航:
                  
     
    网站地图