You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2019/02/01 15:39:08 UTC

svn commit: r1852757 - in /uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper: BrokerHelper.java DatabaseHelper.java JmxHelper.java

Author: degenaro
Date: Fri Feb  1 15:39:08 2019
New Revision: 1852757

URL: http://svn.apache.org/viewvc?rev=1852757&view=rev
Log:
UIMA-5977 DUCC Web Server (WS) JMX thread leak

Modified:
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/BrokerHelper.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/JmxHelper.java

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/BrokerHelper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/BrokerHelper.java?rev=1852757&r1=1852756&r2=1852757&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/BrokerHelper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/BrokerHelper.java Fri Feb  1 15:39:08 2019
@@ -32,13 +32,9 @@ import java.util.TreeSet;
 import javax.management.Attribute;
 import javax.management.AttributeList;
 import javax.management.InstanceNotFoundException;
-import javax.management.MBeanServerConnection;
 import javax.management.ObjectName;
 import javax.management.ReflectionException;
 import javax.management.openmbean.CompositeData;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXConnectorFactory;
-import javax.management.remote.JMXServiceURL;
 
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
@@ -55,10 +51,6 @@ public class BrokerHelper extends JmxHel
 		return new BrokerHelper();
 	}
 
-	private JMXServiceURL jmxServiceUrl = null;;
-	private JMXConnector jmxc;
-	private MBeanServerConnection mbsc;
-
 	private OperatingSystemMXBean remoteOperatingSystem;
 	private ThreadMXBean remoteThread;
 
@@ -133,7 +125,7 @@ public class BrokerHelper extends JmxHel
 		String location = "populateRemoteOperatingSystem";
 		try {
 			remoteOperatingSystem = ManagementFactory.newPlatformMXBeanProxy(
-				mbsc,
+				getMBSC(),
 				ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME,
 				OperatingSystemMXBean.class);
 		} 
@@ -146,7 +138,7 @@ public class BrokerHelper extends JmxHel
 		String location = "populateRemoteThread";
 		try {
 			remoteThread = ManagementFactory.newPlatformMXBeanProxy(
-				mbsc,
+				getMBSC(),
 				ManagementFactory.THREAD_MXBEAN_NAME,
 				ThreadMXBean.class);
 		} 
