我有一个使用hibernate进行O / R映射的java应用程序,我还使用与hibernate一起提供的c3p0连接池。数据库是Oracle。
这是我的hibernate.cfg.xml
:
<property name="hibernate.c3p0.min_size">3</property>
<property name="hibernate.c3p0.max_size">5</property>
<property name="hibernate.c3p0.max_statements">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.idleTestPeriod">120</property>
这就是我获取hibernate会话的方式:
public class HibernateUtil {
private static Logger log = Logger.getLogger(HibernateUtil.class);
private static final SessionFactory sessionFactory;
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure(CONFIG_FILE_LOCATION).buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
log.fatal("Initial SessionFactory creation failed." + ex.getMessage());
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
但是当我在Oracle中运行SELECT * FROM V$SESSION WHERE machine='xxx';
时,连接数可以达到20,这大于max_size
。
最大连接在Linux环境中不起作用,但它们在Unix和Windows中起作用。 Linux中需要调整的任何设置?
我也怀疑应用程序的缓存在某处,就像之前我设置的max_size
一样。我在Tomcat 5.5中运行应用程序。但我不知道Tomcat中有这样的应用程序缓存。
另一个信息:我正在运行Linux 2.6.9-34.ELsmp。 Red Hat Enterprise Linux AS release 4 (Nahant Update 3)
感谢。
答案 0 :(得分:0)
我猜你没有从你的应用程序打开额外的数据库会话。例如,应该有一个额外的连接 - 您用来运行SELECT
语句的连接。