热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Linux下Jboss启动、关闭、端口配置等常见问题FAQ

Linux下Jboss启动、关闭、端口配置等常见问题FAQ
Linux下Jboss启动、关闭、端口配置等常见问题FAQ(2011-02-18 11:49:47)

标签:杂谈分类:Linux


windows 下:

     run.bat -c xy -b 0.0.0.0(便于别的 机子访问,也也可为自己机子的ip地址)


单台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属性;将各套应用对应的端口全部配置在同一个文件中;推荐采用该方案,具体可参考:view plaincopy to clipboardprint?
>
  ports-01
  ${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml
 
    org.jboss.services.binding.XMLServicesStoreFactory 


>
  ports-01
  ${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml
 
    org.jboss.services.binding.XMLServicesStoreFactory
 


Jboss无法正常启动,报异常javax.management.MBeanRegistrationException: preRegister() failed?
一般来说,上面的异常出现在4.2及其以后的版本中,比较详细的异常如下:view plaincopy to clipboardprint?
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,虽然会出现以下的异常,但并不一定会影响应用的正常启动;view plaincopy to clipboardprint?
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=指定地址,比如-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命令允许好几种方式的关闭,可以参考该命令的帮助:view plaincopy to clipboardprint?
usage: shutdown [options] 
options: 
    -h,--help                Show this help message (default) 
   -D[=]        Set a system property 
   --                       Stop processing options 
    -s,--server=        Specify the JNDI URL of the remote server 
    -n,--serverName=    Specify the JMX name of the ServerImpl 
    -a,--adapter=      Specify JNDI name of the MBeanServerConnection to use 
    -u,--user=         Specify the username for authentication 
    -p,--password=     Specify the password for authentication 
operations: 
    -S,--shutdown            Shutdown the server 
    -e,--exit=         Force the VM to exit with a status code 
    -H,--halt=         Force the VM to halt with a status code
usage: shutdown [options]
options:
    -h,--help                Show this help message (default)
   -D[=]        Set a system property
   --                       Stop processing options
    -s,--server=        Specify the JNDI URL of the remote server
    -n,--serverName=    Specify the JMX name of the ServerImpl
    -a,--adapter=      Specify JNDI name of the MBeanServerConnection to use
    -u,--user=         Specify the username for authentication
    -p,--password=     Specify the password for authentication
operations:
    -S,--shutdown            Shutdown the server
    -e,--exit=         Force the VM to exit with a status code
    -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中会抛如下的异常信息:
view plaincopy to clipboardprint?
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端口即可,比如:
view plaincopy to clipboardprint?
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
然后在eclipse中新建remote debug时指定对应的端口即可;


推荐阅读
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • PHP与MySQL的Web应用开发技术深入解析
    PHP与MySQL的Web应用开发技术深入解析 ... [详细]
  • 在网络故障排查中,tcpdump 是一款强大的工具,尤其在 Linux 环境下。尽管开发环境中问题较少,但在测试或生产环境中,往往会遇到各种难以预料的异常情况。通过在问题发生的环境中启用 tcpdump 进行抓包,并重现问题,可以获取到宝贵的原始数据,为问题的诊断提供关键线索。本文将详细介绍如何使用 tcpdump 进行实战操作,帮助读者掌握这一技能。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • 基于Java和SSM框架的志愿者管理平台源代码分析与实现
    本研究针对基于Java和SSM框架的志愿者管理平台进行了详细的源代码分析与实现。该平台属于Java Web项目,采用Java EE技术栈,并结合了Spring、Spring MVC和MyBatis三大核心框架(非开源)。项目名称为“基于SSM的志愿者管理系统”,旨在提升志愿者管理的效率和规范性。通过对系统架构、模块设计及关键代码的深入解析,本文为开发者提供了全面的技术参考和实践指导。 ... [详细]
  • 润乾报表JNDI配置异常分析与解决方法
    在使用润乾报表时,通过JNDI连接数据源是常见的配置方式。本文详细分析了JNDI配置异常的原因,并提供了具体的解决方法。重点讨论了JNDI名称在三个关键位置的配置:1. Tomcat或应用服务器的数据源配置(以Tomcat为例);2. 润乾报表中的数据源配置;3. 应用程序代码中的JNDI名称引用。通过这些步骤,可以有效解决JNDI配置异常问题,确保报表系统的稳定运行。 ... [详细]
  • 【Linux】CentOS 7 远程连接指南:高效安全的远程管理方法
    在 CentOS 7 中实现高效且安全的远程管理,本文详细介绍了如何检查和安装配置 OpenSSH。首先,通过 `yum list installed` 命令检查系统是否已安装 OpenSSH,若未安装,则使用 `yum install openssh-server` 进行安装。随后,配置 SSH 服务以确保其安全性和稳定性,包括修改默认端口、禁用 root 登录等关键步骤。此外,还提供了常见问题的解决方案,帮助用户顺利进行远程连接。 ... [详细]
  • 《精通 jQuery》第六章:深入解析与实战应用
    《精通 jQuery》第六章:深入解析与实战应用本章详细探讨了 Ajax 技术的核心机制及其实际应用。Ajax 通过 XMLHttpRequest 对象实现客户端与服务器之间的异步数据交换,从而在不重新加载整个页面的情况下更新部分内容。这种技术不仅提升了用户体验,还提高了应用的响应速度和效率。此外,本章还介绍了如何利用 jQuery 简化 Ajax 操作,并提供了多个实战案例,帮助读者更好地理解和掌握这一重要技术。 ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • Spring Boot 和 Spring Cloud 是 Spring 生态系统中的重要组成部分,各自具有独特的特性和应用场景。Spring Boot 通过简化配置和自动配置机制,显著提高了开发和部署效率,减少了传统 Spring 应用中繁琐的 XML 配置文件需求。而 Spring Cloud 则在此基础上进一步提供了分布式系统的解决方案,包括服务发现、配置管理、断路器等高级功能,适用于微服务架构的构建和管理。本文将深入探讨两者的核心差异,并分析其各自的最佳应用场景。 ... [详细]
  • 基于Java和JSP的电子医疗记录管理平台
    随着信息技术的快速发展,各类管理系统已在各行各业得到广泛应用。传统的人工管理模式已逐渐无法满足现代需求。本文介绍了一种基于Java和JSP技术开发的电子医疗记录管理平台,旨在提高医疗行业的信息化水平和管理效率。该平台通过整合先进的数据库技术和Web开发框架,实现了医疗记录的高效存储、查询和管理,为医护人员提供了便捷的操作界面和强大的数据支持。 ... [详细]
author-avatar
2012牛人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有