mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-22 00:15:25 +02:00
[373507] [dstore][multithread] reduce heap memory on disconnect for server
This commit is contained in:
parent
dd35bf78c6
commit
7e326c2026
4 changed files with 61 additions and 14 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2011 IBM Corporation and others.
|
* Copyright (c) 2002, 2012 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -20,6 +20,7 @@
|
||||||
* David McKnight (IBM) - [232004] [dstore][multithread] some miner finish() is not terminated sometimes
|
* David McKnight (IBM) - [232004] [dstore][multithread] some miner finish() is not terminated sometimes
|
||||||
* David McKnight (IBM) - [328060] [dstore] command queue in Miner should be synchronized
|
* David McKnight (IBM) - [328060] [dstore] command queue in Miner should be synchronized
|
||||||
* David McKnight (IBM) - [358301] [DSTORE] Hang during debug source look up
|
* David McKnight (IBM) - [358301] [DSTORE] Hang during debug source look up
|
||||||
|
* David McKnight (IBM) - [373507] [dstore][multithread] reduce heap memory on disconnect for server
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.dstore.core.miners;
|
package org.eclipse.dstore.core.miners;
|
||||||
|
@ -129,24 +130,24 @@ implements ISchemaExtender
|
||||||
*/
|
*/
|
||||||
public void finish()
|
public void finish()
|
||||||
{
|
{
|
||||||
|
synchronized (_commandQueue){
|
||||||
|
_commandQueue.clear();
|
||||||
|
}
|
||||||
DataElement root = _dataStore.getMinerRoot();
|
DataElement root = _dataStore.getMinerRoot();
|
||||||
|
|
||||||
_minerData.removeNestedData();
|
_minerData.removeNestedData();
|
||||||
_minerElement.removeNestedData();
|
_minerElement.removeNestedData();
|
||||||
_dataStore.update(_minerElement);
|
_dataStore.update(_minerElement);
|
||||||
|
|
||||||
if (root.getNestedData() != null)
|
if (root != null && root.getNestedData() != null){
|
||||||
{
|
|
||||||
root.getNestedData().remove(_minerElement);
|
root.getNestedData().remove(_minerElement);
|
||||||
}
|
|
||||||
root.setExpanded(false);
|
root.setExpanded(false);
|
||||||
root.setUpdated(false);
|
root.setUpdated(false);
|
||||||
|
|
||||||
_dataStore.update(root);
|
_dataStore.update(root);
|
||||||
|
}
|
||||||
super.finish();
|
super.finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface to retrieve an NL enabled resource bundle.
|
* Interface to retrieve an NL enabled resource bundle.
|
||||||
* Override this function to get access to a real resource bundle.
|
* Override this function to get access to a real resource bundle.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2008 IBM Corporation and others.
|
* Copyright (c) 2002, 2012 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -13,6 +13,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* David McKnight (IBM) - [226561] [apidoc] Add API markup to RSE Javadocs where extend / implement is allowed
|
* David McKnight (IBM) - [226561] [apidoc] Add API markup to RSE Javadocs where extend / implement is allowed
|
||||||
|
* David McKnight (IBM) - [373507] [dstore][multithread] reduce heap memory on disconnect for server
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.dstore.core.model;
|
package org.eclipse.dstore.core.model;
|
||||||
|
@ -85,10 +86,15 @@ public final class DataElement implements IDataElement
|
||||||
DataElementRemover.addToCreatedCount();
|
DataElementRemover.addToCreatedCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Apparently having this method causes the GC to delay
|
||||||
|
* cleanup for DataElements. For a product this delayed cleanup
|
||||||
|
* can potentially result in an OOM so, at the expense of the
|
||||||
|
* memory logging function, we need to take this out.
|
||||||
protected void finalize()
|
protected void finalize()
|
||||||
{
|
{
|
||||||
DataElementRemover.addToGCedCount();
|
DataElementRemover.addToGCedCount();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes a <code>DataElement</code> to be reference to some other <code>DataElement</code>.
|
* Initializes a <code>DataElement</code> to be reference to some other <code>DataElement</code>.
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
* David McKnight (IBM) - [366070] [dstore] fix for bug 351993 won't allow tracing if .dstoreTrace doesn't exist
|
* David McKnight (IBM) - [366070] [dstore] fix for bug 351993 won't allow tracing if .dstoreTrace doesn't exist
|
||||||
* David McKnight (IBM) - [367096] [dstore] DataElement.isSpirit() may return true for newly created DStore objects
|
* David McKnight (IBM) - [367096] [dstore] DataElement.isSpirit() may return true for newly created DStore objects
|
||||||
* David McKnight (IBM) - [370260] [dstore] log the RSE version in server traces
|
* David McKnight (IBM) - [370260] [dstore] log the RSE version in server traces
|
||||||
|
* David McKnight (IBM) - [373507] [dstore][multithread] reduce heap memory on disconnect for server
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.dstore.core.model;
|
package org.eclipse.dstore.core.model;
|
||||||
|
@ -2643,9 +2644,35 @@ public final class DataStore
|
||||||
flush(_descriptorRoot);
|
flush(_descriptorRoot);
|
||||||
flush(_dummy);
|
flush(_dummy);
|
||||||
flush(_root);
|
flush(_root);
|
||||||
|
flush(_externalRoot);
|
||||||
|
|
||||||
|
// make sure these aren't null set since
|
||||||
|
// Miners need them on shutdown
|
||||||
|
// _logRoot = null;
|
||||||
|
// _minerRoot = null;
|
||||||
|
|
||||||
|
_hostRoot = null;
|
||||||
|
_tempRoot = null;
|
||||||
|
_descriptorRoot = null;
|
||||||
|
_dummy = null;
|
||||||
|
_root = null;
|
||||||
|
_externalRoot = null;
|
||||||
|
_status = null;
|
||||||
|
_ticket = null;
|
||||||
|
|
||||||
|
// clear the maps
|
||||||
|
_classReqRepository.clear();
|
||||||
|
_cmdDescriptorMap.clear();
|
||||||
|
_hashMap.clear();
|
||||||
|
_lastCreatedElements.clear();
|
||||||
|
_localClassLoaders.clear();
|
||||||
|
_objDescriptorMap.clear();
|
||||||
|
_relDescriptorMap.clear();
|
||||||
|
|
||||||
|
_remoteLoader = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete information from the <code>DataStore</code> contained by an element.
|
* Delete information from the <code>DataStore</code> contained by an element.
|
||||||
*
|
*
|
||||||
|
@ -4204,6 +4231,14 @@ public final class DataStore
|
||||||
// which causes havoc for iSeries caching when switching between offline / online
|
// which causes havoc for iSeries caching when switching between offline / online
|
||||||
//if (isVirtual())
|
//if (isVirtual())
|
||||||
// flush();
|
// flush();
|
||||||
|
|
||||||
|
if (!isVirtual()){ // only on server
|
||||||
|
if (getClient() != null){
|
||||||
|
getClient().getLogger().logInfo(this.getName(), "DataStore.finish() - flush()"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
|
||||||
if (_deRemover != null){
|
if (_deRemover != null){
|
||||||
_deRemover.finish();
|
_deRemover.finish();
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
* David McKnight (IBM) - [294933] [dstore] RSE goes into loop
|
* David McKnight (IBM) - [294933] [dstore] RSE goes into loop
|
||||||
* David McKnight (IBM) - [331922] [dstore] enable DataElement recycling
|
* David McKnight (IBM) - [331922] [dstore] enable DataElement recycling
|
||||||
* David McKnight (IBM) - [371401] [dstore][multithread] avoid use of static variables - causes memory leak after disconnect
|
* David McKnight (IBM) - [371401] [dstore][multithread] avoid use of static variables - causes memory leak after disconnect
|
||||||
|
* David McKnight (IBM) - [373507] [dstore][multithread] reduce heap memory on disconnect for server
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.dstore.internal.core.util;
|
package org.eclipse.dstore.internal.core.util;
|
||||||
|
@ -37,7 +38,7 @@ public class DataElementRemover extends Handler
|
||||||
private static int numRemoved = 0;
|
private static int numRemoved = 0;
|
||||||
private static int numDisconnected = 0;
|
private static int numDisconnected = 0;
|
||||||
private static int numCreated = 0;
|
private static int numCreated = 0;
|
||||||
private static int numGCed = 0;
|
//private static int numGCed = 0;
|
||||||
|
|
||||||
// The following determine how DataElements are chosen to be removed once they
|
// The following determine how DataElements are chosen to be removed once they
|
||||||
// are in the queue for removal.
|
// are in the queue for removal.
|
||||||
|
@ -100,7 +101,7 @@ public class DataElementRemover extends Handler
|
||||||
|
|
||||||
public static void addToGCedCount()
|
public static void addToGCedCount()
|
||||||
{
|
{
|
||||||
numGCed++;
|
//numGCed++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,7 +153,9 @@ public class DataElementRemover extends Handler
|
||||||
_dataStore.memLog("Elements created so far: " + numCreated); //$NON-NLS-1$
|
_dataStore.memLog("Elements created so far: " + numCreated); //$NON-NLS-1$
|
||||||
_dataStore.memLog("Elements disconnected so far: " + numDisconnected); //$NON-NLS-1$
|
_dataStore.memLog("Elements disconnected so far: " + numDisconnected); //$NON-NLS-1$
|
||||||
_dataStore.memLog("Spirit elements cleaned so far: " + numRemoved); //$NON-NLS-1$
|
_dataStore.memLog("Spirit elements cleaned so far: " + numRemoved); //$NON-NLS-1$
|
||||||
_dataStore.memLog("DataElements GCed so far: " + numGCed); //$NON-NLS-1$
|
|
||||||
|
// no longer a helpful stat since we no longer use finalize
|
||||||
|
// _dataStore.memLog("DataElements GCed so far: " + numGCed); //$NON-NLS-1$
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_dataStore.memLog("Total heap size before disconnection: " + Runtime.getRuntime().totalMemory()); //$NON-NLS-1$
|
_dataStore.memLog("Total heap size before disconnection: " + Runtime.getRuntime().totalMemory()); //$NON-NLS-1$
|
||||||
|
@ -190,7 +193,9 @@ public class DataElementRemover extends Handler
|
||||||
_dataStore.memLog("Elements created so far: " + numCreated); //$NON-NLS-1$
|
_dataStore.memLog("Elements created so far: " + numCreated); //$NON-NLS-1$
|
||||||
_dataStore.memLog("Elements disconnected so far: " + numDisconnected); //$NON-NLS-1$
|
_dataStore.memLog("Elements disconnected so far: " + numDisconnected); //$NON-NLS-1$
|
||||||
_dataStore.memLog("Spirit elements cleaned so far: " + numRemoved); //$NON-NLS-1$
|
_dataStore.memLog("Spirit elements cleaned so far: " + numRemoved); //$NON-NLS-1$
|
||||||
_dataStore.memLog("DataElements GCed so far: " + numGCed); //$NON-NLS-1$
|
|
||||||
|
// no longer a helpful stat since we no longer use finalize
|
||||||
|
// _dataStore.memLog("DataElements GCed so far: " + numGCed); //$NON-NLS-1$
|
||||||
System.gc();
|
System.gc();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue