hive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Henry Wang (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HIVE-5296) Memory leak: OOM Error after multiple open/closed JDBC connections.
Date Tue, 17 Sep 2013 23:36:52 GMT

    [ https://issues.apache.org/jira/browse/HIVE-5296?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13770163#comment-13770163
] 

Henry Wang commented on HIVE-5296:
----------------------------------

I ran hiveserver2 (with hive 0.11). After running some queries and using jmap -dump on the
RunJar process I see that there are 2 instances of org.apache.hadoop.mapred.JobConf per query.

                
> Memory leak: OOM Error after multiple open/closed JDBC connections. 
> --------------------------------------------------------------------
>
>                 Key: HIVE-5296
>                 URL: https://issues.apache.org/jira/browse/HIVE-5296
>             Project: Hive
>          Issue Type: Bug
>          Components: HiveServer2
>    Affects Versions: 0.12.0
>         Environment: Hive 0.12.0, Hadoop 1.1.2, Debian.
>            Reporter: Douglas
>              Labels: hiveserver
>             Fix For: 0.12.0
>
>   Original Estimate: 168h
>  Remaining Estimate: 168h
>
> This error seems to relate to https://issues.apache.org/jira/browse/HIVE-3481
> However, on inspection of the related patch and my built version of Hive (patch carried
forward to 0.12.0), I am still seeing the described behaviour.
> Multiple connections to Hiveserver2, all of which are closed and disposed of properly
show the Java heap size to grow extremely quickly. 
> This issue can be recreated using the following code
> {code}
> import java.sql.DriverManager;
> import java.sql.Connection;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.Statement;
> import java.util.Properties;
> import org.apache.hive.service.cli.HiveSQLException;
> import org.apache.log4j.Logger;
> /*
>  * Class which encapsulates the lifecycle of a query or statement.
>  * Provides functionality which allows you to create a connection
>  */
> public class HiveClient {
> 	
> 	Connection con;
> 	Logger logger;
> 	private static String driverName = "org.apache.hive.jdbc.HiveDriver";	
> 	private String db;
> 	
> 	
> 	public HiveClient(String db)
> 	{		
> 		logger = Logger.getLogger(HiveClient.class);
> 		this.db=db;
> 		
> 		try{
> 			 Class.forName(driverName);
> 		}catch(ClassNotFoundException e){
> 			logger.info("Can't find Hive driver");
> 		}
> 		
> 		String hiveHost = GlimmerServer.config.getString("hive/host");
> 		String hivePort = GlimmerServer.config.getString("hive/port");
> 		String connectionString = "jdbc:hive2://"+hiveHost+":"+hivePort +"/default";
> 		logger.info(String.format("Attempting to connect to %s",connectionString));
> 		try{			
> 			con = DriverManager.getConnection(connectionString,"","");									
> 		}catch(Exception e){
> 			logger.error("Problem instantiating the connection"+e.getMessage());
> 		}		
> 	}
> 			
> 	public int update(String query) 
> 	{
> 		Integer res = 0;
> 		Statement stmt = null;
> 		try{			
> 			stmt = con.createStatement();
> 			String switchdb = "USE "+db;
> 			logger.info(switchdb);		
> 			stmt.executeUpdate(switchdb);
> 			logger.info(query);
> 			res = stmt.executeUpdate(query);
> 			logger.info("Query passed to server");	
> 			stmt.close();
> 		}catch(HiveSQLException e){
> 			logger.info(String.format("HiveSQLException thrown, this can be valid, " +
> 					"but check the error: %s from the query %s",query,e.toString()));
> 		}catch(SQLException e){
> 			logger.error(String.format("Unable to execute query SQLException %s. Error: %s",query,e));
> 		}catch(Exception e){
> 			logger.error(String.format("Unable to execute query %s. Error: %s",query,e));
> 		}
> 		
> 		if(stmt!=null)
> 			try{
> 				stmt.close();
> 			}catch(SQLException e){
> 				logger.error("Cannot close the statment, potentially memory leak "+e);
> 			}
> 		
> 		return res;
> 	}
> 	
> 	public void close()
> 	{
> 		if(con!=null){
> 			try {
> 				con.close();
> 			} catch (SQLException e) {				
> 				logger.info("Problem closing connection "+e);
> 			}
> 		}
> 	}
> 	
> 	
> 	
> }
> {code}
> And by creating and closing many HiveClient objects. The heap space used by the hiveserver2
runjar process is seen to increase extremely quickly, without such space being released.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message