![Java Web 服务器的建议](https://linux22.com/image/497257/Java%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E5%BB%BA%E8%AE%AE%20.png)
我目前正在使用 DBCP 进行连接池,因为它或多或少随 tomcat 提供并且易于设置。我正在考虑迁移到 Glassfish 或 Jetty,但尚未确定将使用哪个连接池提供程序。
我目前正在运行带有 Hibernate 的 JBoss Seam,到目前为止,该配置已经获得了不错的性能。
我见过一些文章说 c3p0 更好,有些文章说 proxool 更好,还有一些文章说它们都处于陈旧状态,所以 dbcp 是最好的选择,因为它维护得更好并且有文档。
今晚我运行了 JMeter 测试,发现当有 10 个并发用户以任意随机顺序访问网站且页面请求之间没有延迟时,dbcp 无法获得连接并崩溃。我对错误感到失望,但对性能感到满意。我认为我可以通过二级缓存稍微提高性能。
问题:
如果我不使用 EJB 或 OSGI,Jetty 7 是否明显优于 Glassfish 和 tomcat 6?它肯定要小得多,因此开箱即用的资源消耗也更少。目前我只部署 1 个 Web 应用程序,以后我会部署更多。
对于简单的应用服务器,您推荐使用哪种连接池?我预计不会有 10 个并发用户,而且请求之间不会出现任何延迟,但知道应用程序在崩溃前可以处理什么以及达到该点时会做什么,还是不错的。
最后,无法获取连接错误通常表示查询运行时间过长,因此无法将该连接返回到池中。除了确保所有查询都高效运行外,您还会检查哪些方面?
例外情况:
00:38:38,886 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: null
00:38:38,898 ERROR [JDBCExceptionReporter] Already closed.
00:38:46,823 INFO [DefaultLoadEventListener] Error performing load command
org.hibernate.SessionException: Session is closed!
我的平均响应时间为 300 毫秒,最小响应时间为 100 毫秒,最大响应时间为 5 秒,标准差为 300 毫秒。这是在 Linode 基础服务器上(360 MB RAM,最简软件包)的结果。
还有其他评论吗?
谢谢,
沃尔特