Greetings,
Ralf
> On Sep 6, 2013, at 10:06 AM, Sean Luke wrote:
>
>> I think a better approach would be to use the thread pool rather than keeping the threads static like this. But it'll take a while to whip it up.
>>
>> Sean
>>
>> On Sep 6, 2013, at 9:43 AM, Ralf Buschermöhle wrote:
>>
>>> Hi,
>>>
>>> A little ... more elegant & less performance consuming solution was to change writeLoop() and return 'false' when waitOnMonitor returns one (receiving an interrupt):
>>>
>>> boolean writeLoop()
>>> {
>>> Job job = null;
>>>
>>> try
>>> {
>>> synchronized(jobs)
>>> {
>>> // check for an unsent job
>>> if ((job = oldestUnsentJob()) == null) // automatically marks as sent
>>> {
>>> // failed -- wait and drop out of the loop and come in again
>>> debug("" + Thread.currentThread().getName() + "Waiting for a job to send" );
>>> if (!slaveMonitor.waitOnMonitor(jobs)) // changed
>>> return false; // new
>>> }
>>> ...
>>>
>>> Avoiding a busy waiting ... writer.isInterrupted ... of the previous version.
>>>
>>> Ralf
>>>
>>> On Sep 6, 2013, at 14:41, Ralf Buschermöhle <[log in to unmask]> wrote:
>>>
>>>> Hi,
>>>>
>>>> I added "!writer.isInterrupted()" to stop the (write)loop and now the threads are stopped.
>>>>
>>>> In context "SlaveConnection.java"
>>>>
>>>> writer = new Thread()
>>>> {
>>>> public void run()
>>>> {
>>>> while( !writer.isInterrupted() )
>>>> writeLoop();
>>>> }
>>>> };
>>>>
>>>> Greetings,
>>>>
>>>> Ralf
>>>>
>>>> On Sep 6, 2013, at 11:59, Ralf Buschermöhle <[log in to unmask]> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> unfortunately adding memory does not solve the problem.
>>>>>
>>>>> It does not seem to be heap related ... I jstacked after 56 slaves, after 500 adding and removing (also waited for the disconnect messages) slaves and after the next 500 I received the Exception.
>>>>>
>>>>> And the number of threads did not reduce after waiting.
>>>>>
>>>>> I attached the thread dumps.
>>>>>
>>>>> It's the slaveMonitor ... who does not receive an interrupt?
>>>>>
>>>>> public boolean waitOnMonitor(Object monitor)
>>>>> {
>>>>> try
>>>>> {
>>>>> monitor.wait();
>>>>> }
>>>>> catch (InterruptedException e) { return false; }
>>>>> return true;
>>>>> }
>>>>>
>>>>> Greetings,
>>>>>
>>>>> Ralf
>>>>>
>>>>>
>>>>> <56.stack><56+-500.stack>
>>>>>
>>>>>
>>>>
>>>
>