httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r..@apache.org
Subject cvs commit: httpd-2.0/docs/conf httpd-std.conf
Date Tue, 16 Oct 2001 04:02:28 GMT
rbb         01/10/15 21:02:28

  Modified:    .        CHANGES
               server/mpm/threaded threaded.c
               docs/conf httpd-std.conf
  Log:
  Port the MaxClients changes from the worker MPM to the threaded
  MPM.
  
  Revision  Changes    Path
  1.391     +3 -0      httpd-2.0/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/CHANGES,v
  retrieving revision 1.390
  retrieving revision 1.391
  diff -u -r1.390 -r1.391
  --- CHANGES	2001/10/11 20:03:26	1.390
  +++ CHANGES	2001/10/16 04:02:27	1.391
  @@ -1,5 +1,8 @@
   Changes with Apache 2.0.26-dev
   
  +  *) Port the MaxClients changes from the worker MPM to the threaded
  +     MPM.  [Ryan Bloom]
  +
     *) Fix mod_proxy so that it handles chunked transfer-encoding and works
        with the new input filtering system.  [Justin Erenkrantz]
   
  
  
  
  1.65      +82 -13    httpd-2.0/server/mpm/threaded/threaded.c
  
  Index: threaded.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/threaded/threaded.c,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- threaded.c	2001/09/18 22:13:58	1.64
  +++ threaded.c	2001/10/16 04:02:28	1.65
  @@ -1359,7 +1359,45 @@
   {
       static int restart_num = 0;
       int no_detach, debug;
  +    ap_directive_t *pdir;
  +    ap_directive_t *max_clients = NULL;
   
  +    /* make sure that "ThreadsPerChild" gets set before "MaxClients" */
  +    for (pdir = ap_conftree; pdir != NULL; pdir = pdir->next) {
  +        if (strncasecmp(pdir->directive, "ThreadsPerChild", 15) == 0) {
  +            if (!max_clients) {
  +                break; /* we're in the clear, got ThreadsPerChild first */
  +            }
  +            else {
  +                /* now to swap the data */
  +                ap_directive_t temp;
  + 
  +                temp.directive = pdir->directive;
  +                temp.args = pdir->args;
  +                /* Make sure you don't change 'next', or you may get loops! */
  +                /* XXX: first_child, parent, and data can never be set
  +                 * for these directives, right? -aaron */
  +                temp.filename = pdir->filename;
  +                temp.line_num = pdir->line_num;
  + 
  +                pdir->directive = max_clients->directive;
  +                pdir->args = max_clients->args;
  +                pdir->filename = max_clients->filename;
  +                pdir->line_num = max_clients->line_num;
  + 
  +                max_clients->directive = temp.directive;
  +                max_clients->args = temp.args;
  +                max_clients->filename = temp.filename;
  +                max_clients->line_num = temp.line_num;
  +                break;
  +            }
  +        }
  +        else if (!max_clients
  +                && strncasecmp(pdir->directive, "MaxClients", 10) == 0) {
  +            max_clients = pdir;
  +        }
  +    }
  +
       debug = ap_exists_config_define("DEBUG");
   
       if (debug)
  @@ -1452,27 +1490,58 @@
   static const char *set_server_limit (cmd_parms *cmd, void *dummy,
   				     const char *arg) 
   {
  +    int max_clients;
       const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
       if (err != NULL) {
           return err;
       }
  -
  -    ap_daemons_limit = atoi(arg);
  + 
  +    /* It is ok to use ap_threads_per_child here because we are
  +     * sure that it gets set before MaxClients in the pre_config stage. */
  +    max_clients = atoi(arg);
  +    if (max_clients < ap_threads_per_child) {
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    "WARNING: MaxClients (%d) must be at least as large",
  +                    max_clients);
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    " large as ThreadsPerChild (%d). Automatically",
  +                    ap_threads_per_child);
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    " increasing MaxClients to %d.",
  +                    ap_threads_per_child);
  +       max_clients = ap_threads_per_child;
  +    }
  +    ap_daemons_limit = max_clients / ap_threads_per_child;
  +    if ((max_clients > 0) && (max_clients % ap_threads_per_child)) {
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    "WARNING: MaxClients (%d) is not an integer multiple",
  +                    max_clients);
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    " of ThreadsPerChild (%d), lowering MaxClients to %d",
  +                    ap_threads_per_child,
  +                    ap_daemons_limit * ap_threads_per_child);
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    " for a maximum of %d child processes,",
  +                    ap_daemons_limit);
  +    }
       if (ap_daemons_limit > HARD_SERVER_LIMIT) {
  -       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
  -                    "WARNING: MaxClients of %d exceeds compile time limit "
  -                    "of %d servers,", ap_daemons_limit, HARD_SERVER_LIMIT);
  -       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
  -                    " lowering MaxClients to %d.  To increase, please "
  -                    "see the", HARD_SERVER_LIMIT);
  -       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, 
  -                    " HARD_SERVER_LIMIT define in %s.",
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    "WARNING: MaxClients of %d would require %d servers,",
  +                    max_clients, ap_daemons_limit);
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    " and would exceed the compile time limit of %d.",
  +                    HARD_SERVER_LIMIT);
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    " Automatically lowering MaxClients to %d.  To increase,",
  +                    HARD_SERVER_LIMIT);
  +       ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL,
  +                    " please see the HARD_SERVER_LIMIT define in %s.",
                       AP_MPM_HARD_LIMITS_FILE);
          ap_daemons_limit = HARD_SERVER_LIMIT;
  -    } 
  +    }
       else if (ap_daemons_limit < 1) {
  -	ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "WARNING: Require MaxClients
> 0, setting to 1");
  -	ap_daemons_limit = 1;
  +        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "WARNING: Require
MaxClients > 0, setting to 1");
  +        ap_daemons_limit = 1;
       }
       return NULL;
   }
  
  
  
  1.59      +2 -2      httpd-2.0/docs/conf/httpd-std.conf
  
  Index: httpd-std.conf
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/docs/conf/httpd-std.conf,v
  retrieving revision 1.58
  retrieving revision 1.59
  diff -u -r1.58 -r1.59
  --- httpd-std.conf	2001/10/15 15:29:03	1.58
  +++ httpd-std.conf	2001/10/16 04:02:28	1.59
  @@ -126,8 +126,8 @@
   # MaxRequestsPerChild: maximum number of requests a server process serves
   <IfModule threaded.c>
   StartServers         3
  -MaxClients           8
  -MinSpareThreads      5
  +MaxClients         150
  +MinSpareThreads     25
   MaxSpareThreads     75 
   ThreadsPerChild     25
   MaxRequestsPerChild  0
  
  
  

Mime
View raw message