- 浏览: 88262 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (110)
- myeclipse JVM 虚拟机内存设置 (1)
- 查询含有clob字段表的sql语句 (1)
- 项目个人价值体现 (1)
- Java多线程并发编程 (1)
- spring (4)
- 启悟 (1)
- hadoop (27)
- mysql数据库乱码问题 (1)
- linux (6)
- 架构与设计 (1)
- java (6)
- mysql (2)
- 分页编程 (1)
- 励志 (2)
- 技术要求 (0)
- guava (1)
- 分布式开发(SOA) (4)
- 微服务架构 + API 网关 (5)
- 消息中间件 (4)
- Dubbo (8)
- 面谈 (0)
- 高并发架构 (1)
- maven (1)
- MongoDB (1)
- hbase (2)
最新评论
Linux下Jboss启动、关闭、端口配置等常见问题FAQ
单台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属性;将各套应用对应的端口全部配置在同一个文件中;推荐采用该方案,具体可参考:
[xhtml] view plaincopyprint?
<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-01</attribute>
<attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>
<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-01</attribute>
<attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>
Jboss无法正常启动,报异常javax.management.MBeanRegistrationException: preRegister() failed?
一般来说,上面的异常出现在4.2及其以后的版本中,比较详细的异常如下:
[java] view plaincopyprint?
javax.management.MBeanRegistrationException: preRegister() failed: [ObjectName='jboss.remoting:service=NetworkRegistry', Class=org.jboss.remoting.network.NetworkRegistry (org.jboss.remoting.network.NetworkRegistry@16b6c55)]
at org.jboss.mx.server.registry.BasicMBeanRegistry.invokePreRegister(BasicMBeanRegistry.java:713)
at org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:211)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
... 51 more
Caused by: java.lang.RuntimeException: Exception creating identity: mall_dev4: mall_dev4
at org.jboss.remoting.ident.Identity.get(Identity.java:211)
at org.jboss.remoting.network.NetworkRegistry.preRegister(NetworkRegistry.java:268)
at org.jboss.mx.server.AbstractMBeanInvoker.invokePreRegister(AbstractMBeanInvoker.java:966)
at org.jboss.mx.modelmbean.ModelMBeanInvoker.invokePreRegister(ModelMBeanInvoker.java:489)
at org.jboss.mx.server.AbstractMBeanInvoker.preRegister(AbstractMBeanInvoker.java:654)
at org.jboss.mx.server.registry.BasicMBeanRegistry.invokePreRegister(BasicMBeanRegistry.java:697)
... 56 more
javax.management.MBeanRegistrationException: preRegister() failed: [ObjectName='jboss.remoting:service=NetworkRegistry', Class=org.jboss.remoting.network.NetworkRegistry (org.jboss.remoting.network.NetworkRegistry@16b6c55)]
at org.jboss.mx.server.registry.BasicMBeanRegistry.invokePreRegister(BasicMBeanRegistry.java:713)
at org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:211)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
... 51 more
Caused by: java.lang.RuntimeException: Exception creating identity: mall_dev4: mall_dev4
at org.jboss.remoting.ident.Identity.get(Identity.java:211)
at org.jboss.remoting.network.NetworkRegistry.preRegister(NetworkRegistry.java:268)
at org.jboss.mx.server.AbstractMBeanInvoker.invokePreRegister(AbstractMBeanInvoker.java:966)
at org.jboss.mx.modelmbean.ModelMBeanInvoker.invokePreRegister(ModelMBeanInvoker.java:489)
at org.jboss.mx.server.AbstractMBeanInvoker.preRegister(AbstractMBeanInvoker.java:654)
at org.jboss.mx.server.registry.BasicMBeanRegistry.invokePreRegister(BasicMBeanRegistry.java:697)
... 56 more
这主要是因为Jboss启动了一个jboss.remoting:service=NetworkRegistry的mbean服务,启动时却又无法根据当前hostname找到IP!
解决方案为在/etc/hosts中绑定当前服务器的主机名和IP,比如10.2.224.214 mall_dev4;
对于4.2系列之前的版本,如果没有绑定主机名和IP,虽然会出现以下的异常,但并不一定会影响应用的正常启动;
[java] view plaincopyprint?
11:32:12,427 WARN [ServiceController] Problem starting service jboss:service=invoker,type=http
java.net.UnknownHostException: mall_dev4: mall_dev4
at java.net.InetAddress.getLocalHost(InetAddress.java:1308)
at org.jboss.invocation.http.server.HttpInvoker.checkInvokerURL(HttpInvoker.java:204)
at org.jboss.invocation.http.server.HttpInvoker.startService(HttpInvoker.java:101)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
at $Proxy0.start(Unknown Source)
at org.jboss.system.ServiceController.start(ServiceController.java:417)
11:32:12,427 WARN [ServiceController] Problem starting service jboss:service=invoker,type=http
java.net.UnknownHostException: mall_dev4: mall_dev4
at java.net.InetAddress.getLocalHost(InetAddress.java:1308)
at org.jboss.invocation.http.server.HttpInvoker.checkInvokerURL(HttpInvoker.java:204)
at org.jboss.invocation.http.server.HttpInvoker.startService(HttpInvoker.java:101)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
at $Proxy0.start(Unknown Source)
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=<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信息;
Jboss正常启动,但是用shutdown脚本无法关闭应用?
对于jboss的关闭,shutdown命令允许好几种方式的关闭,可以参考该命令的帮助:
[java] view plaincopyprint?
usage: shutdown [options] <operation>
options:
-h, --help Show this help message (default)
-D<name>[=<value>] Set a system property
-- Stop processing options
-s, --server=<url> Specify the JNDI URL of the remote server
-n, --serverName=<url> Specify the JMX name of the ServerImpl
-a, --adapter=<name> Specify JNDI name of the MBeanServerConnection to use
-u, --user=<name> Specify the username for authentication
-p, --password=<name> Specify the password for authentication
operations:
-S, --shutdown Shutdown the server
-e, --exit=<code> Force the VM to exit with a status code
-H, --halt=<code> Force the VM to halt with a status code
usage: shutdown [options] <operation>
options:
-h, --help Show this help message (default)
-D<name>[=<value>] Set a system property
-- Stop processing options
-s, --server=<url> Specify the JNDI URL of the remote server
-n, --serverName=<url> Specify the JMX name of the ServerImpl
-a, --adapter=<name> Specify JNDI name of the MBeanServerConnection to use
-u, --user=<name> Specify the username for authentication
-p, --password=<name> Specify the password for authentication
operations:
-S, --shutdown Shutdown the server
-e, --exit=<code> Force the VM to exit with a status code
-H, --halt=<code> 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] view plaincopyprint?
Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: 10.0.0.1; nested exception is:
java.net.ConnectException: Connection timed out]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:707)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at org.jboss.Shutdown.main(Shutdown.java:202)
Caused by: java.rmi.ConnectException: Connection refused to host: 10.0.0.1; nested exception is:
java.net.ConnectException: Connection timed out
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
... 3 more
Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: 10.0.0.1; nested exception is:
java.net.ConnectException: Connection timed out]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:707)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at org.jboss.Shutdown.main(Shutdown.java:202)
Caused by: java.rmi.ConnectException: Connection refused to host: 10.0.0.1; nested exception is:
java.net.ConnectException: Connection timed out
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
... 3 more
如何对Linux下的Jboss应用进行debug?
其实这个问题和Jboss是否部署在Linux下没有直接关系,可以在jboss启动时指定远程debug端口即可,比如:
[java] view plaincopyprint?
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
然后在eclipse中新建remote debug时指定对应的端口即可;
Linux下Jboss启动、关闭、端口配置等常见问题FAQ
关于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属性;将各套应用对应的端口全部配置在同一个文件中;推荐采用该方案,具体可参考:
[xhtml] view plaincopyprint?
<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-01</attribute>
<attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>
<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-01</attribute>
<attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>
Jboss无法正常启动,报异常javax.management.MBeanRegistrationException: preRegister() failed?
一般来说,上面的异常出现在4.2及其以后的版本中,比较详细的异常如下:
[java] view plaincopyprint?
javax.management.MBeanRegistrationException: preRegister() failed: [ObjectName='jboss.remoting:service=NetworkRegistry', Class=org.jboss.remoting.network.NetworkRegistry (org.jboss.remoting.network.NetworkRegistry@16b6c55)]
at org.jboss.mx.server.registry.BasicMBeanRegistry.invokePreRegister(BasicMBeanRegistry.java:713)
at org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:211)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
... 51 more
Caused by: java.lang.RuntimeException: Exception creating identity: mall_dev4: mall_dev4
at org.jboss.remoting.ident.Identity.get(Identity.java:211)
at org.jboss.remoting.network.NetworkRegistry.preRegister(NetworkRegistry.java:268)
at org.jboss.mx.server.AbstractMBeanInvoker.invokePreRegister(AbstractMBeanInvoker.java:966)
at org.jboss.mx.modelmbean.ModelMBeanInvoker.invokePreRegister(ModelMBeanInvoker.java:489)
at org.jboss.mx.server.AbstractMBeanInvoker.preRegister(AbstractMBeanInvoker.java:654)
at org.jboss.mx.server.registry.BasicMBeanRegistry.invokePreRegister(BasicMBeanRegistry.java:697)
... 56 more
javax.management.MBeanRegistrationException: preRegister() failed: [ObjectName='jboss.remoting:service=NetworkRegistry', Class=org.jboss.remoting.network.NetworkRegistry (org.jboss.remoting.network.NetworkRegistry@16b6c55)]
at org.jboss.mx.server.registry.BasicMBeanRegistry.invokePreRegister(BasicMBeanRegistry.java:713)
at org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:211)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
... 51 more
Caused by: java.lang.RuntimeException: Exception creating identity: mall_dev4: mall_dev4
at org.jboss.remoting.ident.Identity.get(Identity.java:211)
at org.jboss.remoting.network.NetworkRegistry.preRegister(NetworkRegistry.java:268)
at org.jboss.mx.server.AbstractMBeanInvoker.invokePreRegister(AbstractMBeanInvoker.java:966)
at org.jboss.mx.modelmbean.ModelMBeanInvoker.invokePreRegister(ModelMBeanInvoker.java:489)
at org.jboss.mx.server.AbstractMBeanInvoker.preRegister(AbstractMBeanInvoker.java:654)
at org.jboss.mx.server.registry.BasicMBeanRegistry.invokePreRegister(BasicMBeanRegistry.java:697)
... 56 more
这主要是因为Jboss启动了一个jboss.remoting:service=NetworkRegistry的mbean服务,启动时却又无法根据当前hostname找到IP!
解决方案为在/etc/hosts中绑定当前服务器的主机名和IP,比如10.2.224.214 mall_dev4;
对于4.2系列之前的版本,如果没有绑定主机名和IP,虽然会出现以下的异常,但并不一定会影响应用的正常启动;
[java] view plaincopyprint?
11:32:12,427 WARN [ServiceController] Problem starting service jboss:service=invoker,type=http
java.net.UnknownHostException: mall_dev4: mall_dev4
at java.net.InetAddress.getLocalHost(InetAddress.java:1308)
at org.jboss.invocation.http.server.HttpInvoker.checkInvokerURL(HttpInvoker.java:204)
at org.jboss.invocation.http.server.HttpInvoker.startService(HttpInvoker.java:101)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
at $Proxy0.start(Unknown Source)
at org.jboss.system.ServiceController.start(ServiceController.java:417)
11:32:12,427 WARN [ServiceController] Problem starting service jboss:service=invoker,type=http
java.net.UnknownHostException: mall_dev4: mall_dev4
at java.net.InetAddress.getLocalHost(InetAddress.java:1308)
at org.jboss.invocation.http.server.HttpInvoker.checkInvokerURL(HttpInvoker.java:204)
at org.jboss.invocation.http.server.HttpInvoker.startService(HttpInvoker.java:101)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
at $Proxy0.start(Unknown Source)
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=<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信息;
Jboss正常启动,但是用shutdown脚本无法关闭应用?
对于jboss的关闭,shutdown命令允许好几种方式的关闭,可以参考该命令的帮助:
[java] view plaincopyprint?
usage: shutdown [options] <operation>
options:
-h, --help Show this help message (default)
-D<name>[=<value>] Set a system property
-- Stop processing options
-s, --server=<url> Specify the JNDI URL of the remote server
-n, --serverName=<url> Specify the JMX name of the ServerImpl
-a, --adapter=<name> Specify JNDI name of the MBeanServerConnection to use
-u, --user=<name> Specify the username for authentication
-p, --password=<name> Specify the password for authentication
operations:
-S, --shutdown Shutdown the server
-e, --exit=<code> Force the VM to exit with a status code
-H, --halt=<code> Force the VM to halt with a status code
usage: shutdown [options] <operation>
options:
-h, --help Show this help message (default)
-D<name>[=<value>] Set a system property
-- Stop processing options
-s, --server=<url> Specify the JNDI URL of the remote server
-n, --serverName=<url> Specify the JMX name of the ServerImpl
-a, --adapter=<name> Specify JNDI name of the MBeanServerConnection to use
-u, --user=<name> Specify the username for authentication
-p, --password=<name> Specify the password for authentication
operations:
-S, --shutdown Shutdown the server
-e, --exit=<code> Force the VM to exit with a status code
-H, --halt=<code> 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] view plaincopyprint?
Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: 10.0.0.1; nested exception is:
java.net.ConnectException: Connection timed out]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:707)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at org.jboss.Shutdown.main(Shutdown.java:202)
Caused by: java.rmi.ConnectException: Connection refused to host: 10.0.0.1; nested exception is:
java.net.ConnectException: Connection timed out
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
... 3 more
Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: 10.0.0.1; nested exception is:
java.net.ConnectException: Connection timed out]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:707)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at org.jboss.Shutdown.main(Shutdown.java:202)
Caused by: java.rmi.ConnectException: Connection refused to host: 10.0.0.1; nested exception is:
java.net.ConnectException: Connection timed out
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
... 3 more
如何对Linux下的Jboss应用进行debug?
其实这个问题和Jboss是否部署在Linux下没有直接关系,可以在jboss启动时指定远程debug端口即可,比如:
[java] view plaincopyprint?
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
然后在eclipse中新建remote debug时指定对应的端口即可;
Linux下Jboss启动、关闭、端口配置等常见问题FAQ
关于JBOSS端口被占用的问题
相关推荐
本文将详细介绍如何解决JBoss 5.0.1 GA中的端口配置问题,避免与Oracle和Java EE应用的端口冲突。 #### 二、端口冲突的原因及影响 端口冲突通常发生在多服务共存的环境中,当两个或多个服务尝试绑定到同一个端口时...
本篇文章详细介绍了如何在 Linux 平台上启动 JBoss 服务器,包括安装 JRE、安装 JBoss 服务器、启动 JBoss 服务器、关闭 JBoss 服务器和退出 SSH 会话等步骤。通过本篇文章,读者可以轻松地在 Linux 平台上启动 ...
Linux下JBOSS部署手册
Linux 下 JBoss 安装与配置 一、简介 JBoss 是一个运行 EJB 的 J2EE 应用服务器,是开放源代码的项目,遵循最新的 J2EE 规范。它提供了一个优秀的平台,用于学习和应用 J2EE 规范的最新技术。 二、系统环境 在 ...
LINUX下JBOSS的安装及配置[归纳].pdf
在Linux环境下配置JBoss6.0与JDK7.0是一项关键的任务,因为这两个组件是许多企业级Java应用的基础。JBoss是一个流行的开源应用服务器,它支持Java EE规范,而JDK则是运行Java应用程序和应用服务器所必需的开发工具包...
例如,可以修改`standalone.xml`或`domain.xml`中的端口配置,或者使用`jboss-cli.sh`或`jconsole`等工具进行实时监控。正确理解和掌握JBoss的启动顺序和端口占用情况,能有效提高我们对系统的管理和故障排查能力。
- 配置JBOSS启动端口,编辑`/usr/local/jboss-5.1.0.GA/server/default/deploy/jbossweb-tomcat55.sar/server.xml`文件,根据需求更改Tomcat的监听端口。 4. **启动和停止JBOSS**: - 使用`bin/run.sh`脚本启动...
- **Linux/Unix**: 使用`standalone.sh`或`domain.sh`(适用于域模式)脚本启动JBoss。 - **Windows**: 使用`standalone.bat`或`domain.bat`启动。 3. **启动配置**: - **standalone模式**: 这是最常见的启动...
### Linux下配置JBoss自动启动(JBoss V4.0) #### 概述 在Linux环境中,JBoss作为一款广泛使用的应用服务器,在企业级开发中扮演着重要角色。为了提高系统的稳定性和可用性,通常会将JBoss配置为开机自启动服务。...
默认情况下,JBoss使用特定的端口号进行通信,如8080端口用于HTTP服务,7676端口用于JMX远程管理等。然而,在多服务器环境中,为避免端口冲突,或者出于安全考虑,我们需要修改这些默认端口。标题"修改jboss的默认...
在Linux环境下安装JBoss,是一项涉及多个步骤的复杂...综上所述,Linux下安装JBoss并非一项简单的任务,它涉及到用户账户管理、系统检查、软件环境搭建等多个方面,每一个环节都需仔细操作,才能确保最终的成功部署。
总之,JBoss 的端口配置是一个关键步骤,特别是在多实例部署的场景下。通过正确地配置`jboss-service.xml`、`sample-bindings.xml`以及`server.xml`,我们可以确保每个实例都能独立运行且不会相互干扰。这个过程简化...
### Linux下安装JBoss并设置自启动服务 在Linux环境下安装JBoss并配置其作为系统服务自启动是一项常见的任务,特别是在部署Java应用服务器时。本文将详细介绍如何在Linux环境中完成这些步骤,包括JDK的安装、环境...
总结一下,Linux下安装JBoss 7.1.1涉及的主要步骤包括:检查系统架构,下载安装包,上传到Linux,赋予执行权限,配置环境变量,修改配置文件,以及启动服务。每个步骤都需要细心操作,以确保JBoss能稳定运行。
JBoss AS 7.1.0.Final是在Linux环境下运行的一款开源Java应用服务器,由Red Hat公司维护。这个版本发布于2012年,它引入了许多改进和新特性,旨在提供更快的启动速度、更高的性能以及更好的模块化。在这个环境中,...
### Linux下JDK与JBoss的安装及JBoss自启动设置 #### JDK的安装步骤 在Linux环境下安装JDK是部署Java应用的基础。本部分将详细介绍如何在Linux系统上安装JDK。 1. **下载JDK安装包**: - 通常推荐从Oracle官网...
1. **`jboss-service.xml`**:此文件主要用于配置JBoss的服务端口,如Web服务端口、JNDI端口等。 2. **`server.xml`**:此文件主要用于配置HTTP相关的端口,例如HTTP连接器端口等。 3. **`uil2-service.xml`**:此...
- **编辑`jboss-eap.conf`文件**:此文件用于配置JBoss的基本环境变量,包括Java的安装路径、JBoss的安装路径、用户身份、配置文件名以及启动参数等。 - `JAVA_HOME`:设置为系统中Java JDK的安装路径,如`/usr/...