- 浏览: 252985 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lliiqiang:
软件中出错都是分类和层级的,所以错误减少不代表有进步,关键有结 ...
nio框架apache mina使用经验总结(转) -
lliiqiang:
对于整体来说有一个错误和多个错误一样,但是进度上几个错误是不同 ...
nio框架apache mina使用经验总结(转) -
lliiqiang:
最好要分离,否则相互影响的话就没有办法分离,特别是有的错误出现 ...
nio框架apache mina使用经验总结(转) -
lliiqiang:
关键是有jar包冲突,只能调整先后顺序,即自己框架的jar包是 ...
nio框架apache mina使用经验总结(转) -
baso4233:
学习了。可能会用到。
Nio 框架 Apache Mina 2 总结(自定义编解码)
刚写过一篇Java笔记-使用JConsole进行JVM性能监测,今天就又遇上99%,乐不开支拍拍手打开JConsole就要收拾它。
在Thread选项卡中看到许多HTTP的请求线程都阻塞在org.hibernate.util.SoftLimitMRUCache.get(SoftLimitMRUCache.java:51) 很快就发现下面这个Thread
Name: TP-Processor24
State: RUNNABLE
Total blocked: 87 Total waited: 21
Stack trace:
org.apache.commons.collections.ReferenceMap.getEntry(Unknown Source)
org.apache.commons.collections.ReferenceMap.get(Unknown Source)
org.hibernate.util.SoftLimitMRUCache.get(SoftLimitMRUCache.java:51)
org.hibernate.engine.query.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:107)
org.hibernate.impl.AbstractSessionImpl.getNativeSQLQueryPlan(AbstractSessionImpl.java:140)
org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:147)
org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:164)
com.mogoko.struts.logic.user.LeaveMesManager.getCommentByShopId(LeaveMesManager.java:302)
com.mogoko.struts.action.shop.ShopIndexBaseInfoAction.execute(ShopIndexBaseInfoAction.java:175)
LeaveMesManager.java:302是下面
list = (ArrayList) session.createSQLQuery(queryString).addEntity(“”,Leavemes.class).list();
显然是TP-Processor24进入SoftLimitMRUCache.get—>ReferenceMap.get–>ReferenceMap.getEntry没有返回,一共87个Thread被阻塞(21代表什么呢?)。
我们的环境如下:
Hibernate 3.1.2
Collections:2.1.1
分别打开了SoftLimitMRUCache.java和ReferenceMap.java。后者extends自AbstractMap,本身不提供线程安全保证,那就是SoftLimitMRUCache的问题了。看下面它的代码
public synchronized Object get(Object key) {
Object result = softReferenceCache.get( key );// 第51行
if ( result != null ) {
strongReferenceCache.put( key, result );
}
return result;
}
public Object put(Object key, Object value) {
softReferenceCache.put( key, value );
return strongReferenceCache.put( key, value );
}
public int size() {
return strongReferenceCache.size();
}
public int softSize() {
return softReferenceCache.size();
}
public Iterator entries() {
return strongReferenceCache.entrySet().iterator();
}
public Iterator softEntries() {
return softReferenceCache.entrySet().iterator();
}
除get函数外都没有synchronized,顶你的肺 看样子是每一次Hibernate’s Query在调用JDBC查询前都会去这个SoftLimitMRUCache先尝试从内存中查,从而减少数据库负载,之所以1次/周,是源于访问量不大,没有做好压力测试啊
再看看ReferenceMap.java
public Object get(Object key) {
purge();
Entry entry = getEntry(key); // 调用getEntry
if (entry == null) return null;
return entry.getValue();
}
private Entry getEntry(Object key) { public Object put(Object key, Object value) { purge(); int hash = key.hashCode(); private void resize() { for (int i = 0; i < old.length; i++) { 注意上面的四行粗蓝色代码,最多有三处会循环遍历/修改链表,多Thread环境下导致链表出现环路,结果infinite loop! 在Hibernate官网找到SoftLimitMRUCache的bug,有两条 1 Concurrent access issues with both SoftLimitMRUCache and SimpleMRUCache 影响版本3.2.0.alpha1, 3.1.3 再看看这个Infinite Loop Possible Through Non-synchronisd use LRUMap 讲的虽然是LRUMap,但根本原因仍在于SoftLimitMRUCache除get函数外没有同步导致。 对非同步的map多线程下带来的问题感兴趣可以看这里 HashMap.get() can cause an infinite loop! 2 Use of session.createSQLQuery causes memory leak 内存泄漏同样由于线程非安全导致。 下载Hibernate3.2.1的源码如下 public synchronized Object put(Object key, Object value) { public synchronized int size() { public synchronized int softSize() { public synchronized void clear() { 新版本中get/put/size/softSize函数和新增的clear函数都加上了synchronized同步。 Hibernate的bug查询地址是http://opensource.atlassian.com/projects/hibernate/secure/IssueNavigator.jspa 赶紧扔掉你的Hibernate3.1.X,换到Hibernate3.2.1以上吧,如果还有死循环问题我会。。
if (key == null) return null;
int hash = key.hashCode();
int index = indexFor(hash);
for (Entry entry = table[index]; entry != null; entry = entry.next) {
if ((entry.hash == hash) && key.equals(entry.getKey())) {
return entry;
}
}
return null;
}
if (key == null) throw new NullPointerException(“null keys not allowed”);
if (value == null) throw new NullPointerException(“null values not allowed”);
if (size + 1 > threshold) resize();
int index = indexFor(hash);
Entry entry = table[index];
while (entry != null) {
if ((hash == entry.hash) && key.equals(entry.getKey())) {
Object result = entry.getValue();
entry.setValue(value);
return result;
}
entry = entry.next;
}
this.size++;
modCount++;
key = toReference(keyType, key, hash);
value = toReference(valueType, value, hash);
table[index] = new Entry(key, hash, value, table[index]);
return null;
}
Entry[] old = table;
table = new Entry[old.length * 2];
Entry next = old[i];
while (next != null) {
Entry entry = next;
next = next.next;
int index = indexFor(entry.hash);
entry.next = table[index];
table[index] = entry;
}
old[i] = null;
}
threshold = (int)(table.length * loadFactor);
}
softReferenceCache.put( key, value );
return strongReferenceCache.put( key, value );
}
return strongReferenceCache.size();
}
return softReferenceCache.size();
}
strongReferenceCache.clear();
softReferenceCache.clear();
}
源自:http://www.mogoko.com/p/article/2385
发表评论
-
Struts2 在JDK1.4下运行(J4)
2011-07-13 13:52 1805注:项目部署到TOMCAT没问题,到weblogic就有问题: ... -
(转)ibatis Tips 之 java.util.Map作为parameterClass和resultClass
2010-10-20 14:31 52351.Map作为parameterClass 映射文件: ... -
ibatis的几种resultClass(转)
2010-10-20 14:28 7605ibatis在编写sqlmap的查询时,可以使用多种输出格式, ... -
静态类 静态方法 静态变量
2010-10-19 15:16 1536一、static 请先看下面这段程序: pu ... -
数据导入与实时进度条实现
2010-09-28 11:49 16428... -
浅谈Java多线程的同步问题(转)
2010-09-26 11:40 1103多线程的同步依靠的是 ... -
全面总结Java泛型--实例
2010-07-28 16:11 1185虽然Scala创始人Martin Odersky说当年正是因为 ... -
rapid validation 自定义验证
2010-07-28 10:52 2897学习了下 rapid-validation,发现这个验证框架是 ... -
div中动态插入javascript代码
2010-07-15 17:08 8049<div id="test"> ... -
[转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件)
2010-07-02 11:31 8342该软件无需安装,界面清爽。 转自:http: ... -
Javascript版 UrlEncode和UrlDecode函数 (URL地址栏参数加密解密)
2010-03-05 12:44 9964在做项目的时候需要对(Internet) Search Eng ... -
JSON初识
2010-02-02 17:18 1587什么是JSON? JSON(JavaScript Objec ... -
Dwr+AutoComplete+pinyin4j 自动匹配(中文,拼音)
2009-12-04 15:55 4415忙里偷闲,想弄个像google那样输入中文或拼音下面就自动匹配 ... -
JS 金额自动计算与合计(监听事件)
2009-11-30 15:34 76461: 项目中有时要在页面里面自动计算金额,如:左边框里面是数 ... -
JS 格式化金额
2009-11-30 15:08 3937//格式话金额 function fmoney(s ... -
windows 使用7-zip把文件打包成**.gz压缩包
2009-11-26 12:38 17141、下载7-zip这个软件并安装 2、将你要打包的文 ... -
hql中常用函數CAST 带来的日期转换问题
2009-11-20 16:51 9667以前都是连接的ORACLE,MYSQL数据库,写程序一直也没出 ... -
hibernate进行对象删除操作
2009-11-20 16:50 1110用hibernate进行对象删除操作,只要把ID和不为空的字段 ... -
hibernate生成主键方式,一直也不太明白(期待指点迷津)
2009-11-20 16:49 1164关于主键生成方式,在网上有很多文章,但都是说一些概念性的问题, ... -
Filter解决session 过期,跳转到登陆页面
2009-11-20 12:49 10306环境:DWR+ Struts 配置: 1、过滤.DO请求, ...
相关推荐
Hibernate 3.1.pdf 电子书
hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+...
hibernate3.1. jar另外有3.2的jar包,大家注意,因为重名我把这个放进了rar包里面了
Struts 2.1 + Spring 2.0.8 + Hibernate 3.1.rarStruts 2.1 + Spring 2.0.8 + Hibernate 3.1.rar
配置说明见: http://panyongzheng.iteye.com/blog/1872035
Hibernate3.1的jar包 Hibernate3.1的jar包 Hibernate3.1的jar包 Hibernate3.1的jar包 Hibernate3.1的jar包 Hibernate3.1的jar包 Hibernate3.1的jar包
因为struts2+Hibernate+Spring整合J2EE企业级开发框架新手会有很多错误.所以特为新手写了一个框架.在附件里面有oracle最新的jar包和sqlserver2008的连接驱动.
struts2.3.x+spring3.1.x+hibernate4.1整合工程(好用) 一个小时的结果,到时候要放到maven上面 做个备份
struts1.2+spring2.0+hibernate3.1jar包
hibernate3 API CHM 版本
以下JAR包: antlr-2.7.5H3.jar asm.jar cglib-2.1.2.jar commons-collections-2.1.1.jar commons-pool.jar dom4j-1.6.1.jar ehcache-1.1.jar hibernate3.jar jta.jar log4j-1.2.11.jar Standard.jar
ehcache-1.1.jar (1.1) - EHCache cache - runtime, optional (required if no other cache provider is set) versioncheck.jar (1.0) - version checker - buildtime swarmcache-1.0rc2.jar (1.0rc2) ...
struts1.2+spring2.0+hibernate3.1框架所需jar包
关键问题有几个,第一个HibernateDaoSupport这个没有了,在使用hibernateTemplate的时候,报错误:java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session 很是悲...
妙解Hibernate 3.x:叩响面向对象思想之门 PDF
NULL 博文链接:https://panyongzheng.iteye.com/blog/1872148
该压缩包内有hibernate3.1的lib文件夹里面的各种包,还有使用手册,以及hibernate的实例,hibernate3.jar
springmvc 和 spring,都是5.0版本,hibernate5.x版本,详细curd,实体反转。
Hibernate3.1API.chm 帮助文档