2014-09-22 4 views
2

Мы переместили код на новый сервер, так как ранее мы использовали tomcat6, но на новой системе был установлен tomcat7. поэтому мы получаем ошибку ниже, я сделал googling и внес изменения, но все равно получаю такую ​​же ошибку. ошибка, как показано ниже.Ошибка объединения пула Tomcat 7

Sep 21, 2014 6:15:14 PM org.apache.tomcat.jdbc.pool.ConnectionPool abandon 
WARNING: Connection has been abandoned PooledConnection[[email protected]]:java.lang.Exception 
     at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1063) 
     at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:780) 
     at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:619) 
     at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:188) 
     at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:128) 
     at com.fstl.resellermg.util.DbUtils.getConnection(DbUtils.java:34) 
     at com.fstl.resellermg.bo.LeadExtBO.getListUploadStatus(LeadExtBO.java:1350) 
     at com.fstl.resellermg.servlet.GetLeadCountByUserName.doPost(GetLeadCountByUserName.java:56) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
     at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:193) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 

Моя конфигурация context.xml является

<Context> 
<Resource name="jdbc/testDB" 
auth="Container" 
type="javax.sql.DataSource" 
username="root" 
password="" 
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/xxx" 
validationQuery="SELECT 1" 
validationInterval="30000" 
maxWait="1000" 
removeAbandoned="true" 
initialSize="10" 
maxActive="100" 
maxIdle="50" 
minIdle="10" 
suspectTimeout="60" 
timeBetweenEvictionRunsMillis="30000" 
minEvictableIdleTimeMillis="60000" 
testOnBorrow="true" 
removeAbandonedTimeout="60" 
logAbandoned="true"/> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 

</Context> 
+0

Я обнаружил, что использование программного обеспечения пула соединений с лучшими сообщениями об ошибках помогает мне диагностировать эти типы вещей. Я использую Hikari CP и считаю его более полезным. Тем не менее, я полностью согласен с подходом @kaqqao (+1 для ответа). – bphilipnyc

+0

Это решение, которое вы ищете - https://stackoverflow.com/questions/13129070/webapp-tomcat-jdbc-pooled-db-connection-throwing-abandon-exception –

ответ

6

Ошибка ясно говорит, что связь была прекращена. Это означает одну из двух вещей. Либо где-нибудь в вашем коде, вы не закрываете соединение правильно, либо у вас длинный запрос, превышающий тайм-аут (минута в вашем случае), поэтому Tomcat ошибочно полагает, что он был оставлен. Сделайте свой журнал регистрации медленных запросов или профилируйте приложение, чтобы выяснить, соответствует ли это последнему.

+0

Привет, сэр за ваш быстрый ответ How он работал в tomcat6 без каких-либо сбоев. – rajub

+0

Возможно, ваш вариант сервера, сетевой макет или правила брандмауэра изменили время ожидания и время ожидания. Возможно, ваш предыдущий пул не убивал заброшенные соединения. Может быть, миллион вещей и, не зная мужество вашего приложения, будет почти невозможно сказать, но сообщение об ошибке довольно ясно о том, что происходит. Но после моего совета по протоколированию медленных запросов и/или профилирования вы должны получить правильный путь. Вы можете просто попытаться контролировать использование пула с помощью чего-то вроде PSI Probe: https://code.google.com/p/psi-probe/ – kaqqao

-1

Это работает с Tomcat 6, потому что эта версия не включает функции тайм-аута. Вот почему запрос работает правильно без тайм-аута.