0 0

servlet容器僵死3

使用工具对resion容器进行大量并发访问   resion容器不久后出现僵死.   
执行 kill -3 后  获得大量如下信息 (所有线程都是.)
"resin-tcp-connection-192.168.253.72:61318-593" daemon prio=1 tid=0x00002aaaae1f0b10 nid=0x5051 in Object.wait() [0x000000005c717000..0x000000005c717c20]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00002b0e07627750> (a java.util.ArrayList)
        at java.lang.Object.wait(Object.java:474)
        at com.caucho.server.log.AccessLogWriter.write(AccessLogWriter.java:132)
        - locked <0x00002b0e07627750> (a java.util.ArrayList)
        at com.caucho.server.log.AccessLog.flush(AccessLog.java:604)
        - locked <0x00002b0e07627598> (a java.lang.Object)
        at com.caucho.server.log.AccessLog.log(AccessLog.java:317)
        - locked <0x00002b0e07627598> (a java.lang.Object)
        at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:191)
        at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:208)
        at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:259)
        at com.caucho.server.port.TcpConnection.run(TcpConnection.java:363)
        at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:490)
        at com.caucho.util.ThreadPool.run(ThreadPool.java:423)
        at java.lang.Thread.run(Thread.java:595)

"resin-tcp-connection-192.168.253.72:61318-595" daemon prio=1 tid=0x00002aaaae1f0220 nid=0x5050 waiting for monitor entry [0x000000005c616000..0x000000005c616ca0]
        at com.caucho.server.log.AccessLog.log(AccessLog.java:315)
        - waiting to lock <0x00002b0e07627598> (a java.lang.Object)
        at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:191)
        at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:208)
        at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:259)
        at com.caucho.server.port.TcpConnection.run(TcpConnection.java:363)
        at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:490)
        at com.caucho.util.ThreadPool.run(ThreadPool.java:423)
        at java.lang.Thread.run(Thread.java:595)



1. 请问 waiting for monitor entry 具体是什么含义.
2. 还有这样的问题 要如何解决呢

问题补充:
OpenMind 写道
初看好像是死锁,waiting for monitor entry是等待相应锁的释放吧,信息还不全吧,你可以根据每隔线程的堆栈分析出它的行为,然后综合所有线程的行为判断实在哪里死锁了。
比如第一个线程:执行WebAppFilterChain.doFilter时获得了对象锁0x00002b0e07627598,然后再获得一个锁0x00002b0e07627750,并在此对象上面等待然后释放锁;
而第二个线程等待获得锁0x00002b0e07627598,第一个线程没有释放这个锁。

单纯从这些信息来看,需要有线程notify这个锁0x00002b0e07627750的对象,线程1和2才会继续往下走。

  看了下. 我上面发的第一个线程同步list 并且没有被唤醒.并且
锁住了2个对象. 而这个2个对象 被后面的线程进行了同步.并等待释放.

导致后面400个线程都僵死了.

但是 我发现这个list是resion的类. 不知道是干嘛用的. 这要怎么定位呢?

去看AccessLogWriter.java:132的源码?

问题补充:
OpenMind 写道
resin自身应该不会有这种bug,应该是使用不当造成的。
给几个建议:
1,是否有自定义的filter里面对某些对象进行了同步,尤其查看一下和日志相关的代码;
2,如果有resin源码,可以搜索一下代码,看看那个ArrayList在哪里被notify了,到底同步的是什么资源,是不是日志文件等等;

谢谢你. 查了下资料. 好像别的项目组使用了这个resion服务器 的确有这个问题.
做了个例子. 删除业务代码. 建立一个只有servlet的web工程. 然后service 方法中
休眠100 秒.  并发访问就能重现.  说明 应该是resion 实现有问题. (这个resion可能被平台开发人员改过了. 应该是改出了问题, 你看到的日志类 也是resion内部的类) 已经提交公司平台研发部门定位.

目前写了个shell脚本去规避这个问题.发现容器日志超过1小时不打印 则自动重启服务.

谢谢你.
2012年2月01日 12:01

3个答案 按时间排序 按投票排序

0 0

采纳的答案

resin自身应该不会有这种bug,应该是使用不当造成的。
给几个建议:
1,是否有自定义的filter里面对某些对象进行了同步,尤其查看一下和日志相关的代码;
2,如果有resin源码,可以搜索一下代码,看看那个ArrayList在哪里被notify了,到底同步的是什么资源,是不是日志文件等等;

2012年2月01日 14:24
0 0

如果你有源码的话,在eclipse里面选定这个list变量,Ctrl+Shift+G可以搜索工程里面的所有引用

2012年2月01日 15:18
0 0

初看好像是死锁,waiting for monitor entry是等待相应锁的释放吧,信息还不全吧,你可以根据每隔线程的堆栈分析出它的行为,然后综合所有线程的行为判断实在哪里死锁了。
比如第一个线程:执行WebAppFilterChain.doFilter时获得了对象锁0x00002b0e07627598,然后再获得一个锁0x00002b0e07627750,并在此对象上面等待然后释放锁;
而第二个线程等待获得锁0x00002b0e07627598,第一个线程没有释放这个锁。

