AbstractJdbc2ResultSet.FAST_NUMBER_FAILED brings class loader leak
От | Kohei Nozaki |
---|---|
Тема | AbstractJdbc2ResultSet.FAST_NUMBER_FAILED brings class loader leak |
Дата | |
Msg-id | 561B9D78.8090106@nailedtothex.org обсуждение исходный текст |
Ответы |
Re: AbstractJdbc2ResultSet.FAST_NUMBER_FAILED brings class
loader leak
Re: AbstractJdbc2ResultSet.FAST_NUMBER_FAILED brings class loader leak |
Список | pgsql-jdbc |
Hello, I'm working on fixing the issue "java.lang.OutOfMemoryError: Metaspace" in the time of redeploy where running an web application on Tomcat. I have acquired a heap dump and found a weird Root GC reference which is connected to org.postgresql.jdbc2.AbstractJdbc2ResultSet. The heap dump shows that it saves a (intentionally constructed) NumberFormatException in a private static final field FAST_NUMBER_FAILED and that field has backtrace field which references a Servlet class that loaded by WebappClassLoader. Here's a screenshot of Eclipse Memory Analyzer: http://www.nailedtothex.org/roller/kyle/mediaresource/2fabd2a0-10a3-4d45-b8c8-589763d15824 I think AbstractJdbc2ResultSet should stop saving a intentionally constructed Exception in a static field because it creates a strong reference to a class which invoked the database operation at the first time regardless if it's loaded by WebappClassLoader. It will be a cause of class loader leak. [Steps to reproduce] 1. Put postgresql-9.3-1100.jdbc41.jar to $TOMCAT_HOME/lib 2. Put following element to $TOMCAT_HOME/conf/context.xml <Resource name="jdbc/PostgreSQLDS" url="jdbc:postgresql://localhost:5432/somedb" driverClassName="org.postgresql.Driver" username="postgres" password="***" auth="Container" type="javax.sql.DataSource" maxActive="20" maxIdle="5" maxWait="10000"/> 3. git clone https://github.com/lbtc-xxx/jdbc-servlet 4. cd jdbc-servlet; mvn clean package 5. deploy the WAR 6. visit http://localhost:8080/jdbc-servlet-1.0-SNAPSHOT 7. undeploy and deploy the WAR several times (keep your JVM running) 8. acquire heap dump and load it with Eclipse Memory Analyzer [My environment] * postgresql-9.3-1100.jdbc41.jar * Tomcat 8.0.18 * Oracle JDK 8u60 * PostgreSQL 9.3.4 Thanks.
В списке pgsql-jdbc по дате отправления: