高并发的系统,今天早上突然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) {
                }
求教高手,这是什么原因导致的。