高并发的系统,今天早上突然CPU冲高啦,系统管理员那边查看日志,说同步锁没释放,导致很多线程在等待。
有大量的线程都在等待同步锁的释放,而这个同步锁被如下线程占用,一直没有释放。"Thread-1023776" prio=10 tid=0x00002aaab46f7800 nid=0x63b1 runnable [0x0000000067695000] java.lang.Thread.State: RUNNABLE at java.text.FieldPosition.getFieldDelegate(FieldPosition.java:186) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:869) at org.apache.log4j.helpers.DateLayout.dateFormat(DateLayout.java:141) at org.apache.log4j.TTCCLayout.format(TTCCLayout.java:171) at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:292) at org.apache.log4j.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:349) at org.apache.log4j.WriterAppender.append(WriterAppender.java:150) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:221) - locked <0x0000000748d3eb30> (a org.apache.log4j.DailyRollingFileAppender) at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:57) at org.apache.log4j.Category.callAppenders(Category.java:187) - locked <0x0000000748cf7250> (a org.apache.log4j.spi.RootCategory) at org.apache.log4j.Category.forcedLog(Category.java:372) at org.apache.log4j.Category.log(Category.java:864) at sun.reflect.GeneratedMethodAccessor297.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.commons.logging.impl.Log4jProxy.log(Log4jProxy.java:311) at org.apache.commons.logging.impl.Log4jProxy.warn(Log4jProxy.java:283) at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:173) at org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:77) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:42) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:424) at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144) at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326) at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301) at $Proxy161.beginTransaction(Unknown Source)
指向的具体代码是
SessionFactory sf = HibernateSFBean.getSf();
Session session = sf.getCurrentSession();
Transaction tx = null;
Connection conn = null;
PreparedStatement psd = null;
ResultSet set = null;
long relong = 0;
try {
tx = session.beginTransaction();//报错信息指向这一行
conn = session.connection();
psd = conn.prepareStatement(sql);
set = psd.executeQuery();
while (set.next()) {
relong = set.getLong("nextval");
}
set.close();
psd.close();
tx.commit();
return relong;
} catch (Exception e) {
}
求教高手,这是什么原因导致的。
有大量的线程都在等待同步锁的释放,而这个同步锁被如下线程占用,一直没有释放。"Thread-1023776" prio=10 tid=0x00002aaab46f7800 nid=0x63b1 runnable [0x0000000067695000] java.lang.Thread.State: RUNNABLE at java.text.FieldPosition.getFieldDelegate(FieldPosition.java:186) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:869) at org.apache.log4j.helpers.DateLayout.dateFormat(DateLayout.java:141) at org.apache.log4j.TTCCLayout.format(TTCCLayout.java:171) at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:292) at org.apache.log4j.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:349) at org.apache.log4j.WriterAppender.append(WriterAppender.java:150) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:221) - locked <0x0000000748d3eb30> (a org.apache.log4j.DailyRollingFileAppender) at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:57) at org.apache.log4j.Category.callAppenders(Category.java:187) - locked <0x0000000748cf7250> (a org.apache.log4j.spi.RootCategory) at org.apache.log4j.Category.forcedLog(Category.java:372) at org.apache.log4j.Category.log(Category.java:864) at sun.reflect.GeneratedMethodAccessor297.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.commons.logging.impl.Log4jProxy.log(Log4jProxy.java:311) at org.apache.commons.logging.impl.Log4jProxy.warn(Log4jProxy.java:283) at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:173) at org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:77) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:42) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:424) at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144) at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326) at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301) at $Proxy161.beginTransaction(Unknown Source)
指向的具体代码是
SessionFactory sf = HibernateSFBean.getSf();
Session session = sf.getCurrentSession();
Transaction tx = null;
Connection conn = null;
PreparedStatement psd = null;
ResultSet set = null;
long relong = 0;
try {
tx = session.beginTransaction();//报错信息指向这一行
conn = session.connection();
psd = conn.prepareStatement(sql);
set = psd.executeQuery();
while (set.next()) {
relong = set.getLong("nextval");
}
set.close();
psd.close();
tx.commit();
return relong;
} catch (Exception e) {
}
求教高手,这是什么原因导致的。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货