- 浏览: 3470167 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
"在服务器运行过程中,Spring不停的运行的计划任务和OpenSessionInViewFilter,使得Tomcat反复加载对象而产生框架并用时可能产生的内存泄漏,则使用IntrospectorCleanupListener作为相应的解决办法。"
对于这一句话,引用关于IntrospectorCleanupListener一段解释:
引用
spring中的提供了一个名为
org.springframework.web.util.IntrospectorCleanupListener的监听器。它主要负责处理由
JavaBeans
Introspector的使用而引起的缓冲泄露。spring中对它的描述如下:它是一个在web应用关闭的时候,清除JavaBeans
Introspector的监听器.web.xml中注册这个listener.可以保证在web 应用关闭的时候释放与掉这个web
应用相关的class loader 和由它管理的类如果你使用了JavaBeans
Introspector来分析应用中的类,Introspector 缓冲中会保留这些类的引用.结果在你的应用关闭的时候,这些类以及web
应用相关的class
loader没有被垃圾回收.不幸的是,清除Introspector的唯一方式是刷新整个缓冲.这是因为我们没法判断哪些是属于你的应用的引用.所以删
除被缓冲的introspection会导致把这台电脑上的所有应用的introspection都删掉.需要注意的是,spring
托管的bean不需要使用这个监听器.因为spring它自己的introspection所使用的缓冲在分析完一个类之后会被马上从javaBeans
Introspector缓冲中清除掉.应用程序中的类从来不直接使用JavaBeans
Introspector.所以他们一般不会导致内部查看资源泄露.但是一些类库和框架往往会产生这个问题.例如:Struts
和Quartz.单个的内部查看泄漏会导致整个的web应用的类加载器不能进行垃圾回收.在web应用关闭之后,你会看到此应用的所有静态类资源(例如单
例).这个错误当然不是由这个类自 身引起的.
用法很简单,就是在web.xml中加入:
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
只知道servlet标准不允许在web容器内自行做线程管理,quartz的问题确实存在。
对于Web容器来说,最忌讳应用程序私自启动线程,自行进行线程调度,像Quartz这种在web容器内部默认就自己启动了10线程进行异步job调度的框架本身就是很危险的事情,很容易造成servlet线程资源回收不掉,所以我一向排斥使用quartz。
quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。
如果是我的话,我采取的办法就是自己单独启动一个Job Server,来跑job,不会部署在web容器中。
评论
3 楼
在世界的中心呼喚愛
2014-12-23
评论有价值
2 楼
wuguowenq
2014-01-09
好文,回复只为收藏
1 楼
yangzb
2011-04-20
SSH内存泄露及Spring Quartz问题
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://anoxia.blogbus.com/logs/34360203.html
问题的起因:
为客户开发了一个系统权且称他为TM吧,用的是tomcat6+myelipse6+jdk1.6环境,框架用SSH。我调试完这个系统程序后,将此程序重新COPY了一份,改名叫TMT,但是发布的Web名还是叫TM。同样用同一个Tomcat来Run的。问题发生了,我在TMT项目里修改后,RUN起来运行的居然是TM项目中的代码。
尝试过删除TOMCAT6下的WORK目录下的缓存文件,也尝试过在TOMCAT的BIN目录下的Startup.bat中脚本头部加上一句:
rd /s /q TM
rd /s /q ..\work\Catalina\localhost\TM
..\bin\catalina start
还是没有用。
在TOMCAT6的conf目录下server.xml中添加:
<Context path="" docBase="" debug="0" reloadable="true" />
也还是没有用。
在Tomcat的manage里也reload过了,都无法更新程序版本,运行都是之前TM项目中的代码,之后TMT项目里的代码链接的数据库和TM项目链接的数据库是不同的,将hibernate的执行sql的语句显示在Console界面中,发现数据库用的是TM项目中的数据库,可我运行的程序是 TMT项目。无语了。。。。
尝试清除Eclipse的缓存,删除[eclipsehome]/configuration下除.settings子目录和config.ini文件外其它的子目录。 还是没有用,仍然调用是老的程序。
最后尝试在myclipse的快捷方式启动是加入参数 -clean启动,还是无济于事。
=======================================================
接下来在javaeye中遍寻解决方案,无意中翻到Struts+Spring+Hibernate内存泄漏查找与处理一篇Robbin参与讨论的帖子,谈到使用org.springframework.web.util.IntrospectorCleanupListener监听器处理由 JavaBeans Introspector的使用而引起的缓冲泄露的问题,和Quartz定时调度比较理想的使用方式。以下节选部分内容供今后参考学习。
=======================================================
IntrospectorCleanupListener使用:
"在服务器运行过程中,Spring不停的运行的计划任务和OpenSessionInViewFilter,使得Tomcat反复加载对象而产生框架并用时可能产生的内存泄漏,则使用IntrospectorCleanupListener作为相应的解决办法。"
引用:
spring中的提供了一个名为org.springframework.web.util.IntrospectorCleanupListener的监听器。它主要负责处理由 JavaBeans Introspector的使用而引起的缓冲泄露。spring中对它的描述如下:它是一个在web应用关闭的时候,清除JavaBeans Introspector的监听器.web.xml中注册这个listener.可以保证在web 应用关闭的时候释放与掉这个web 应用相关的class loader 和由它管理的类如果你使用了JavaBeans Introspector来分析应用中的类,Introspector 缓冲中会保留这些类的引用.结果在你的应用关闭的时候,这些类以及web 应用相关的class loader没有被垃圾回收.不幸的是,清除Introspector的唯一方式是刷新整个缓冲.这是因为我们没法判断哪些是属于你的应用的引用.所以删除被缓冲的introspection会导致把这台电脑上的所有应用的introspection都删掉.需要注意的是,spring 托管的bean不需要使用这个监听器.因为spring它自己的introspection所使用的缓冲在分析完一个类之后会被马上从javaBeans Introspector缓冲中清除掉.应用程序中的类从来不直接使用JavaBeans Introspector.所以他们一般不会导致内部查看资源泄露.但是一些类库和框架往往会产生这个问题.例如:Struts 和Quartz.单个的内部查看泄漏会导致整个的web应用的类加载器不能进行垃圾回收.在web应用关闭之后,你会看到此应用的所有静态类资源(例如单例).这个错误当然不是由这个类自 身引起的.
用法很简单,就是在web.xml中加入:
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
=======================================================
Quartz问题:
引用Robbin原话:
对于Web容器来说,最忌讳应用程序私自启动线程,自行进行线程调度,像Quartz这种在web容器内部默认就自己启动了10线程进行异步job调度的框架本身就是很危险的事情,很容易造成servlet线程资源回收不掉。quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。
采取的办法就是自己单独启动一个Job Server,来跑job,不会部署在web容器中。其他web节点当需要启动异步任务的时候,可以通过种种方式(DB, JMS, Web Service, etc)通知Job Server,而Job Server收到这个通知之后,把异步任务加载到自己的任务队列中去。
其实想改造当前已经集成quartz的web应用也不算困难:
例如可以使用数据库的表来记录和维护任务队列和状态,把quartz部分完全从web应用中剥离出去,自己写一个Java Main程序把配置quartz的spring容器跑起来,这样Job Server就启动了(注意这个Job Server完全脱离tomcat)。此外这个Main程序应该再启动一个子线程,定期扫描数据库的任务队列表:
有新的任务就加入quartz的任务调度;
把当前任务的执行状态写入任务表;
看到删除任务的表字段状态以后,删除相应的任务。
然后web应用去掉quartz部分配置,把原来的调用quartz任务的代码改写为读写数据库的任务表,这样就把job部分完全从web容器剥离掉了,甚至web容器做cluster也没有问题了,并且多个web节点在同时读写任务表的时候,还有数据库的事务来确保操作的一致性,实在是很棒。
另外还可以单独做一个job管理界面,可以通过web界面手工添加任务,查看任务状态,删除任务等等。
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://anoxia.blogbus.com/logs/34360203.html
问题的起因:
为客户开发了一个系统权且称他为TM吧,用的是tomcat6+myelipse6+jdk1.6环境,框架用SSH。我调试完这个系统程序后,将此程序重新COPY了一份,改名叫TMT,但是发布的Web名还是叫TM。同样用同一个Tomcat来Run的。问题发生了,我在TMT项目里修改后,RUN起来运行的居然是TM项目中的代码。
尝试过删除TOMCAT6下的WORK目录下的缓存文件,也尝试过在TOMCAT的BIN目录下的Startup.bat中脚本头部加上一句:
rd /s /q TM
rd /s /q ..\work\Catalina\localhost\TM
..\bin\catalina start
还是没有用。
在TOMCAT6的conf目录下server.xml中添加:
<Context path="" docBase="" debug="0" reloadable="true" />
也还是没有用。
在Tomcat的manage里也reload过了,都无法更新程序版本,运行都是之前TM项目中的代码,之后TMT项目里的代码链接的数据库和TM项目链接的数据库是不同的,将hibernate的执行sql的语句显示在Console界面中,发现数据库用的是TM项目中的数据库,可我运行的程序是 TMT项目。无语了。。。。
尝试清除Eclipse的缓存,删除[eclipsehome]/configuration下除.settings子目录和config.ini文件外其它的子目录。 还是没有用,仍然调用是老的程序。
最后尝试在myclipse的快捷方式启动是加入参数 -clean启动,还是无济于事。
=======================================================
接下来在javaeye中遍寻解决方案,无意中翻到Struts+Spring+Hibernate内存泄漏查找与处理一篇Robbin参与讨论的帖子,谈到使用org.springframework.web.util.IntrospectorCleanupListener监听器处理由 JavaBeans Introspector的使用而引起的缓冲泄露的问题,和Quartz定时调度比较理想的使用方式。以下节选部分内容供今后参考学习。
=======================================================
IntrospectorCleanupListener使用:
"在服务器运行过程中,Spring不停的运行的计划任务和OpenSessionInViewFilter,使得Tomcat反复加载对象而产生框架并用时可能产生的内存泄漏,则使用IntrospectorCleanupListener作为相应的解决办法。"
引用:
spring中的提供了一个名为org.springframework.web.util.IntrospectorCleanupListener的监听器。它主要负责处理由 JavaBeans Introspector的使用而引起的缓冲泄露。spring中对它的描述如下:它是一个在web应用关闭的时候,清除JavaBeans Introspector的监听器.web.xml中注册这个listener.可以保证在web 应用关闭的时候释放与掉这个web 应用相关的class loader 和由它管理的类如果你使用了JavaBeans Introspector来分析应用中的类,Introspector 缓冲中会保留这些类的引用.结果在你的应用关闭的时候,这些类以及web 应用相关的class loader没有被垃圾回收.不幸的是,清除Introspector的唯一方式是刷新整个缓冲.这是因为我们没法判断哪些是属于你的应用的引用.所以删除被缓冲的introspection会导致把这台电脑上的所有应用的introspection都删掉.需要注意的是,spring 托管的bean不需要使用这个监听器.因为spring它自己的introspection所使用的缓冲在分析完一个类之后会被马上从javaBeans Introspector缓冲中清除掉.应用程序中的类从来不直接使用JavaBeans Introspector.所以他们一般不会导致内部查看资源泄露.但是一些类库和框架往往会产生这个问题.例如:Struts 和Quartz.单个的内部查看泄漏会导致整个的web应用的类加载器不能进行垃圾回收.在web应用关闭之后,你会看到此应用的所有静态类资源(例如单例).这个错误当然不是由这个类自 身引起的.
用法很简单,就是在web.xml中加入:
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
=======================================================
Quartz问题:
引用Robbin原话:
对于Web容器来说,最忌讳应用程序私自启动线程,自行进行线程调度,像Quartz这种在web容器内部默认就自己启动了10线程进行异步job调度的框架本身就是很危险的事情,很容易造成servlet线程资源回收不掉。quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。
采取的办法就是自己单独启动一个Job Server,来跑job,不会部署在web容器中。其他web节点当需要启动异步任务的时候,可以通过种种方式(DB, JMS, Web Service, etc)通知Job Server,而Job Server收到这个通知之后,把异步任务加载到自己的任务队列中去。
其实想改造当前已经集成quartz的web应用也不算困难:
例如可以使用数据库的表来记录和维护任务队列和状态,把quartz部分完全从web应用中剥离出去,自己写一个Java Main程序把配置quartz的spring容器跑起来,这样Job Server就启动了(注意这个Job Server完全脱离tomcat)。此外这个Main程序应该再启动一个子线程,定期扫描数据库的任务队列表:
有新的任务就加入quartz的任务调度;
把当前任务的执行状态写入任务表;
看到删除任务的表字段状态以后,删除相应的任务。
然后web应用去掉quartz部分配置,把原来的调用quartz任务的代码改写为读写数据库的任务表,这样就把job部分完全从web容器剥离掉了,甚至web容器做cluster也没有问题了,并且多个web节点在同时读写任务表的时候,还有数据库的事务来确保操作的一致性,实在是很棒。
另外还可以单独做一个job管理界面,可以通过web界面手工添加任务,查看任务状态,删除任务等等。
发表评论
-
说明SOA监管(SOA Governance)实例(收录备查)
2012-12-19 11:35 1709SOA 已经不是单纯技术问 ... -
Injecting Spring Beans into Java Servlets
2012-11-01 10:21 1902If you are working in a Java ... -
用 HttpServletResponseWrapper 实现 Etag 过滤器
2012-07-09 16:58 3699原文出处:http://blog.chenlb.com/200 ... -
Eclipse Indigo - Cannot install Android ADT Plugin
2012-02-29 01:17 3831When I try to install the And ... -
Eclipse Indigo - Cannot install Android ADT Plugin
2012-02-29 01:13 1935When I try to install the And ... -
[转]mybatis下的分页,支持所有的数据库
2011-07-21 13:21 14783大 家都知道,mybatis的自带分页方法只是逻 ... -
Java framework for text- & console-based forms?
2011-07-21 01:06 1667charva jcurses JNA , ... -
JNA(Java Native Access)学习入门
2011-07-21 01:04 22513Java Native Access 项目 在 ... -
DBCP代码研读以及就数据库连接失效的解决
2011-03-31 11:03 3724问题 网上很多评论说DBCP有很多BUG,但是都没有指明是什 ... -
ContextLoaderListener
2010-12-06 15:58 8420(1) org.springframework.web.c ... -
Servlet3.0新功能: 异步处理
2010-12-06 15:22 3121J2EE 6和Glassfish 3V正式发 ... -
Servlet3.0引入的新特性
2010-12-06 15:20 3024Servlet3.0规范的新特性主要是为了3个目的: ... -
100個節點上運行群集亞馬遜EC2上Hazelcast
2010-12-03 23:59 3290本文的目的,適是给妳湮示的細節集群的100個節點。此湮示記錄, ... -
Spring Properties Reloaded
2010-12-02 14:54 4342Spring Properties Reloaded Som ... -
为spring2.5中的jpetstore增加perf4j监控
2010-09-02 13:51 2607perf4j是一款类似于log4j的性能检测工具. 它 ... -
语义网的学习资源大汇集(备忘)
2010-06-23 22:48 1683网上资源 http:/ ... -
使用 JOLAP 实现复杂分析查询
2010-06-06 13:42 1921Shashank Tiwari 在本文中对 ... -
HTML5 Canvas for Internet Explorer
2010-06-04 21:16 1824Canvascape http://www.benjoff ... -
大型网站架构演变和知识体系
2010-06-01 23:47 1910架构演变第一步:物 ... -
Ejb Con Spring
2010-05-20 17:46 2175Contenido [ocultar] 1 ...
相关推荐
基于内存的Quartz集群配置手册 很讨厌、鄙视那种把官方资料贴出来的人。 到网上搜索就是要快速入门、使用。 以上
Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解
Quartz定时功能在WebForm 以及 WinForm上使用时,需要引用相关的dll
Quartz使用指南 Quartz使用指南 Quartz使用指南
quartz内部表.sql。
quartz使用指南,quartz使用指南,quartz使用指南
QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或...
Quartz使用方法Quartz使用方法Quartz使用方法Quartz使用方法Quartz使用方法
springboot中使用quartz,包括持久化和非持久化操作 解决service注入问题 介入指定job中传入参数问题
使用Quartz 1.6.5 源代码改造后的quartz 包,可使用在 Android 4.0以上环境。
myssh__集成quartz内存版
quartz.net+TopShelf
赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...
Quartz +spring开发使用说明文档
quartz定时任务使用例子大全,这里面介绍了三种使用quartz定时任务的方式,第一种方式是完全使用代码写死的调用方式,第二种使用的是从数据库读取任务配置信息的调用方式,第三种是使用从数据库读取任务配置,生成...
spring的quartz使用实例,spring的quartz使用实例
内含: quartz-1.5.2.zip 定时器Quartz及使用说明 Quartz的API
.NetCore 中使用QuartZ
使用quartz需要的jar包
ssm-springMVC-整合Quartz(解决了无法注入service问题).doc