Hi Niphlod,
your replies are always a pleasure to me. :)
On Wednesday, November 2, 2016 at 12:00:48 PM UTC+1, Niphlod wrote:
>
> I'd say there are a LOT of strange things going on on your system, since
> you're reporting several different issues that nobody ever faced and all in
> the last week.
>
Concerning deadlocks and zombies - right? Both issues are faced within the
using the scheduler, not web2py in general. And only in cases I start more
than one worker.
zombie processes shouldn't be there unless you killed improperly a worker
> process.
> Python can't really do anything about it, and that's the way there's a
> specific API to kill (or terminate) a worker.
>
Your right, the killer is the scheduler himself. Why? The scheduler
terminates a task after passing the timeout. The timeout happened because
the task never does that as it is defined. In cases of zombie situation the
sub process is stopping with sem_wait() function (pstack). I don't know
way. But, it's happened before the function 'executor' entered, because of
no debug line printing at the entry point of that function.
Ok. That's all what I know. I have different RHEL systems (RH6,RH5) with
python 2.7.12 and MariaDB. Not realy exotic.
Thank you for your endurance
Erwn
>
> On Wednesday, November 2, 2016 at 10:53:58 AM UTC+1, Erwn Ltmann wrote:
>>
>> Dear all,
>>
>> I'm astonished about a lot of processes as sub process of scheduler
>> worker are not finished.
>>
>> pstree -p 16731
>>
>>>
>>> bash(16731)---python2.7(24545)-+-python2.7(24564)---{python2.7}(24565)
>>> |-python2.7(24572)-+-python2.7(1110)
>>> | |-python2.7(8647)
>>> | |-python2.7(11747)
>>> | |-python2.7(14117)
>>> | |-python2.7(14302)
>>>
>>
>> The 16731 is my shell I started the scheduler with four worker:
>>
>> w2p -K arm:ticker,arm,arm,arm
>>>
>>
>> The pid 24564 is the ticker worker (only hold the ticker) and 24572 one
>> of three standard worker which has to process my task's function.
>>
>> My first focus was on the function itself. But, if I clip the function
>> ('return True' at start point) the zombies were already there. My next
>> analyze step was to show the pid at the start point of 'executor' function
>> of scheduler.py. In case of zombie processes I never reach this debug
>> point. Next I printed out the list of zombie processes
>> (multiprocessing.active_children()) at the exit point of tasks which passed
>> the timeout (see function async). It's the point in the scheduler code
>> where 'task timeout' is printing out. The timeout is clear because of a
>> process which never returns a result. But, how is it possible?
>>
>> Here's the list of my extra debug line in function async's timeout part:
>>
>> 09:09:47.752 [24576] Process-4:488,
>>> 09:14:28.907 [24576] Process-4:488, Process-4:1125,
>>> 09:15:59.526 [24576] Process-4:488, Process-4:1125, Process-4:1301,
>>> 09:20:35.924 [24576] Process-4:488, Process-4:1880, Process-4:1125,
>>> Process-4:1301,
>>>
>>
>> Why did the 'executor' function never process the code?
>>
>> def async(self, task):
>>
>> ...
>>
>> out = multiprocessing.Queue()
>>> queue = multiprocessing.Queue(maxsize=1)
>>> p = multiprocessing.Process(target=executor, args=(queue, task, out))
>>
>> ...
>>> if p.is_alive():
>>> p.terminate()
>>> logger.debug(' +- Zombie (%s)' %
>>> multiprocessing.active_children())
>>>
>>
>> And here the extra line in executor:
>>
>> def executor(queue, task, out):
>>> """The function used to execute tasks in the background process."""
>>> logger.debug(' task started PID:%s -> %s' %
>>> (os.getppid(),os.getpid()))
>>
>> ...
>>>
>>
>> Of course, I have to stress the scheduler to become zombies. The rate is
>> 1 of 1000. In my case 25 times each hour!
>>
>> Can any body clarify this? May it's concerning pure python.
>>
>> Thx,
>> Erwn
>>
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.