Timeout issue (memory leak?)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Timeout issue (memory leak?)

Maxime Deforet
Hi all,
I’m facing an issue with MM 1.4.23, on a Windows7 64bits.
I’m running a timelapse on a NikonTI from a script (see the script at the end of this message). I use the regular openAcquisition to run an MDA (multichannel, multiposition), but on top of that, I run a “fast acquisition” (using popNextTaggedImage) for all positions in one channel.
It runs smoothly for several rounds, but then it stops. The error message involves a timeout issue with the XY stage. When I try to run the script again, it throws the same error. The whole system is very slow. I cannot quit MM, I need to kill it.
The log shows the error below. I suspect a memory leak that makes the whole system very slow, hence the timeout issue. I can make the whole log available if needed (it is a huge file, like 300MB).
Do I do something wrong in the script?

Thanks for your help!
Max

2019-05-15T18:31:38.661059 tid3660 [IFO,App] EDTHangLogger: Event handling has exceeded at least 1000 ms (currently 5500 ms since heartbeat timebase)
                                   [       ] Stack traces follow (note: thread states queried later than stack traces)
                                   [       ] Thread 2 [Reference Handler] WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at java.lang.Object.wait(Object.java:485)
                                   [       ]   at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
                                   [       ] Thread 3 [Finalizer] WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at java.lang.ref.ReferenceQueue.remove(Unknown Source)
                                   [       ]   at java.lang.ref.ReferenceQueue.remove(Unknown Source)
                                   [       ]   at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
                                   [       ] Thread 4 [Signal Dispatcher] RUNNABLE
                                   [       ] Thread 5 [Attach Listener] RUNNABLE
                                   [       ] Thread 10 [Java2D Disposer] WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at java.lang.ref.ReferenceQueue.remove(Unknown Source)
                                   [       ]   at java.lang.ref.ReferenceQueue.remove(Unknown Source)
                                   [       ]   at sun.java2d.Disposer.run(Unknown Source)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 11 [AWT-Shutdown] WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at java.lang.Object.wait(Object.java:485)
                                   [       ]   at sun.awt.AWTAutoShutdown.run(Unknown Source)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 12 [AWT-Windows] RUNNABLE
                                   [       ]   at sun.awt.windows.WToolkit.eventLoop(Native Method)
                                   [       ]   at sun.awt.windows.WToolkit.run(Unknown Source)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 15 [Run$_AWT-EventQueue-0] RUNNABLE
                                   [       ]   at mmcorej.MMCoreJJNI.CMMCore_getPosition__SWIG_0(Native Method)
                                   [       ]   at mmcorej.CMMCore.getPosition(CMMCore.java:1190)
                                   [       ]   at org.micromanager.positionlist.PositionListDlg.refreshCurrentPosition(PositionListDlg.java:765)
                                   [       ]   at org.micromanager.positionlist.PositionListDlg.access$300(PositionListDlg.java:76)
                                   [       ]   at org.micromanager.positionlist.PositionListDlg$20.run(PositionListDlg.java:743)
                                   [       ]   at java.awt.event.InvocationEvent.dispatch(Unknown Source)
                                   [       ]   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
                                   [       ]   at java.awt.EventQueue.access$000(Unknown Source)
                                   [       ]   at java.awt.EventQueue$1.run(Unknown Source)
                                   [       ]   at java.awt.EventQueue$1.run(Unknown Source)
                                   [       ]   at java.security.AccessController.doPrivileged(Native Method)
                                   [       ]   at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
                                   [       ]   at java.awt.EventQueue.dispatchEvent(Unknown Source)
                                   [       ]   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
                                   [       ]   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
                                   [       ]   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
                                   [       ]   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                                   [       ]   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
                                   [       ]   at java.awt.EventDispatchThread.run(Unknown Source)
                                   [       ] Thread 18 [DestroyJavaVM] RUNNABLE
                                   [       ] Thread 20 [TimerQueue] WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at javax.swing.TimerQueue.run(Unknown Source)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 21 [EDTHangLogger timer] RUNNABLE
                                   [       ]   at java.lang.Thread.dumpThreads(Native Method)
                                   [       ]   at java.lang.Thread.getAllStackTraces(Unknown Source)
                                   [       ]   at org.micromanager.diagnostics.EDTHangLogger.checkForHang(EDTHangLogger.java:233)
                                   [       ]   at org.micromanager.diagnostics.EDTHangLogger.access$200(EDTHangLogger.java:34)
                                   [       ]   at org.micromanager.diagnostics.EDTHangLogger$4.run(EDTHangLogger.java:220)
                                   [       ]   at java.util.TimerThread.mainLoop(Unknown Source)
                                   [       ]   at java.util.TimerThread.run(Unknown Source)
                                   [       ] Thread 23 [D3D Screen Updater] TIMED_WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at sun.java2d.d3d.D3DScreenUpdateManager.run(Unknown Source)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 24 [Thread-5] TIMED_WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at bsh.util.JConsole$BlockingPipedInputStream.read(Unknown Source)
                                   [       ]   at java.io.PipedInputStream.read(Unknown Source)
                                   [       ]   at java.io.InputStream.read(Unknown Source)
                                   [       ]   at bsh.util.JConsole.inPipeWatcher(Unknown Source)
                                   [       ]   at bsh.util.JConsole.run(Unknown Source)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 25 [BeanShell interpreter] TIMED_WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at java.io.PipedInputStream.read(Unknown Source)
                                   [       ]   at java.io.PipedInputStream.read(Unknown Source)
                                   [       ]   at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
                                   [       ]   at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
                                   [       ]   at sun.nio.cs.StreamDecoder.read(Unknown Source)
                                   [       ]   at java.io.InputStreamReader.read(Unknown Source)
                                   [       ]   at bsh.JavaCharStream.FillBuff(Unknown Source)
                                   [       ]   at bsh.JavaCharStream.ReadByte(Unknown Source)
                                   [       ]   at bsh.JavaCharStream.readChar(Unknown Source)
                                   [       ]   at bsh.JavaCharStream.BeginToken(Unknown Source)
                                   [       ]   at bsh.ParserTokenManager.getNextToken(Unknown Source)
                                   [       ]   at bsh.Parser.jj_ntk(Unknown Source)
                                   [       ]   at bsh.Parser.Line(Unknown Source)
                                   [       ]   at bsh.Interpreter.Line(Unknown Source)
                                   [       ]   at bsh.Interpreter.run(Unknown Source)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 42 [Metadata update] WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at java.lang.Object.wait(Object.java:485)
                                   [       ]   at java.util.TimerThread.mainLoop(Unknown Source)
                                   [       ]   at java.util.TimerThread.run(Unknown Source)
                                   [       ] Thread 2378 [Swing-Shell] WAITING
                                   [       ]   at sun.misc.Unsafe.park(Native Method)
                                   [       ]   at java.util.concurrent.locks.LockSupport.park(Unknown Source)
                                   [       ]   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
                                   [       ]   at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
                                   [       ]   at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
                                   [       ]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
                                   [       ]   at sun.awt.shell.Win32ShellFolderManager2$ComInvoker$3.run(Unknown Source)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 7438 [Thread-7381] RUNNABLE
                                   [       ]   at mmcorej.MMCoreJJNI.CMMCore_waitForDevice(Native Method)
                                   [       ]   at mmcorej.CMMCore.waitForDevice(CMMCore.java:566)
                                   [       ]   at org.micromanager.api.MultiStagePosition.goToPosition(MultiStagePosition.java:240)
                                   [       ]   at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source)
                                   [       ]   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                                   [       ]   at java.lang.reflect.Method.invoke(Unknown Source)
                                   [       ]   at bsh.Reflect.invokeMethod(Unknown Source)
                                   [       ]   at bsh.Reflect.invokeObjectMethod(Unknown Source)
                                   [       ]   at bsh.Name.invokeMethod(Unknown Source)
                                   [       ]   at bsh.BSHMethodInvocation.eval(Unknown Source)
                                   [       ]   at bsh.BSHPrimaryExpression.eval(Unknown Source)
                                   [       ]   at bsh.BSHPrimaryExpression.eval(Unknown Source)
                                   [       ]   at bsh.BSHBlock.evalBlock(Unknown Source)
                                   [       ]   at bsh.BSHBlock.eval(Unknown Source)
                                   [       ]   at bsh.BSHBlock.eval(Unknown Source)
                                   [       ]   at bsh.BSHForStatement.eval(Unknown Source)
                                   [       ]   at bsh.BSHBlock.evalBlock(Unknown Source)
                                   [       ]   at bsh.BSHBlock.eval(Unknown Source)
                                   [       ]   at bsh.BSHBlock.eval(Unknown Source)
                                   [       ]   at bsh.BSHForStatement.eval(Unknown Source)
                                   [       ]   at bsh.Interpreter.eval(Unknown Source)
                                   [       ]   at bsh.Interpreter.eval(Unknown Source)
                                   [       ]   at bsh.Interpreter.eval(Unknown Source)
                                   [       ]   at org.micromanager.script.BeanshellEngine$EvalThread.run(BeanshellEngine.java:34)
                                   [       ] Thread 7439 [Thread-7382] WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at java.lang.Thread.join(Unknown Source)
                                   [       ]   at java.lang.Thread.join(Unknown Source)
                                   [       ]   at org.micromanager.script.BeanshellEngine.joinEvalThread(BeanshellEngine.java:89)
                                   [       ]   at org.micromanager.script.ScriptPanel$15.run(ScriptPanel.java:1028)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 7462 [VirtualAcquisitionDisplay display thread] TIMED_WAITING
                                   [       ]   at sun.misc.Unsafe.park(Native Method)
                                   [       ]   at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
                                   [       ]   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
                                   [       ]   at java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source)
                                   [       ]   at org.micromanager.imagedisplay.VirtualAcquisitionDisplay$1.run(VirtualAcquisitionDisplay.java:206)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 7465 [zSelector] WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at java.lang.Object.wait(Object.java:485)
                                   [       ]   at ij.gui.StackWindow.run(StackWindow.java:209)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 7466 [pool-6-thread-1] WAITING
                                   [       ]   at sun.misc.Unsafe.park(Native Method)
                                   [       ]   at java.util.concurrent.locks.LockSupport.park(Unknown Source)
                                   [       ]   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
                                   [       ]   at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
                                   [       ]   at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
                                   [       ]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
                                   [       ]   at java.lang.Thread.run(Unknown Source)
                                   [       ] Thread 21729 [Timer-6975] WAITING
                                   [       ]   at java.lang.Object.wait(Native Method)
                                   [       ]   at java.lang.Object.wait(Object.java:485)
                                   [       ]   at java.util.TimerThread.mainLoop(Unknown Source)
                                   [       ]   at java.util.TimerThread.run(Unknown Source)


