diff --git a/src/eva2/server/go/problems/MatlabEvalMediator.java b/src/eva2/server/go/problems/MatlabEvalMediator.java index c1b0bc31..c15fdfc7 100644 --- a/src/eva2/server/go/problems/MatlabEvalMediator.java +++ b/src/eva2/server/go/problems/MatlabEvalMediator.java @@ -55,7 +55,7 @@ public class MatlabEvalMediator { public void setMatlabProblem(MatlabProblem theMP) { mp=theMP; - mp.log("setting MP " + theMP + " for MEM " + this + "\n"); + logMP("setting MP " + theMP + " for MEM " + this + "\n"); } /** @@ -76,15 +76,18 @@ public class MatlabEvalMediator { // if (question == null) System.err.println("Error: requesting evaluation for null array!"); } else System.err.println("Error, requesting evaluation for non array!"); +// logMPAndSysOut("Synch requesting A requestEval " + getState()); synchronized(requesting) { +// logMPAndSysOut(" in synch requesting A requestEval " + getState()); if (requesting) { String msg="Warning: already in requesting state when request arrived!"; System.err.println(msg); - mp.log(msg); + logMP(msg); } requesting = true; - mp.log("-- Requesting eval for " + BeanInspector.toString(x) + ", req state is " + requesting + "\n"); +// logMPAndSysOut("-- Requesting eval for " + BeanInspector.toString(x) + ", req state is " + requesting + "\n"); } +// logMPAndSysOut("Synch requesting A done " + getState()); int k=0; int mod=25; while (requesting && !quit) { // wait for matlab to answer the question @@ -94,13 +97,13 @@ public class MatlabEvalMediator { k++; if ((k%mod)==0) { // System.out.println("waiting for matlab to answer..."); - mp.log("waiting for matlab to answer... (" + mod + ") " + getState() + "\n"); + logMP("waiting for matlab to answer... (" + mod + ") " + getState() + "\n"); mod*=2; if (mod <=0) mod=Integer.MAX_VALUE; } } - mp.log("-- Requesting done\n"); + logMP("-- Requesting done\n"); // matlab is finished, answer is here //return null; return getAnswer(); // return to JE with answer @@ -115,7 +118,7 @@ public class MatlabEvalMediator { * For debugging, an integer ID for this run may be provided. */ public void run(int id) { - logMPSys("## MEM start run " + id); + logMPOrSysOut("## MEM start run " + id); runID=id; int k=0;int mod=25; while (!requesting && !isFinished() && !quit) { @@ -123,13 +126,13 @@ public class MatlabEvalMediator { if (sleepTime > 0) try { Thread.sleep(sleepTime); } catch(Exception e) {}; k++; if ((k%mod)==0) { - logMPSys("MEM waiting for JE to ask... (" + mod +") " + getState()); + logMPOrSysOut("MEM waiting for JE to ask... (" + mod +") " + getState()); mod*=2; if (mod<=0) mod = Integer.MAX_VALUE; } } - if (requesting) logMPSys("-- MEM Request arrived in MP thread " + runID); - else logMPSys("-- MEM finished or quit " + runID); + if (requesting) logMPOrSysOut("-- MEM Request arrived in MP thread " + runID); + else logMPOrSysOut("-- MEM finished or quit " + runID); // requesting is true, now finish and let Matlab work } @@ -140,12 +143,23 @@ public class MatlabEvalMediator { public void run() { run(0); } + + private void logMPOrSysOut(String msg) { +// System.out.println("Hurz OR"); + logMP(msg + "\n"); +// else System.out.println("MEM has no MP! " + msg); + } - private void logMPSys(String msg) { - if (mp!=null) mp.log(msg + "\n"); - else System.out.println("MEM has no MP! " + msg); + private void logMPAndSysOut(String msg) { +// System.out.println("Hurz AND"); +// logMP(msg + "\n"); +// System.out.println(msg); } + private void logMP(String msg) { + if (mp!=null) mp.log(msg + "\n"); + } + /** * Cancel waiting in any case. */ @@ -159,12 +173,12 @@ public class MatlabEvalMediator { * @return */ public Object getQuestion() { - mp.log("-- Question: " + BeanInspector.toString(question) + "\n"); + logMP("-- Question: " + BeanInspector.toString(question) + "\n"); return question; } double[] getAnswer() { - mp.log("-- mediator delivering " + BeanInspector.toString(answer) + "\n"); + logMP("-- mediator delivering " + BeanInspector.toString(answer) + "\n"); return answer; } @@ -174,11 +188,13 @@ public class MatlabEvalMediator { * @param y */ public void setAnswer(double[] y) { +// logMPAndSysOut("Synch requesting B setAnswer " + getState()); synchronized(requesting) { +// logMPAndSysOut("In Synch requesting B setAnswer " + getState()); if (!requesting) { String msg="Error: not in requesting state when answer arrived!!"; System.err.println(msg); - mp.log(msg); + logMP(msg); } // System.err.println("answer is " + BeanInspector.toString(y)); if (y==null) { @@ -187,20 +203,23 @@ public class MatlabEvalMediator { } answer = y; requesting = false; // answer is finished, break request loop - mp.log("-- setAnswer: " + BeanInspector.toString(y) + ", req state is " + requesting + "\n"); + logMP("-- setAnswer: " + BeanInspector.toString(y) + ", req state is " + requesting + "\n"); } +// logMPAndSysOut("Synch requesting B done " + getState()); } void setFinished(boolean val) { +// logMPAndSysOut("Synch fin " + getState()); synchronized (fin) { if (fin && val) { String msg="Error: already finished when setFinished(true) was called!"; System.err.println(msg); - if (mp!=null) mp.log(msg+"\n"); + logMP(msg); } fin = val; - logMPSys("MEM setFinished ok"); + logMPOrSysOut("MEM setFinished ok"); } +// logMPAndSysOut("Synch fin done " + getState()); } /** diff --git a/src/eva2/server/go/problems/MatlabProblem.java b/src/eva2/server/go/problems/MatlabProblem.java index c8c46dcb..11b9b70c 100644 --- a/src/eva2/server/go/problems/MatlabProblem.java +++ b/src/eva2/server/go/problems/MatlabProblem.java @@ -427,6 +427,7 @@ public class MatlabProblem extends AbstractOptimizationProblem implements Interf log("evaluating " + AbstractEAIndividual.getDefaultStringRepresentation(indy) + "\n"); double[] res = handler.requestEval(this, AbstractEAIndividual.getIndyData(indy)); log("evaluated to " + BeanInspector.toString(res) + "\n"); + log("Free mem is " + Runtime.getRuntime().freeMemory() + ", time is " + System.currentTimeMillis() + "\n"); indy.SetFitness(res); } diff --git a/src/eva2/server/go/problems/WaitForEvARunnable.java b/src/eva2/server/go/problems/WaitForEvARunnable.java index 76ba8f71..a3c5c2a3 100644 --- a/src/eva2/server/go/problems/WaitForEvARunnable.java +++ b/src/eva2/server/go/problems/WaitForEvARunnable.java @@ -44,7 +44,7 @@ class WaitForEvARunnable implements Runnable { mp.log("reported results.\n"); mp.notifyFinished(); mp.log("notified finish.\n"); - System.out.println("Optimization finished: " + mp.getInfoString()); + if (mp.verbosityLevel > 0) System.out.println("Optimization finished: " + mp.getInfoString()); } catch (Exception e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); diff --git a/src/eva2/tools/ReflectPackage.java b/src/eva2/tools/ReflectPackage.java index 1ca4529d..c06557c8 100644 --- a/src/eva2/tools/ReflectPackage.java +++ b/src/eva2/tools/ReflectPackage.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.lang.management.ManagementFactory; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -13,6 +14,9 @@ import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; +import javax.management.MBeanServer; +import javax.management.ObjectName; + import wsi.ra.tool.BasicResourceLoader; //import wsi.ra.tool.BasicResourceLoader; @@ -406,4 +410,36 @@ public class ReflectPackage { // System.out.println("classpath: " + classPath); return classPath.split(File.pathSeparator); } + + public static Object getHotspotMBean() { + MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + Object bean=null; + try { + bean = server.getObjectInstance(new ObjectName("com.sun.management:type=HotSpotDiagnostic")); + //bean = server.queryMBeans(null, null); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return bean; + } + + public static Object dumpHeap(String file, boolean live) { + MBeanServer server = ManagementFactory.getPlatformMBeanServer(); + Object ret=null; + try { +// void setVMOption(String name, String value) + //-Xrunhprof:heap=dump,format=b +// ret = server.invoke(new ObjectName("com.sun.management:type=HotSpotDiagnostic"), +// "setVMOption", new Object[]{"agentlib", "hprof=heap=dump,format=a"}, +// new String[] {"java.lang.String","java.lang.String"}); +// ret = server.invoke(new ObjectName("com.sun.management:type=HotSpotDiagnostic"), "getDiagnosticOptions", new Object[] {}, new String[] {}); + server.invoke(new ObjectName("com.sun.management:type=HotSpotDiagnostic"), "dumpHeap", new Object[]{file, live}, new String[] {"java.lang.String", "boolean"}); + //bean = server.queryMBeans(null, null); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return ret; + } } \ No newline at end of file