@@ -179,7 +171,7 @@ public class BrokerHelper extends JmxHel
 	private void populateMemory() {
 		String location = "populateMemory";
 		try {
-			Object o = mbsc.getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage");
+			Object o = getMBSC().getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage");
 			CompositeData cd = (CompositeData) o;
 			memoryUsed = (Long) cd.get("used");
 			memoryMax = (Long) cd.get("max");
@@ -193,7 +185,7 @@ public class BrokerHelper extends JmxHel
 		String location = "populateRuntime";
 		try {
 			Object o;
-			o = mbsc.getAttribute(new ObjectName("java.lang:type=Runtime"), "StartTime");
+			o = getMBSC().getAttribute(new ObjectName("java.lang:type=Runtime"), "StartTime");
 			startTime = (Long) o;
 		}
 		catch(Exception e) {
@@ -301,7 +293,7 @@ public class BrokerHelper extends JmxHel
 							if(dName.startsWith("ducc.")) {
 								logger.trace(location, jobid, dType+": "+dName);
 								Map<String,String> attributes = new TreeMap<String,String>();
-								AttributeList  attributeList = mbsc.getAttributes(objectName, topicAttributeNames);
+								AttributeList  attributeList = getMBSC().getAttributes(objectName, topicAttributeNames);
 								for(Object object : attributeList) {
 								   	Attribute attribute = (Attribute) object;
 								   	String attrName = attribute.getName();
@@ -335,7 +327,7 @@ public class BrokerHelper extends JmxHel
 					String prefix = "ducc.";
 					if(start(name,prefix)) {
 						Map<String,String> attributes = new TreeMap<String,String>();
-						AttributeList  attributeList = mbsc.getAttributes(objectName, topicAttributeNames);
+						AttributeList  attributeList = getMBSC().getAttributes(objectName, topicAttributeNames);
 						for(Object object : attributeList) {
 						   	Attribute attribute = (Attribute) object;
 						   	String attrName = attribute.getName();
@@ -358,7 +350,7 @@ public class BrokerHelper extends JmxHel
 	
 	private Map<String,Map<String,String>> search() throws IOException, InstanceNotFoundException, ReflectionException {
 		Map<String,Map<String,String>> map = new TreeMap<String,Map<String,String>>();
-		Set<ObjectName> objectNames = new TreeSet<ObjectName>(mbsc.queryNames(null, null));
+		Set<ObjectName> objectNames = new TreeSet<ObjectName>(getMBSC().queryNames(null, null));
 		for (ObjectName objectName : objectNames) {
 			brokerAdd(objectName);
 		}
@@ -378,7 +370,7 @@ public class BrokerHelper extends JmxHel
 				}
 				String s1 = "Broker";
 				if(match(s0,s1)) {
-					AttributeList  attributeList = mbsc.getAttributes(objectName, brokerAttributeNames);
+					AttributeList  attributeList = getMBSC().getAttributes(objectName, brokerAttributeNames);
 					for(Object object : attributeList) {
 						Attribute attribute = (Attribute) object;
 					   	String attrName = attribute.getName();
@@ -419,21 +411,7 @@ public class BrokerHelper extends JmxHel
 		return getJmxPort();
 	}
 
-	private void connect() throws IOException {
-		jmxServiceUrl = new JMXServiceURL(getJmxUrl());
-		jmxc = JMXConnectorFactory.connect(jmxServiceUrl, null);
-		mbsc = jmxc.getMBeanServerConnection();
-	}
 
-	private void disconnect() {
-		String location = "disconnect";
-		try {
-			jmxc.close();
-		}
-		catch(Exception e) {
-			logger.error(location, jobid, e);
-		}
-	}
 	
 	// Operating System Info //
 
@@ -491,17 +469,6 @@ public class BrokerHelper extends JmxHel
 		boolean retVal = DuccDaemonsData.getInstance().isWsPublicationOntime();
 		return retVal;
 	}
-
-	@Override
-	protected void reconnect() {
-		String location = "reconnect";
-		try {
-			jmxConnect();
-		}
-		catch(Exception e) {
-			logger.error(location, jobid, e);
-		}
-	}
 	
 	// Command Line
 	

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java?rev=1852757&r1=1852756&r2=1852757&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java Fri Feb  1 15:39:08 2019
@@ -31,9 +31,12 @@ public class DatabaseHelper extends JmxH
 	private static DuccLogger logger = DuccLogger.getLogger(DatabaseHelper.class);
 	private static DuccId jobid = null;
 	
-	private static DatabaseHelper instance = new DatabaseHelper();
+	private static DatabaseHelper instance = null;
 	
 	public static DatabaseHelper getInstance() {
+		if(instance == null) {
+			instance = new DatabaseHelper();
+		}
 		return instance;
 	}
 
@@ -54,7 +57,6 @@ public class DatabaseHelper extends JmxH
 				setJmxHost(jmx_host);
 				Integer jmx_port = DbHelper.getJxmPortInteger();
 				setJmxPort(jmx_port); 
-				jmxConnect();
 			}
 		}
 		catch(Exception e) {
@@ -99,9 +101,10 @@ public class DatabaseHelper extends JmxH
 		}
 		catch(Exception e) {
 			try {
-				reconnect();
+				connect();
 				mbsc = getMBSC();
 				o = mbsc.getAttribute(new ObjectName("java.lang:type=Runtime"), "StartTime");
+				disconnect();
 				retVal = (Long) o;
 			}
 			catch(Exception e2) {
@@ -111,11 +114,4 @@ public class DatabaseHelper extends JmxH
 		return retVal;
 	}
 	
-	@Override
-	protected void reconnect() {
-		String location = "reconnect";
-		init();
-		logger.debug(location, jobid, "reconnected");
-	}
-	
 }

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/JmxHelper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/JmxHelper.java?rev=1852757&r1=1852756&r2=1852757&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/JmxHelper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/JmxHelper.java Fri Feb  1 15:39:08 2019
@@ -18,8 +18,6 @@
 */
 package org.apache.uima.ducc.ws.helper;
 
-import java.io.IOException;
-
 import javax.management.MBeanServerConnection;
 import javax.management.ObjectName;
 import javax.management.remote.JMXConnector;
@@ -37,9 +35,9 @@ public abstract class JmxHelper {
 	private String jmxHost = "localhost";
 	private int jmxPort = -1;
 	
-	private JMXServiceURL url;
-	private JMXConnector jmxc;
-	private MBeanServerConnection mbsc;
+	private JMXServiceURL url = null;
+	private JMXConnector jmxc = null;
+	private MBeanServerConnection mbsc = null;
 	
 	protected void setJmxHost(String value) {
 		jmxHost = value;
@@ -65,10 +63,36 @@ public abstract class JmxHelper {
 		return mbsc;
 	}
 	
-	protected void jmxConnect() throws IOException {
-		url = new JMXServiceURL(getJmxUrl());
-		jmxc = JMXConnectorFactory.connect(url, null);
-		mbsc = jmxc.getMBeanServerConnection();
+	protected void connect() throws Exception {
+		String location = "connect";
+		try {
+			url = new JMXServiceURL(getJmxUrl());
+			jmxc = JMXConnectorFactory.connect(url, null);
+			mbsc = jmxc.getMBeanServerConnection();
+			String id = jmxc.getConnectionId();
+			logger.debug(location, jobid, id);
+		}
+		catch(Exception e) {
+			logger.error(location, jobid, e);
+			throw e;
+		}
+		
+	}
+
+	protected void disconnect() throws Exception {
+		String location = "disconnect";
+		try {
+			if(jmxc != null) {
+				String id = jmxc.getConnectionId();
+				jmxc.close();
+				jmxc = null;
+				logger.debug(location, jobid, id);
+			}
+		}
+		catch(Exception e) {
+			logger.error(location, jobid, e);
+			throw e;
+		}
 	}
 	
 	protected String getJmxData() throws Exception {
@@ -79,9 +103,10 @@ public abstract class JmxHelper {
 			o = mbsc.getAttribute(new ObjectName("java.lang:type=Runtime"), "Name");
 		} 
 		catch(Exception e) {
-			reconnect();
+			connect();
 			mbsc = getMBSC();
 			o = mbsc.getAttribute(new ObjectName("java.lang:type=Runtime"), "Name");
+			disconnect();
 		}
 		String data = (String) o;
 		return data;
@@ -102,5 +127,4 @@ public abstract class JmxHelper {
 		return retVal;
 	}
 
-	protected abstract void reconnect();
 }