我使用的软件栈是:tomcat->弹簧> hibernate-> DBCP - > PostgreSQL的并发问题
我有搜索使用的一些列数据的查询键入“没有时区的时间戳”。
如果应用程序在单用户模式下测试,则没有问题。
我使用JMeter进行一些压力测试,可以看到有时查询失败。如果多个用户同时访问应用程序(同一时间超过20个),则只能复制此内容。
的错误是一样的东西:
org.postgresql.util.PSQLException:错误:时间戳超出范围: “20120100-09-26 00:00:00.000000 -04:00:00”
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062) org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795) org.postgresql.core.v3.QueryExecutorImpl.execute (QueryExecutorImpl.java:257) org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479) org.postgresql.jdbc2.AbstractJ dbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367) org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271) org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) org.apache .commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) org.hibernate.loader.Loader.getResultSet(Loader.java:1808) org.hibernate.loader.Loader.doQuery(Loader.java:697) org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) org.hibernate.loader.Loader.doList(Loader.java:2228) org.hibernate.loader.Loader.lis tIgnoreQueryCache(Loader.java:2125) org.hibernate.loader.Loader.list(Loader.java:2120) org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401) org.hibernate.hql .ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361) org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148) org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
的版本,我使用是:
- Tomcat的6.0.26
- 弹簧3
- DBCP 1.4
- PostgreSQL相关8.4-701.jdbc4.jar
- PostgreSQL的版本:8.4.4-0ubuntu10.04
这是奇怪的事情。我有一个jmeter测试,它使用时间戳查询一些数据。如果用户数少于20,那么没有问题。我开始增加用户的数量,并不时出现问题。 – 2010-09-08 14:00:23
然后问题可能出现在JMeter中:它使用无效数据,数据库没有别的选择,只能拒绝查询并抛出错误。 – 2010-09-08 14:19:41