`
lendo.du
  • 浏览: 12702 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

JBoss运行期故障

阅读更多
  1. 平台:
    Tomcat 5.0.28+JBoss 4.2.0GA + JDK 5.0 + RedHat Enterprise Linux X64
  2. 症状:
    系统运行一段时间以后,会因为下面这个Exception而宕机。
    ERROR [org.jboss.remoting.transport.socket.ServerThread] Worker thread initialization failure
    java.io.EOFException
            at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:526)
            at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:369)
            at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:165)
  3. 解决:
    先采用Google和百度,搜索了很多帖子,但回答的很少。有的说是内存太少,有的说是64位,这些都是不太有力的解决方案,也无法解决问题。只好看源代码:

    在ServerThread.processInvocation(SocketWrapper socketWrapper)方法中有这样一段:
    InputStream inputStream = socketWrapper.getInputStream();
    if(performVersioning){
        version = readVersion(inputStream);
        if(version == -1)
            throw new EOFException();
    }
    
    这里就是扔出EOFException的元凶,当readVersion(inputStream) 返回-1的时候,就认为运行环境不对了。
    再看ServerThread.readVersion(InputStream inputStream)在做些啥子动作:
    private int readVersion(InputStream inputStream) throws IOException{
        if(trace)
            log.trace("blocking to read version from input stream");
        int version = inputStream.read();
        if(trace)
            log.trace("read version " + version + " from input stream");
        return version;
    }
    
    这里仅仅是一个简单的读操作,也就是从InputStream里面读不到流。而InputStream是从SocketWrapper  中直接通过SocketWrapper.getInputStream()来获取的。那这SocketWrapper又是如何创建的呢?
    在ServerThread.doRun()代码里面有如下动作:
    socketWrapper = createServerSocketWrapper(socket, timeout, invoker.getLocator().getParameters());
    ServerThread.createServerSocketWrapper(Socket socket, int timeout, Map metadata)代码段:
    if(serverSocketClass == null)
        serverSocketClass = ClassLoaderUtility.loadClass(serverSocketClassName, getClass());
    try{
        serverSocketConstructor = serverSocketClass.getConstructor(new Class[] {
        java.net.Socket.class, java.util.Map.class, java.lang.Integer.class
        });
    }catch(NoSuchMethodException e){
        serverSocketConstructor = serverSocketClass.getConstructor(new Class[] {
            java.net.Socket.class
        });
    }
    ServerSocketWrapper的这两个构造方法都定义在父类ClientSocketWrapper中:
    public ClientSocketWrapper(Socket socket) throws IOException{
        super(socket);
        createStreams(socket, null);
    }
    
    public ClientSocketWrapper(Socket socket, Map metadata, Integer timeout) throws Exception{
        super(socket, timeout);
        createStreams(socket, metadata);
    }
    这个InputStream就是从createStreams所创建的。
    ClientSocketWrapper.createStreams(Socket socket, Map metadata)方法中代码段:
    private InputStream in;
    
    in = createInputStream(serializationType, socket, unmarshaller);
    
    继续往下看ClientSocketWrapper.createInputStream(String serializationType, Socket socket, UnMarshaller unmarshaller):
    InputStream is = socket.getInputStream();
    
    if(unmarshaller instanceof PreferredStreamUnMarshaller){
        PreferredStreamUnMarshaller psum = (PreferredStreamUnMarshaller)unmarshaller;
        is = psum.getMarshallingStream(is);
    }
    
    return is;
    到这里大家应该都明白了这InputStream是如何创建的了,那么为啥这InputStream.read()返回-1呢,  这就  要 研究这个一直出现在代码中的Socket了,Socket是在ServerThread的构造方法中传递过来的, 实际上这个Socket就是JBoss到tomcat的一个连接。那么既然Socket初始化能成功,说明连接没有问题, 就只能从Socket返回的流上面来查找问题。那是否是Tomcat宕机了,从Socket无法返回流,而Socket连接却是正常的。打开Tomcat的 logs,确实,Tomcat宕机了,再对比Tomcat宕机时间和JBoss出现Exception的时间,前后一致,原来如此。只要Tomcat不宕机,JBoss就不会出这个Exception。
  4. 为什么Tomcat 5.0.28在JDK 5.0上面会出现PermGen错误,PermGen如何产生的,下回分解:
    http://www.thesorensens.org/2006/09/09/java-permgen-space-stringintern-xml-parsing/
分享到:
评论

相关推荐

    Jboss项目部署文档

    在部署 Jboss 项目时,需要修改 Jboss 服务器的配置文件,以便 Jboss 服务器可以正确地运行项目。例如,需要修改 server.xml 文件中的 Connector 端口,并添加 URIEncoding 属性。 六、JNDI 配置 JNDI(Java ...

    【转帖】 使用 JProfiler 监控 JBoss 运行情况

    ### 使用 JProfiler 监控 JBoss 运行情况 #### JProfiler简介与功能 JProfiler是一款功能强大的Java性能分析工具,它可以对Java应用程序、Applets、Java Web Start应用以及应用服务器进行性能监控与分析。通过深入...

    jboss一启动除开一闪而过.txt

    在IT领域,JBoss作为一个广泛使用的开源应用服务器,其启动问题常常困扰着开发者。...这不仅涉及到对JDK、JBoss及操作系统环境的深入理解,还需要细心地排查每一个可能的故障点,从而达到最佳的系统运行状态。

    JBOSS,JBoss安装部署

    了解如何查看和分析JBoss的日志文件,这对于故障排查至关重要。`standalone/log`目录下会生成`server.log`和其他相关日志文件。此外,可以利用管理控制台或JMX监控服务器状态。 以上就是JBoss安装和部署的基本步骤...

    jboss 下载(httpwww.jboss.org)

    2. 运行 `%JBoss_HOME%\bin\run.bat` 启动 JBoss。 3. 关闭 JBoss,可以通过执行 `%JBoss_HOME%\bin\shutdown.bat -S` 命令。 4. 配置 JBoss 的端口,例如将 HTTP 服务监听端口改为 80,需编辑 `jbossweb-tomcat41....

    jboss7.1 linux版本

    JBoss AS 7.1.0.Final是在Linux环境下运行的一款开源Java应用服务器,由Red Hat公司维护。这个版本发布于2012年,它引入了许多改进和新特性,旨在提供更快的启动速度、更高的性能以及更好的模块化。在这个环境中,...

    JBoss的部署及运行

    ### JBoss的部署及运行详解 JBoss是一个开源的应用服务器,广泛用于开发和部署企业级Java应用程序。本文将深入解析JBoss的部署与运行过程,包括软件安装、环境配置、目录结构理解、服务端口修改、数据库连接配置、...

    中间件jboss环境搭建01

    4. **启动与验证**:启动JBoss服务并验证其是否正常运行。通常情况下,可以通过执行`./run.sh`脚本来启动JBoss服务。 #### 五、JBoss集群配置 1. **集群架构设计**:确定集群的整体架构,包括节点数量、负载均衡...

    JBoss启动 JBoss启动

    JBoss,作为一款开源的应用服务器,是Java EE(现在称为Jakarta EE)应用程序的重要运行环境。它由Red Hat公司维护,提供了对Web服务、EJB(Enterprise JavaBeans)、JMS(Java Message Service)等标准的全面支持。...

    MyEclipse中配置JBoss

    【标题】:“MyEclipse中配置JBoss” 在IT行业中,MyEclipse是一款深受开发者喜爱的集成开发环境(IDE),尤其对于Java EE项目开发来说,它提供了强大的支持。而JBoss则是一个开源的应用服务器,广泛用于部署和管理...

    在jboss上部署web应用

    在开始使用JBoss之前,确保系统已安装JDK是非常重要的,因为JBoss是纯Java的Web应用服务器,依赖于JDK来运行。官方下载地址为http://labs.jboss.com/jbossas/downloads/,你可以在这里获取最新的JBoss应用服务器版本...

    Jboss4编程起步

    本书的目标就是,尽快使得用户能够将J2EE 1.4应用部署并运行在JBoss 4.0.x上。在本书写作时,JBoss最新发布版为4.0.2。因此,用户至少应该使用该版本,或者其后续版本。同时,本书使用了Sun提供的J2EE 1.4 Tutorial...

    jboss内核(能运行web程序)

    JBoss是Red Hat公司开发的一款开源Java应用程序服务器,它主要用于运行企业级的Java EE应用程序。在Java Web开发领域,JBoss内核扮演着至关重要的角色,它为开发者提供了一个强大、灵活且可扩展的平台来部署和管理...

    JavaEE源代码 jboss-common

    JavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-...

    jboss相关Jar包

    这四个jar文件是JBoss运行和管理的基础组件,它们协同工作,为开发者提供了强大的运行环境和管理工具。在实际开发和部署Java企业级应用时,理解这些组件的功能和交互对于优化性能、诊断问题和进行系统运维至关重要。...

    jboss集群完整介绍

    ### jboss集群完整介绍 #### 一、JBoss集群概览 JBoss集群是指一系列的计算机节点协同工作,为用户提供统一的网络资源服务。理想状态下,集群对外表现为一个整体,用户仅通过单一入口访问,无需知晓集群内部的具体...

    JBoss AS7教程

    2. 配置环境变量:设置JAVA_HOME和JBOSS_HOME,确保系统能够找到JBoss AS7的运行环境。 3. 启动与停止:通过bin目录下的standalone.bat或standalone.sh脚本启动和关闭服务器。 三、JBoss AS7应用部署 1. WAR部署:...

    jboss-服务器下载

    通过使用JGroups和JBoss clustering模块,可以实现会话复制和故障转移,确保即使在一个服务器出现故障时,服务也能不间断。 然而,值得注意的是,JBoss AS 5.1.0.GA已经是较为陈旧的版本,当前Red Hat已经将注意力...

Global site tag (gtag.js) - Google Analytics