<br><br><div class="gmail_quote">On Wed, Jan 11, 2012 at 10:59, Caius Howcroft <span dir="ltr">&lt;<a href="mailto:caius.howcroft@gmail.com">caius.howcroft@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi everyone<br>
<br>
<br>
I&#39;m running 0.12 on a linux cluster here and generally it has been<br>
great. However, some users are complaining that their jobs crash<br>
periodically with messages like this:<br>
[IPClusterStart] [IPControllerApp] heartbeat::got bad heartbeat<br>
(possibly old?): 1326305300.61 (current=1326305302.613)<br>
[IPClusterStart] [IPControllerApp] heartbeat::heart<br>
&#39;8f9428e4-543f-4218-b7b3-b32d57caa496&#39; missed a beat, and took 1961.06<br>
ms to respond<br>
[IPClusterStart] [IPControllerApp] heartbeat::ignoring new heart:<br>
&#39;8f9428e4-543f-4218-b7b3-b32d57caa496&#39;<br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Generally this brings everything to halt. So my question is two fold:<br>
Firstly, I&#39;m pretty sure my machines are synced up well, so I dont<br>
think its anything I&#39;m doing. Has anyone had this same problem?<br></blockquote><div><br></div><div>I have never seen this myself, but I have heard of it from one other user. It is very hard to debug, as it often takes many hours to reproduce.  When this happens, an engine is treated as dead, even though it actually isn&#39;t.  One option is to increase the heartbeat timeout to something more like ten or thirty seconds (HeartbeatMonitor.period = 10000).  Note that this directly affects the amount of time it takes for the new engine registration process, because an engine is not deemed to be ready until its heart has started beating.</div>

<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Secondly, clearly at some point somewhere a machine is going to belly<br>
up and I want to make the processing robust to that. How do I<br>
configure LoadBalancedView to notice that a machine has gone bad and<br>
reassign jobs that were assigned to that machine? I notice that when<br>
we launch a set of jobs, they all get assigned to engines immediately,<br>
cI think I can change this by changing . c.TaskScheduler.hwm=1</blockquote><div><br></div><div>Yes, hwm=1 prevents any greedy scheduling of tasks at the expense of hiding</div><div>network latency behind computation time, and increasing load on the scheduler.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">, but<br>
how do I tell the task manager to reconfigure the load if a node goes<br>
bad or a job fails.<br></blockquote><div><br></div><div>Tasks can be resubmitted (explicitly requested from the client) or retried (handled inside the scheduler).</div><div>If the most likely cause of a task failure is not</div>

<div>that the task itself has a bug, then you can set `retries=1` or even 5 in the unlikely</div><div>event that it gets run on multiple engines that go down.  retries should not</div><div>be greater than the number of engines you have, because a task will *not* be</div>

<div>resubmitted to an engine where it failed.</div><div><br></div><div>You can set the default value for retries submitted with a given view:</div><div><br></div><div>lbview.retries = 5</div><div><br></div><div>Or you can set it for a single block with temp_flags:</div>

<div><br></div><div>with lbview.temp_flags(retries=5):</div><div>    lbview.apply(retrying_task)</div><div><br></div><div>One should be careful with this, because you can actually bring down your entire cluster by retrying</div>

<div>a segfaulting task too many times:</div><div><br></div><div><div>def segfault():</div><div>    &quot;&quot;&quot;This will crash a linux system; equivalent calls can be made on Windows or Mac&quot;&quot;&quot;</div>
<div>
    from ctypes import CDLL</div><div>    libc = CDLL(&quot;libc.so.6&quot;) </div><div>    libc.time(-1)  # BOOM!!</div></div><div><br></div><div>with lbview.temp_flags(retries=len(lbview.client.ids)):</div><div>    lbview.apply(segfault)</div>

<div><br></div><div>-MinRK</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Cheers<br>
<br>
Caius<br>
_______________________________________________<br>
IPython-User mailing list<br>
<a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
</blockquote></div><br>