Script:

import org.micromanager.api.AcquisitionOptions;
import org.micromanager.navigation;
import java.lang.System;
import ij;
import java.io.File;

// clear all previous acquisitions
gui.closeAllAcquisitions();
gui.clearMessageWindow();

// file locations
acqName = "acq-slow";
acqNamefast = "acq-fast";
rootDirNameSlow = "E:/Data/slow";
rootDirNameFast = "E:/Data/fast";

// parameters
numFrames = 96;
String[] channels = {"Brightfield", "Red"};
Color[] colors = {Color.WHITE,  Color.RED};
int[] exposures = {10, 800};
numSlices = 1;
intervalMs = 30*60*1000;
numframes_stream = 100;

channelGroup = "Light channel";
show = true;
save = true;
deviceName = mmc.getCameraDevice();
pl = gui.getPositionList();
numPositions = pl.getNumberOfPositions();

// acquisition and set options
gui.openAcquisition(acqName, rootDirNameSlow, numFrames, channels.length, numSlices, numPositions, show, save);
for (int i=0; i<colors.length; i++)
    gui.setChannelColor(acqName, i, colors[i]);
for (int i=0; i<channels.length; i++)
   gui.setChannelName(acqName, i, channels[i]);
                 
// start timelapse
for (int i=0; i<numFrames; i++) {
        reStart = System.currentTimeMillis();


        for (p=1; p-1 < numPositions; p++) {
                print(p);
            mp = pl.getPosition(p-1);
            mp.goToPosition(mp, mmc);
                 mmc.fullFocus();
                // slow acquisition on channel gfp and red
           for (int c=1; c-1<channels.length; c++) {
           
                        acqName = "acq-slow";

              gui.message("Acquiring frame " + i + ", channel " + channels[c-1] + ".");
              mmc.setExposure(exposures[c-1]);
              mmc.setConfig(channelGroup, channels[c-1]);
              mmc.waitForConfig(channelGroup, channels[c-1]);
              gui.snapAndAddImage(acqName, i, c-1, 0, p);
           }

                // fast acquisition on channel Red
                mmc.setExposure(100);
           mmc.setConfig(channelGroup, "Red");
           mmc.waitForConfig(channelGroup, "Red");
               
                width = (int) mmc.getImageWidth();
                height = (int) mmc.getImageHeight();
                bytesPerPixel = (int) mmc.getBytesPerPixel();
                bitDepth = (int) mmc.getImageBitDepth();
                DirNameFast = rootDirNameFast + "/pos" + p + "/" + i;
        acqNamefast = "acq-fast";
                gui.openAcquisition("acq-fast", DirNameFast,
            numframes_stream, 0, 0, 0,
          /* show */ false,
          /* save */ true);
                gui.initializeAcquisition(acqNamefast, width, height, bytesPerPixel, bitDepth);
                mmc.startSequenceAcquisition(numframes_stream, 0, true);
                frame = 0;
                exposureMs = mmc.getExposure();
                while (mmc.getRemainingImageCount() > 0 || mmc.isSequenceRunning(deviceName)) {
           if (mmc.getRemainingImageCount() > 0) {
              img = mmc.popNextTaggedImage();
              gui.addImageToAcquisition(acqNamefast, frame, 0, 0, 0, img);
              frame++;
           }
           else {
                      mmc.sleep(Math.min(0.5 * exposureMs, 20));
           }
                }
                mmc.stopSequenceAcquisition();
                gui.closeAcquisition(acqNamefast);
        }
  itTook = System.currentTimeMillis() - reStart;
  if (itTook > intervalMs){
  print("Interval too short!");
  }
  if (itTook < intervalMs){
  gui.message("Waiting next iteration");
  gui.sleep(intervalMs - itTook);
  }
}
mmc.waitForSystem();
gui.message("Experiment done.");




_______________________________________________
micro-manager-general mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/micro-manager-general