模拟“PSQLException:致命:抱歉,已经有太多客户端了”



我试图了解最大打开会话以及会话打开和关闭行为。我遇到了这个,我不能完全理解。

我想在我的代码中模拟“PSQLException: FATAL: sorry, too many clients already”。我已将max_connections设置为10。

并尝试了这个代码:

Session session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();
        session = HibernateUtil.getSessionFactory().openSession();

我本以为第11次通话时会出现错误,但我不明白。当我运行sql命令SELECT datname, numbackends FROM pg_stat_database where datname = 'XXX';时,我认为它将显示打开的会话计数,我看到它的上限为10。

请解释这种行为。

可能会发生很多事情(支持#2):1) 在更改最大连接数时,您没有正确地重新启动postgresql服务器。因此,重新启动服务器或查看此处2) Hibernate可能正在使用JDBC的会话池系统,并且您正在重复设置相同的会话变量。也许以前打开的会话是垃圾收集的,池总是可以为最新的会话腾出空间。我会尝试创建一个连接对象数组,并看看当您尝试使用打开的会话进行一些工作时会发生什么。

相关内容

  • 没有找到相关文章

最新更新