-
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个答案 按时间排序 按投票排序
-
采纳的答案
resin自身应该不会有这种bug,应该是使用不当造成的。
给几个建议:
1,是否有自定义的filter里面对某些对象进行了同步,尤其查看一下和日志相关的代码;
2,如果有resin源码,可以搜索一下代码,看看那个ArrayList在哪里被notify了,到底同步的是什么资源,是不是日志文件等等;2012年2月01日 14:24
-
初看好像是死锁,waiting for monitor entry是等待相应锁的释放吧,信息还不全吧,你可以根据每隔线程的堆栈分析出它的行为,然后综合所有线程的行为判断实在哪里死锁了。
比如第一个线程:执行WebAppFilterChain.doFilter时获得了对象锁0x00002b0e07627598,然后再获得一个锁0x00002b0e07627750,并在此对象上面等待然后释放锁;
而第二个线程等待获得锁0x00002b0e07627598,第一个线程没有释放这个锁。
单纯从这些信息来看,需要有线程notify这个锁0x00002b0e07627750的对象,线程1和2才会继续往下走。2012年2月01日 12:26
相关推荐
Linux僵死进程的产生与避免 Linux 操作系统中,僵死进程(Zombie Process)是一种特殊的进程状态,它是指一个进程已经终止,但是其父进程没有通过wait或waitpid函数来回收它的状态信息,而使得进程所占用的资源...
linux 查找僵死进程,重启服务,有利于知道哪些服务已经死掉进程还在
"LINUX查看和处理僵死进程" 在LINUX系统中,僵死进程(Zombie Process)是一个非常重要的概念。僵死进程是指已经死亡的进程,但是没有释放系统资源,包括内存和一些系统表等。如果这样的进程很多,会引发系统问题。...
### Oracle杀僵死进程 在Oracle数据库管理过程中,经常会遇到僵死进程的问题,这些问题可能会导致数据库性能下降甚至无法正常运行。本文将详细介绍如何通过SQL查询定位僵死进程,并提供具体的解决方案,帮助解决如...
《SCRATCH3:小鸟大战僵死——创新游戏模式解析》 Scratch3,作为麻省理工学院(MIT)媒体实验室的“终身幼儿园团队”开发的一款免费编程语言和视觉化编程工具,深受全球青少年喜爱,尤其适合编程初学者。本篇我们将...
linux 下的 bash shell脚本,用于杀死僵死的进程,并重新启动.
本文将深入探讨标题和描述中提及的主题——“一种僵死低效进程的识别方法和识别设备”。我们将详细解析这一问题,并讨论如何有效地识别和处理这些进程,以确保系统的稳定性和效率。 首先,让我们了解什么是“僵死”...
在实际操作中,可能会遇到一些坑,例如XFS文件系统的兼容性问题,需要升级内核以避免文件写入异常和系统僵死。此外,还需要适配DBA管理系统,提供自动化运维能力,以填补认知差异。 未来的展望包括利用云原生存储...
《植物大战僵死》是一款广受欢迎的塔防游戏,而C#是一种强大的编程语言,尤其在游戏开发领域有着广泛的应用。本实例中的辅助工具是利用C#编写的,旨在帮助玩家更轻松地进行游戏。下面将详细介绍这个C#辅助工具的知识...
"Vs2017 C++源码 植物大战僵死辅助收花和金币" 这个标题表明这是一个基于C++语言的项目,利用Visual Studio 2017(简称Vs2017)开发环境进行编程。项目的主要功能是为热门游戏《植物大战僵尸》(PVZ)提供一个辅助...
JobObject来管理子进程,确保主进程关闭时子进程自动结束,避免异常退出时留下僵尸进程
这是一个简单的swt界面,里面涉及到了一些窗口的基本控件。
2. 进程是资源的**容器**、又是**执行实体**。 3. 人们习惯将操作系统分为五大类型,它们是:**批处理操作系统**、**分时操作系统**、**实时操作系统**、**网络操作系统**、**分布式操作系统**。 4. 进程至少存在三...
标题“看看你的微信好友谁删除你了”涉及的是微信社交平台中的一种常见需求:检测自己微信通讯录中哪些好友已将自己从他们的朋友列表中移除。这通常是因为用户关心自己的社交关系网络,想要保持与所有联系人的互动,...
帮助您理解TCP穿透,NAT穿透,网络通信如何通过防火墙
本文档将介绍 Solaris 5.x 系统日常巡检的相关知识点,包括 CPU 占用情况、IO 等待情况、僵死进程、内存占用情况、内存配置等。 一、CPU 占用情况 CPU 占用情况是指系统中 CPU 的使用率,高 CPU 占用率可能会导致...
【标题】"适配HTC VIVE的僵尸小游戏"揭示了这款游戏是专为HTC VIVE虚拟现实头显设计的,意味着它利用了VIVE的硬件特性,如六自由度跟踪系统、手柄输入和沉浸式3D音效,来提供一个独特的游戏体验。...
这种方式可以提高系统的整体效率,避免 Tomcat 在高负载下陷入“僵死”状态,确保服务的稳定性。 整合 Apache 和 Tomcat 有多种方法,如使用 mod_jk 或 mod_proxy 模块,这些模块允许 Apache 将动态请求转发给 ...