Req #52569 [Com]: Implement "ondemand" process-manager (to allow zero children)
| From: | fat@php.net | Date: | Wed, 06 Jul 2011 16:12:35 +0000 |
| Subject: | Req #52569 [Com]: Implement "ondemand" process-manager (to allow zero children) | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-161664@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=52569&edit=1
ID: 52569
Comment by: fat@php.net
Reported by: mplomer at gmx dot de
Summary: Implement "ondemand" process-manager (to allow zero
children)
Status: Analyzed
Type: Feature/Change Request
Package: FPM related
PHP Version: 5.3.3
Assigned To: fat
Block user comment: N
Private report: N
New Comment:
This is normal.
the ONDEMAND pm has been made to avoid forking unnecessary children. Children are forked when
requests arrives.
Here is what I have on my side:
## conf:
pm = ondemand
pm.process_idle_timeout = 10
pm.min_delay_between_fork = 10000 # this to avoid the known bug
pm.max_children = 5
## log
[06-Jul-2011 18:05:42.236929] NOTICE: pid 2579, fpm_event_loop(), line 267: ready to handle
connections
[06-Jul-2011 18:05:43.237287] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 0 spare children
## at start, no children have been forked
[06-Jul-2011 18:05:44.237661] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 0 spare children
## I request a page and a child is forked to serve the page
[06-Jul-2011 18:05:44.902976] DEBUG: pid 2579, fpm_children_make(), line 411: [pool direct] child
2580 started
[06-Jul-2011 18:05:44.902987] DEBUG: pid 2579, fpm_pctl_on_socket_accept(), line 543: [pool direct]
got accept without idle child available .... I forked, now=1970813.831429
[06-Jul-2011 18:05:45.238081] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:46.238388] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:47.238889] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:48.239385] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:49.239671] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:50.240080] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:51.240520] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:52.241133] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:53.241648] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:54.242040] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
[06-Jul-2011 18:05:55.242414] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 1 spare children
## 10s (pm.process_idle_timeout) later, the child has been killed.
[06-Jul-2011 18:05:55.243492] DEBUG: pid 2579, fpm_got_signal(), line 76: received SIGCHLD
[06-Jul-2011 18:05:55.243514] DEBUG: pid 2579, fpm_children_bury(), line 254: [pool direct] child
2580 has been killed by the process managment after 10.340552 seconds from start
[06-Jul-2011 18:05:56.242905] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 0 spare children
[06-Jul-2011 18:05:57.243332] DEBUG: pid 2579, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool direct] currently 0 active children, 0 spare children
Previous Comments:
------------------------------------------------------------------------
[2011-07-06 10:44:25] dbetz at df dot eu
Hi Jerome,
what config options must i have in php-fpm.conf to get this working ?
I have tried following:
pm = ondemand
pm.min_spare_servers = 1
pm.max_children = 2000
pm.process_idle_timeout = 10s
pm.min_delay_between_fork = 100
but no child starts for this pool:
[06-Jul-2011 16:32:31.031068] DEBUG: pid 3417, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool default] currently 0 active children, 0 spare children
[06-Jul-2011 16:32:32.031349] DEBUG: pid 3417, fpm_pctl_perform_idle_server_maintenance(), line 362:
[pool default] currently 0 active children, 0 spare children
greets,
daniel
------------------------------------------------------------------------
[2011-07-05 19:15:08] fat@php.net
I've upload 2 new versions of the patch for the ondemand PM:
1- fpm-ondemand.v7.patch applies to 5.4 SVN branch and trunk
2- fpm-ondemand.v7-5.3.patch applies to 5.3 SVN branch
it works except that the event is triggered more than once when a request is
coming. This makes the ondemand PM to fork more than it should do.
I'll look into that but if you have an idea, don't keep it for yourself.
Can you please test it ?
thx
++ jerome
------------------------------------------------------------------------
[2011-07-05 19:12:10] fat@php.net
The following patch has been added/updated:
Patch Name: fpm-ondemand.v7-5.3.patch
Revision: 1309907530
URL: https://bugs.php.net/patch-display.php?bug=52569&patch=fpm-ondemand.v7-5.3.patch&revision=1309907530
------------------------------------------------------------------------
[2011-07-05 19:08:22] fat@php.net
The following patch has been added/updated:
Patch Name: fpm-ondemand.v7.patch
Revision: 1309907302
URL: https://bugs.php.net/patch-display.php?bug=52569&patch=fpm-ondemand.v7.patch&revision=1309907302
------------------------------------------------------------------------
[2011-06-11 10:38:18] mplomer at gmx dot de
Unfortunately not, as libevent was removed from FPM in PHP 5.3.4, the patch has to be ported to the
new simple mini event library. If you are interested to do the port and you are familar with C you
are welcome, and I can give you a quick starting point.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=52569
--
Edit this bug report at https://bugs.php.net/bug.php?id=52569&edit=1