单纯从这些信息来看,需要有线程notify这个锁0x00002b0e07627750的对象,线程1和2才会继续往下走。

2012年2月01日 12:26

相关推荐

    Linux僵死进程的产生与避免.pdf

    Linux僵死进程的产生与避免 Linux 操作系统中,僵死进程(Zombie Process)是一种特殊的进程状态,它是指一个进程已经终止,但是其父进程没有通过wait或waitpid函数来回收它的状态信息,而使得进程所占用的资源...

    linux 僵死进程

    linux 查找僵死进程,重启服务,有利于知道哪些服务已经死掉进程还在

    LINUX查看和处理僵死进程

    "LINUX查看和处理僵死进程" 在LINUX系统中,僵死进程(Zombie Process)是一个非常重要的概念。僵死进程是指已经死亡的进程,但是没有释放系统资源,包括内存和一些系统表等。如果这样的进程很多,会引发系统问题。...

    oracle杀僵死进程

    ### Oracle杀僵死进程 在Oracle数据库管理过程中,经常会遇到僵死进程的问题,这些问题可能会导致数据库性能下降甚至无法正常运行。本文将详细介绍如何通过SQL查询定位僵死进程,并提供具体的解决方案,帮助解决如...

    SCRATCH3,小鸟大战僵死,创新游戏模式!

    《SCRATCH3:小鸟大战僵死——创新游戏模式解析》 Scratch3,作为麻省理工学院(MIT)媒体实验室的“终身幼儿园团队”开发的一款免费编程语言和视觉化编程工具,深受全球青少年喜爱,尤其适合编程初学者。本篇我们将...

    linux 杀死僵死进程并重启

    linux 下的 bash shell脚本,用于杀死僵死的进程,并重新启动.

    行业分类-设备装置-一种僵死低效进程的识别方法和识别设备.zip

    本文将深入探讨标题和描述中提及的主题——“一种僵死低效进程的识别方法和识别设备”。我们将详细解析这一问题,并讨论如何有效地识别和处理这些进程,以确保系统的稳定性和效率。 首先,让我们了解什么是“僵死”...

    MySQL数据库容器化技术实践.pptx

    在实际操作中,可能会遇到一些坑,例如XFS文件系统的兼容性问题,需要升级内核以避免文件写入异常和系统僵死。此外,还需要适配DBA管理系统,提供自动化运维能力,以填补认知差异。 未来的展望包括利用云原生存储...

    C#编写的《植物大战僵死》辅助工具实例

    《植物大战僵死》是一款广受欢迎的塔防游戏,而C#是一种强大的编程语言,尤其在游戏开发领域有着广泛的应用。本实例中的辅助工具是利用C#编写的,旨在帮助玩家更轻松地进行游戏。下面将详细介绍这个C#辅助工具的知识...

    Vs2017 C++源码 植物大战僵死辅助收花和金币

    "Vs2017 C++源码 植物大战僵死辅助收花和金币" 这个标题表明这是一个基于C++语言的项目,利用Visual Studio 2017(简称Vs2017)开发环境进行编程。项目的主要功能是为热门游戏《植物大战僵尸》(PVZ)提供一个辅助...

    添加子进程,job进程管理,告别僵死进程

    JobObject来管理子进程,确保主进程关闭时子进程自动结束,避免异常退出时留下僵尸进程

    swt界面编程

    这是一个简单的swt界面,里面涉及到了一些窗口的基本控件。

    操作系统模拟题

    2. 进程是资源的**容器**、又是**执行实体**。 3. 人们习惯将操作系统分为五大类型,它们是:**批处理操作系统**、**分时操作系统**、**实时操作系统**、**网络操作系统**、**分布式操作系统**。 4. 进程至少存在三...

    看看你的微信好友谁删除你了

    标题“看看你的微信好友谁删除你了”涉及的是微信社交平台中的一种常见需求:检测自己微信通讯录中哪些好友已将自己从他们的朋友列表中移除。这通常是因为用户关心自己的社交关系网络,想要保持与所有联系人的互动,...

    TCP穿透NAT和防火墙的特点与测评

    帮助您理解TCP穿透,NAT穿透,网络通信如何通过防火墙

    Solaris5.x系统日常巡检.doc

    本文档将介绍 Solaris 5.x 系统日常巡检的相关知识点,包括 CPU 占用情况、IO 等待情况、僵死进程、内存占用情况、内存配置等。 一、CPU 占用情况 CPU 占用情况是指系统中 CPU 的使用率,高 CPU 占用率可能会导致...

    适配HTC VIVE的僵尸小游戏

    【标题】"适配HTC VIVE的僵尸小游戏"揭示了这款游戏是专为HTC VIVE虚拟现实头显设计的,意味着它利用了VIVE的硬件特性,如六自由度跟踪系统、手柄输入和沉浸式3D音效,来提供一个独特的游戏体验。...

    Linux课程设计报告

    这种方式可以提高系统的整体效率,避免 Tomcat 在高负载下陷入“僵死”状态,确保服务的稳定性。 整合 Apache 和 Tomcat 有多种方法,如使用 mod_jk 或 mod_proxy 模块,这些模块允许 Apache 将动态请求转发给 ...

Global site tag (gtag.js) - Google Analytics