This makes Mathematica (and often the OS too) completely unresponsive
for a long time. In this case my only hope is that in spite of the
system unresponsiveness I can manage to kill the kernel, so that I can
at least save the notebook ...
Is there any way to prevent swapping, for example by putting a cap on
the kernel's memory use? Even if the kernel just quits when it runs out
of memory, I still have the notebook. But if the computer gets so
unresponsive that I have to restart it, then I lose the notebook too,
which is a much more serious loss ...
I tried using MemoryConstrained (with $Pre), but it seems to constrain
only the memory used by current computation, not the full kernel memory use.
To summarize: I'm simply looking for a way to prevent the computer from
locking up because of excessive swapping.
How about this:
In[1] =
ClearAll[totalMemoryConstrained];
SetAttributes[totalMemoryConstrained, HoldRest];
Module[{memException},
totalMemoryConstrained[max_, body_, failexpr_] :=
Catch[MemoryConstrained[body,
Evaluate[
If[# < 0, Throw[failexpr, memException], #] &@(max -
MemoryInUse[])], failexpr], memException]];
To test, I start with a fresh kernel:
In[2] = MemoryInUse[]
Out[2] = 5815968
In[3] =
n = 0;
lst = {};
totalMemoryConstrained[10000000,
For[lst = {}; n = 10000, n < 100000, n++,
lst = Join[lst, Range[n]]], Print[n]]
Out[3] = 10043 (Printed)
In[4] = MemoryInUse[]
Out[4] = 8257328
I deliberately use globals to prevent them from being garbage-collected
after the function returns.
Now take a limit smaller than the current usage:
In[5] =
n = 0;
lst = {};
totalMemoryConstrained[3000000,
For[lst = {}; n = 10000, n < 100000, n++,
lst = Join[lst, Range[n]]], Print[n]]
Out[3] = 0 (Printed)
- we just stop right away (through exception, obviously).
This of course relies on how often does MemoryConstrained[]
recompute its parameters, and how precise is MemoryInUse[].
My simple tests indicated that it works, up to plus-minus a few
Mb, but obviously more tests are needed.
Regards,
Leonid
2009/5/16 Szabolcs Horv=E1t <szho...@gmail.com>
What OS ?
WinXP on a laptop (i.e. slow hard drive).