From 8e7081f3ac10f5b215358f7e245c9da21ea47278 Mon Sep 17 00:00:00 2001 From: Lars Strojny Date: Sun, 26 Aug 2012 17:02:39 +0200 Subject: [PATCH] Merging PR 121 to add support for slow request counting on the PHP-FPM status page --- NEWS | 3 +++ sapi/fpm/fpm/fpm_php_trace.c | 2 ++ sapi/fpm/fpm/fpm_process_ctl.c | 8 ++++---- sapi/fpm/fpm/fpm_request.c | 4 ++-- sapi/fpm/fpm/fpm_scoreboard.c | 5 ++++- sapi/fpm/fpm/fpm_scoreboard.h | 3 ++- sapi/fpm/fpm/fpm_sockets.c | 2 +- sapi/fpm/fpm/fpm_status.c | 13 +++++++++---- 8 files changed, 27 insertions(+), 13 deletions(-) diff --git a/NEWS b/NEWS index b7753d68dd..f5b5fe05f6 100644 --- a/NEWS +++ b/NEWS @@ -57,6 +57,9 @@ PHP NEWS . Fixed bug #62836 (Seg fault or broken object references on unserialize()). (Laruence) +- FPM: + . Merged PR 121 by minitux to add support for slow request counting on PHP + FPM status page. (Lars) 16 Aug 2012, PHP 5.4.6 diff --git a/sapi/fpm/fpm/fpm_php_trace.c b/sapi/fpm/fpm/fpm_php_trace.c index cd97aebb33..d95d66a754 100644 --- a/sapi/fpm/fpm/fpm_php_trace.c +++ b/sapi/fpm/fpm/fpm_php_trace.c @@ -26,6 +26,7 @@ #include "fpm_children.h" #include "fpm_worker_pool.h" #include "fpm_process_ctl.h" +#include "fpm_scoreboard.h" #include "zlog.h" @@ -137,6 +138,7 @@ static int fpm_php_trace_dump(struct fpm_child_s *child, FILE *slowlog TSRMLS_DC void fpm_php_trace(struct fpm_child_s *child) /* {{{ */ { TSRMLS_FETCH(); + fpm_scoreboard_update(0, 0, 0, 0, 0, 0, 1, FPM_SCOREBOARD_ACTION_SET, child->wp->scoreboard); FILE *slowlog; zlog(ZLOG_NOTICE, "about to trace %d", (int) child->pid); diff --git a/sapi/fpm/fpm/fpm_process_ctl.c b/sapi/fpm/fpm/fpm_process_ctl.c index 7840d17f8b..76ea4d358e 100644 --- a/sapi/fpm/fpm/fpm_process_ctl.c +++ b/sapi/fpm/fpm/fpm_process_ctl.c @@ -353,7 +353,7 @@ static void fpm_pctl_perform_idle_server_maintenance(struct timeval *now) /* {{{ #endif } } - fpm_scoreboard_update(idle, active, cur_lq, -1, -1, -1, FPM_SCOREBOARD_ACTION_SET, wp->scoreboard); + fpm_scoreboard_update(idle, active, cur_lq, -1, -1, -1, 0, FPM_SCOREBOARD_ACTION_SET, wp->scoreboard); /* this is specific to PM_STYLE_ONDEMAND */ if (wp->config->pm == PM_STYLE_ONDEMAND) { @@ -388,7 +388,7 @@ static void fpm_pctl_perform_idle_server_maintenance(struct timeval *now) /* {{{ if (idle < wp->config->pm_min_spare_servers) { if (wp->running_children >= wp->config->pm_max_children) { if (!wp->warn_max_children) { - fpm_scoreboard_update(0, 0, 0, 0, 0, 1, FPM_SCOREBOARD_ACTION_INC, wp->scoreboard); + fpm_scoreboard_update(0, 0, 0, 0, 0, 1, 0, FPM_SCOREBOARD_ACTION_INC, wp->scoreboard); zlog(ZLOG_WARNING, "[pool %s] server reached pm.max_children setting (%d), consider raising it", wp->config->name, wp->config->pm_max_children); wp->warn_max_children = 1; } @@ -407,7 +407,7 @@ static void fpm_pctl_perform_idle_server_maintenance(struct timeval *now) /* {{{ children_to_fork = MIN(children_to_fork, wp->config->pm_max_children - wp->running_children); if (children_to_fork <= 0) { if (!wp->warn_max_children) { - fpm_scoreboard_update(0, 0, 0, 0, 0, 1, FPM_SCOREBOARD_ACTION_INC, wp->scoreboard); + fpm_scoreboard_update(0, 0, 0, 0, 0, 1, 0, FPM_SCOREBOARD_ACTION_INC, wp->scoreboard); zlog(ZLOG_WARNING, "[pool %s] server reached pm.max_children setting (%d), consider raising it", wp->config->name, wp->config->pm_max_children); wp->warn_max_children = 1; } @@ -511,7 +511,7 @@ void fpm_pctl_on_socket_accept(struct fpm_event_s *ev, short which, void *arg) / if (wp->running_children >= wp->config->pm_max_children) { if (!wp->warn_max_children) { - fpm_scoreboard_update(0, 0, 0, 0, 0, 1, FPM_SCOREBOARD_ACTION_INC, wp->scoreboard); + fpm_scoreboard_update(0, 0, 0, 0, 0, 1, 0, FPM_SCOREBOARD_ACTION_INC, wp->scoreboard); zlog(ZLOG_WARNING, "[pool %s] server reached max_children setting (%d), consider raising it", wp->config->name, wp->config->pm_max_children); wp->warn_max_children = 1; } diff --git a/sapi/fpm/fpm/fpm_request.c b/sapi/fpm/fpm/fpm_request.c index 28332d0a92..bf431a08d0 100644 --- a/sapi/fpm/fpm/fpm_request.c +++ b/sapi/fpm/fpm/fpm_request.c @@ -54,7 +54,7 @@ void fpm_request_accepting() /* {{{ */ fpm_scoreboard_proc_release(proc); /* idle++, active-- */ - fpm_scoreboard_update(1, -1, 0, 0, 0, 0, FPM_SCOREBOARD_ACTION_INC, NULL); + fpm_scoreboard_update(1, -1, 0, 0, 0, 0, 0, FPM_SCOREBOARD_ACTION_INC, NULL); } /* }}} */ @@ -98,7 +98,7 @@ void fpm_request_reading_headers() /* {{{ */ fpm_scoreboard_proc_release(proc); /* idle--, active++, request++ */ - fpm_scoreboard_update(-1, 1, 0, 0, 1, 0, FPM_SCOREBOARD_ACTION_INC, NULL); + fpm_scoreboard_update(-1, 1, 0, 0, 1, 0, 0, FPM_SCOREBOARD_ACTION_INC, NULL); } /* }}} */ diff --git a/sapi/fpm/fpm/fpm_scoreboard.c b/sapi/fpm/fpm/fpm_scoreboard.c index 4222f6037c..24463a90dd 100644 --- a/sapi/fpm/fpm/fpm_scoreboard.c +++ b/sapi/fpm/fpm/fpm_scoreboard.c @@ -73,7 +73,7 @@ int fpm_scoreboard_init_main() /* {{{ */ } /* }}} */ -void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int action, struct fpm_scoreboard_s *scoreboard) /* {{{ */ +void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int slow_rq, int action, struct fpm_scoreboard_s *scoreboard) /* {{{ */ { if (!scoreboard) { scoreboard = fpm_scoreboard; @@ -110,6 +110,9 @@ void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int request if (max_children_reached >= 0) { scoreboard->max_children_reached = max_children_reached; } + if (slow_rq > 0) { + scoreboard->slow_rq += slow_rq; + } } else { if (scoreboard->idle + idle > 0) { scoreboard->idle += idle; diff --git a/sapi/fpm/fpm/fpm_scoreboard.h b/sapi/fpm/fpm/fpm_scoreboard.h index 136ea481a4..f58a28737d 100644 --- a/sapi/fpm/fpm/fpm_scoreboard.h +++ b/sapi/fpm/fpm/fpm_scoreboard.h @@ -64,13 +64,14 @@ struct fpm_scoreboard_s { unsigned int lq_len; unsigned int nprocs; int free_proc; + unsigned long int slow_rq; struct fpm_scoreboard_proc_s *procs[]; }; int fpm_scoreboard_init_main(); int fpm_scoreboard_init_child(struct fpm_worker_pool_s *wp); -void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int action, struct fpm_scoreboard_s *scoreboard); +void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int slow_rq, int action, struct fpm_scoreboard_s *scoreboard); struct fpm_scoreboard_s *fpm_scoreboard_get(); struct fpm_scoreboard_proc_s *fpm_scoreboard_proc_get(struct fpm_scoreboard_s *scoreboard, int child_index); diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c index f56b9cfbd1..76759e7f25 100644 --- a/sapi/fpm/fpm/fpm_sockets.c +++ b/sapi/fpm/fpm/fpm_sockets.c @@ -356,7 +356,7 @@ int fpm_sockets_init_main() /* {{{ */ } if (wp->listen_address_domain == FPM_AF_INET && fpm_socket_get_listening_queue(wp->listening_socket, NULL, &lq_len) >= 0) { - fpm_scoreboard_update(-1, -1, -1, (int)lq_len, -1, -1, FPM_SCOREBOARD_ACTION_SET, wp->scoreboard); + fpm_scoreboard_update(-1, -1, -1, (int)lq_len, -1, -1, 0, FPM_SCOREBOARD_ACTION_SET, wp->scoreboard); } } diff --git a/sapi/fpm/fpm/fpm_status.c b/sapi/fpm/fpm/fpm_status.c index 5f2c852c7d..b9b9a8c0b6 100644 --- a/sapi/fpm/fpm/fpm_status.c +++ b/sapi/fpm/fpm/fpm_status.c @@ -158,6 +158,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "total processes%d\n" "max active processes%d\n" "max children reached%u\n" + "slow requests%lu\n" "\n"; if (!full) { @@ -228,7 +229,8 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "%d\n" "%d\n" "%d\n" - "%u\n"; + "%u\n" + "%lu\n"; if (!full) { short_post = ""; @@ -277,7 +279,8 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "\"active processes\":%d," "\"total processes\":%d," "\"max active processes\":%d," - "\"max children reached\":%u"; + "\"max children reached\":%u," + "\"slow requests\":%lu"; if (!full) { short_post = "}"; @@ -326,7 +329,8 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "active processes: %d\n" "total processes: %d\n" "max active processes: %d\n" - "max children reached: %u\n"; + "max children reached: %u\n" + "slow requests: %lu\n"; if (full) { full_syntax = @@ -367,7 +371,8 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ scoreboard.active, scoreboard.idle + scoreboard.active, scoreboard.active_max, - scoreboard.max_children_reached); + scoreboard.max_children_reached, + scoreboard.slow_rq); PUTS(buffer); efree(buffer); -- 2.40.0