Description
We observed HMS memory leak when directsql is enabled for MySQL metastore DB.
The affected code is in the method MetaStoreDirecdtSql.executeNoResult():
((Connection)jdoConn.getNativeConnection()).createStatement().execute(queryText);
The statement object (from createStatement()) is unfortunately referenced in the Connection object. Although close() is called on the Connection object in finally block, the BoneCP just moves it to a freeConnection list. Hence, statement object never get chances to be closed.
The leaked statement object is not huge (~1KB as observed in memory analyzer). However long running Hive Metastore Server is very likely ended up with bad performance doing frequent garbage collection.