]> granicus.if.org Git - php/commitdiff
Allow to configure php-fpm slow log trace callers limit
authorOleg Efimov <o.efimov@corp.badoo.com>
Tue, 6 Sep 2016 09:27:57 +0000 (12:27 +0300)
committerOleg Efimov <o.efimov@corp.badoo.com>
Tue, 6 Sep 2016 09:27:57 +0000 (12:27 +0300)
sapi/fpm/fpm/fpm_conf.c
sapi/fpm/fpm/fpm_conf.h
sapi/fpm/fpm/fpm_php_trace.c
sapi/fpm/www.conf.in

index b497d2c82c9473f0607c970c25887de8d4c2d587..c9a946155ae28722737f4fce89153dadef2c1687 100644 (file)
@@ -146,6 +146,7 @@ static struct ini_value_parser_s ini_fpm_pool_options[] = {
        { "access.format",             &fpm_conf_set_string,      WPO(access_format) },
        { "slowlog",                   &fpm_conf_set_string,      WPO(slowlog) },
        { "request_slowlog_timeout",   &fpm_conf_set_time,        WPO(request_slowlog_timeout) },
+       { "request_slowlog_trace_depth", &fpm_conf_set_integer,     WPO(request_slowlog_trace_depth) },
        { "request_terminate_timeout", &fpm_conf_set_time,        WPO(request_terminate_timeout) },
        { "rlimit_files",              &fpm_conf_set_integer,     WPO(rlimit_files) },
        { "rlimit_core",               &fpm_conf_set_rlimit_core, WPO(rlimit_core) },
@@ -970,6 +971,30 @@ static int fpm_conf_process_all_pools() /* {{{ */
                        }
                }
 
+               /* request_slowlog_trace_depth */
+               if (wp->config->request_slowlog_trace_depth) {
+#if HAVE_FPM_TRACE
+                       if (! (wp->config->slowlog && *wp->config->slowlog)) {
+                               zlog(ZLOG_ERROR, "[pool %s] 'slowlog' must be specified for use with 'request_slowlog_trace_depth'", wp->config->name);
+                               return -1;
+                       }
+#else
+                       static int warned = 0;
+
+                       if (!warned) {
+                               zlog(ZLOG_WARNING, "[pool %s] 'request_slowlog_trace_depth' is not supported on your system", wp->config->name);
+                               warned = 1;
+                       }
+#endif
+
+                       if (wp->config->request_slowlog_trace_depth <= 0) {
+                               zlog(ZLOG_ERROR, "[pool %s] 'request_slowlog_trace_depth' (%d) must be a positive value", wp->config->name, wp->config->request_slowlog_trace_depth);
+                               return -1;
+                       }
+               } else {
+                       wp->config->request_slowlog_trace_depth = 20;
+               }
+
                /* chroot */
                if (wp->config->chroot && *wp->config->chroot) {
 
@@ -1635,6 +1660,7 @@ static void fpm_conf_dump() /* {{{ */
                zlog(ZLOG_NOTICE, "\taccess.format = %s",              STR2STR(wp->config->access_format));
                zlog(ZLOG_NOTICE, "\tslowlog = %s",                    STR2STR(wp->config->slowlog));
                zlog(ZLOG_NOTICE, "\trequest_slowlog_timeout = %ds",   wp->config->request_slowlog_timeout);
+               zlog(ZLOG_NOTICE, "\trequest_slowlog_trace_depth = %d", wp->config->request_slowlog_trace_depth);
                zlog(ZLOG_NOTICE, "\trequest_terminate_timeout = %ds", wp->config->request_terminate_timeout);
                zlog(ZLOG_NOTICE, "\trlimit_files = %d",               wp->config->rlimit_files);
                zlog(ZLOG_NOTICE, "\trlimit_core = %d",                wp->config->rlimit_core);
index 540b22795df3404000cad88b7e90acf4ddd3933d..d56fcc4e78d217e332f867b628a2f8a6d8075111 100644 (file)
@@ -78,6 +78,7 @@ struct fpm_worker_pool_config_s {
        char *access_format;
        char *slowlog;
        int request_slowlog_timeout;
+       int request_slowlog_trace_depth;
        int request_terminate_timeout;
        int rlimit_files;
        int rlimit_core;
index e6482b63806e8c44e86a4d9e043a86c73892f0c4..2a3a570355a5b450e46170ff5edad58644239cf1 100644 (file)
@@ -42,7 +42,7 @@
 
 static int fpm_php_trace_dump(struct fpm_child_s *child, FILE *slowlog) /* {{{ */
 {
-       int callers_limit = 20;
+       int callers_limit = child->wp->config->request_slowlog_trace_depth;
        pid_t pid = child->pid;
        struct timeval tv;
        static const int buf_size = 1024;
index 394e27819d935a83b3334c5584c524e9f37ebe92..7a672b71be8a76d5232d8a4a781717ef499e3ab1 100644 (file)
@@ -322,6 +322,10 @@ pm.max_spare_servers = 3
 ; Default Value: 0
 ;request_slowlog_timeout = 0
 
+; Depth of slow log stack trace.
+; Default Value: 20
+;request_slowlog_trace_depth = 20
+
 ; The timeout for serving a single request after which the worker process will
 ; be killed. This option should be used when the 'max_execution_time' ini option
 ; does not stop script execution for some reason. A value of '0' means 'off'.