Blame docs/manual/mod/event.html.en

Packit 90a5c9
Packit 90a5c9
Packit 90a5c9
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
Packit 90a5c9
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
Packit 90a5c9
Packit 90a5c9
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 90a5c9
              This file is generated from xml source: DO NOT EDIT
Packit 90a5c9
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 90a5c9
      -->
Packit 90a5c9
<title>event - Apache HTTP Server Version 2.4</title>
Packit 90a5c9
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
Packit 90a5c9
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
Packit 90a5c9
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
Packit 90a5c9
<script src="../style/scripts/prettify.min.js" type="text/javascript">
Packit 90a5c9
</script>
Packit 90a5c9
Packit 90a5c9
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
Packit 90a5c9
<body>
Packit 90a5c9
Packit 90a5c9

Modules | Directives | FAQ | Glossary | Sitemap

Packit 90a5c9

Apache HTTP Server Version 2.4

Packit 90a5c9
Packit 90a5c9
<-
Packit 90a5c9
Packit 90a5c9
Apache > HTTP Server > Documentation > Version 2.4 > Modules
Packit 90a5c9
Packit 90a5c9

Apache MPM event

Packit 90a5c9
Packit 90a5c9

Available Languages:  en  |

Packit 90a5c9
 fr 

Packit 90a5c9
Packit 90a5c9
Description:A variant of the worker MPM with the goal
Packit 90a5c9
of consuming threads only for connections with active processing
Packit 90a5c9
Status:MPM
Packit 90a5c9
Module Identifier:mpm_event_module
Packit 90a5c9
Source File:event.c
Packit 90a5c9

Summary

Packit 90a5c9
Packit 90a5c9
    

The event Multi-Processing Module (MPM) is

Packit 90a5c9
    designed to allow more requests to be served simultaneously by
Packit 90a5c9
    passing off some processing work to the listeners threads, freeing up
Packit 90a5c9
    the worker threads to serve new requests.

Packit 90a5c9
Packit 90a5c9
    

To use the event MPM, add

Packit 90a5c9
      --with-mpm=event to the configure
Packit 90a5c9
      script's arguments when building the httpd.

Packit 90a5c9
Packit 90a5c9
Packit 90a5c9
Support Apache!

Topics

Packit 90a5c9
    Packit 90a5c9
  • Relationship with the Worker MPM
  • Packit 90a5c9
  • How it Works
  • Packit 90a5c9
  • Requirements
  • Packit 90a5c9

    Directives

    Packit 90a5c9
      Packit 90a5c9
    • AsyncRequestWorkerFactor
    • Packit 90a5c9
    • CoreDumpDirectory
    • Packit 90a5c9
    • EnableExceptionHook
    • Packit 90a5c9
    • Group
    • Packit 90a5c9
    • Listen
    • Packit 90a5c9
    • ListenBacklog
    • Packit 90a5c9
    • MaxConnectionsPerChild
    • Packit 90a5c9
    • MaxMemFree
    • Packit 90a5c9
    • MaxRequestWorkers
    • Packit 90a5c9
    • MaxSpareThreads
    • Packit 90a5c9
    • MinSpareThreads
    • Packit 90a5c9
    • PidFile
    • Packit 90a5c9
    • ScoreBoardFile
    • Packit 90a5c9
    • SendBufferSize
    • Packit 90a5c9
    • ServerLimit
    • Packit 90a5c9
    • StartServers
    • Packit 90a5c9
    • ThreadLimit
    • Packit 90a5c9
    • ThreadsPerChild
    • Packit 90a5c9
    • ThreadStackSize
    • Packit 90a5c9
    • User
    • Packit 90a5c9
      Packit 90a5c9

      Bugfix checklist

      See also

      Packit 90a5c9
        Packit 90a5c9
      • The worker MPM
      • Packit 90a5c9
      • Comments
      • Packit 90a5c9
        top
        Packit 90a5c9
        Packit 90a5c9

        Relationship with the Worker MPM

        Packit 90a5c9

        event is based on the worker MPM, which implements a hybrid

        Packit 90a5c9
        multi-process multi-threaded server. A single control process (the parent) is responsible for launching
        Packit 90a5c9
        child processes. Each child process creates a fixed number of server
        Packit 90a5c9
        threads as specified in the ThreadsPerChild directive, as well
        Packit 90a5c9
        as a listener thread which listens for connections and passes them to a worker thread for processing when they arrive.

        Packit 90a5c9
        Packit 90a5c9

        Run-time configuration directives are identical to those provided by worker, with the only addition

        Packit 90a5c9
        of the AsyncRequestWorkerFactor.

        Packit 90a5c9
        Packit 90a5c9
        top
        Packit 90a5c9
        Packit 90a5c9

        How it Works

        Packit 90a5c9
            

        This MPM tries to fix the 'keep alive problem' in HTTP. After a client

        Packit 90a5c9
            completes the first request, it can keep the connection
        Packit 90a5c9
            open, sending further requests using the same socket and saving
        Packit 90a5c9
            significant overhead in creating TCP connections. However,
        Packit 90a5c9
            Apache HTTP Server traditionally keeps an entire child
        Packit 90a5c9
            process/thread waiting for data from the client, which brings its own disadvantages.
        Packit 90a5c9
            To solve this problem, this MPM uses a dedicated listener thread for each process
        Packit 90a5c9
            to handle both the Listening sockets, all sockets that are in a Keep Alive state,
        Packit 90a5c9
            sockets where the handler and protocol filters have done their work
        Packit 90a5c9
            and the ones where the only remaining thing to do is send the data to the client.
        Packit 90a5c9
            

        Packit 90a5c9
        Packit 90a5c9
            

        This new architecture, leveraging non-blocking sockets and modern kernel

        Packit 90a5c9
               features exposed by APR (like Linux's epoll),
        Packit 90a5c9
               no longer requires the mpm-accept Mutex
        Packit 90a5c9
               configured to avoid the thundering herd problem.

        Packit 90a5c9
        Packit 90a5c9
            

        The total amount of connections that a single process/threads block can handle is regulated

        Packit 90a5c9
                by the AsyncRequestWorkerFactor directive.

        Packit 90a5c9
        Packit 90a5c9
            

        Async connections

        Packit 90a5c9
                

        Async connections would need a fixed dedicated worker thread with the previous MPMs but not with event.

        Packit 90a5c9
                The status page of mod_status shows new columns under the Async connections section:

        Packit 90a5c9
                
        Packit 90a5c9
                    
        Writing
        Packit 90a5c9
                    
        While sending the response to the client, it might happen that the TCP write buffer fills up because the connection is too slow. Usually in this case a write() to the socket returns EWOULDBLOCK or EAGAIN, to become writable again after an idle time. The worker holding the socket might be able to offload the waiting task to the listener thread, that in turn will re-assign it to the first idle worker thread available once an event will be raised for the socket (for example, "the socket is now writable"). Please check the Limitations section for more information.
        Packit 90a5c9
                    
        Packit 90a5c9
        Packit 90a5c9
                    
        Keep-alive
        Packit 90a5c9
                    
        Keep Alive handling is the most basic improvement from the worker MPM.
        Packit 90a5c9
                    Once a worker thread finishes to flush the response to the client, it can offload the
        Packit 90a5c9
                    socket handling to the listener thread, that in turns will wait for any event from the
        Packit 90a5c9
                    OS, like "the socket is readable". If any new request comes from the client, then the
        Packit 90a5c9
                    listener will forward it to the first worker thread available. Conversely, if the
        Packit 90a5c9
                    KeepAliveTimeout occurs then the socket will be
        Packit 90a5c9
                    closed by the listener. In this way the worker threads are not responsible for idle
        Packit 90a5c9
                    sockets and they can be re-used to serve other requests.
        Packit 90a5c9
        Packit 90a5c9
                    
        Closing
        Packit 90a5c9
                    
        Sometimes the MPM needs to perform a lingering close, namely sending back an early error to the client while it is still transmitting data to httpd.
        Packit 90a5c9
                    Sending the response and then closing the connection immediately is not the correct thing to do since the client (still trying to send the rest of the
        Packit 90a5c9
                    request) would get a connection reset and could not read the httpd's response. The lingering close is time bounded but it can take relatively long
        Packit 90a5c9
                    time, so it's offloaded to a worker thread (including the shutdown hooks and real socket close). From 2.4.28 onward this is also the
        Packit 90a5c9
                    case when connections finally timeout (the listener thread never handles connections besides waiting for and dispatching their events).
        Packit 90a5c9
                    
        Packit 90a5c9
                
        Packit 90a5c9
        Packit 90a5c9
                

        These improvements are valid for both HTTP/HTTPS connections.

        Packit 90a5c9
        Packit 90a5c9
            
        Packit 90a5c9
        Packit 90a5c9
            

        Graceful process termination and Scoreboard usage

        Packit 90a5c9
                

        This mpm showed some scalability bottlenecks in the past leading to the following

        Packit 90a5c9
                error: "scoreboard is full, not at MaxRequestWorkers".
        Packit 90a5c9
                MaxRequestWorkers
        Packit 90a5c9
                limits the number of simultaneous requests that will be served at any given time
        Packit 90a5c9
                and also the number of allowed processes
        Packit 90a5c9
                (MaxRequestWorkers 
        Packit 90a5c9
                / ThreadsPerChild), meanwhile
        Packit 90a5c9
                the Scoreboard is a representation of all the running processes and
        Packit 90a5c9
                the status of their worker threads. If the scoreboard is full (so all the
        Packit 90a5c9
                threads have a state that is not idle) but the number of active requests
        Packit 90a5c9
                served is not MaxRequestWorkers,
        Packit 90a5c9
                it means that some of them are blocking new requests that could be served
        Packit 90a5c9
                but that are queued instead (up to the limit imposed by
        Packit 90a5c9
                ListenBacklog). Most of the times
        Packit 90a5c9
                the threads are stuck in the Graceful state, namely they are waiting to
        Packit 90a5c9
                finish their work with a TCP connection to safely terminate and free up a
        Packit 90a5c9
                scoreboard slot (for example handling long running requests, slow clients
        Packit 90a5c9
                or connections with keep-alive enabled). Two scenarios are very common:

        Packit 90a5c9
                
          Packit 90a5c9
                      
        • During a graceful restart.
        • Packit 90a5c9
                      The parent process signals all its children to complete
          Packit 90a5c9
                      their work and terminate, while it reloads the config and forks new
          Packit 90a5c9
                      processes. If the old children keep running for a while before stopping,
          Packit 90a5c9
                      the scoreboard will be partially occupied until their slots are freed.
          Packit 90a5c9
                      
          Packit 90a5c9
                      
        • When the server load goes down in a way that causes httpd to
        • Packit 90a5c9
                      stop some processes (for example due to
          Packit 90a5c9
                      MaxSpareThreads).
          Packit 90a5c9
                      This is particularly problematic because when the load increases again,
          Packit 90a5c9
                      httpd will try to start new processes.
          Packit 90a5c9
                      If the pattern repeats, the number of processes can rise quite a bit,
          Packit 90a5c9
                      ending up in a mixture of old processes trying to stop and new ones
          Packit 90a5c9
                      trying to do some work.
          Packit 90a5c9
                      
          Packit 90a5c9
                  
          Packit 90a5c9
                  

          From 2.4.24 onward, mpm-event is smarter and it is able to handle

          Packit 90a5c9
                  graceful terminations in a much better way. Some of the improvements are:

          Packit 90a5c9
                  
            Packit 90a5c9
                        
          • Allow the use of all the scoreboard slots up to
          • Packit 90a5c9
                        ServerLimit.
            Packit 90a5c9
                        MaxRequestWorkers and
            Packit 90a5c9
                        ThreadsPerChild are used
            Packit 90a5c9
                        to limit the amount of active processes, meanwhile
            Packit 90a5c9
                        ServerLimit 
            Packit 90a5c9
                        takes also into account the ones doing a graceful
            Packit 90a5c9
                        close to allow extra slots when needed. The idea is to use
            Packit 90a5c9
                        ServerLimit to instruct httpd
            Packit 90a5c9
                        about how many overall processes are tolerated before impacting
            Packit 90a5c9
                        the system resources.
            Packit 90a5c9
                        
            Packit 90a5c9
                        
          • Force gracefully finishing processes to close their
          • Packit 90a5c9
                        connections in keep-alive state.
            Packit 90a5c9
                        
          • During graceful shutdown, if there are more running worker threads
          • Packit 90a5c9
                        than open connections for a given process, terminate these threads to
            Packit 90a5c9
                        free resources faster (which may be needed for new processes).
            Packit 90a5c9
                        
          • If the scoreboard is full, prevent more processes to finish
          • Packit 90a5c9
                        gracefully due to reduced load until old processes have terminated
            Packit 90a5c9
                        (otherwise the situation would get worse once the load increases again).
            Packit 90a5c9
                    
            Packit 90a5c9
                    

            The behavior described in the last point is completely observable via

            Packit 90a5c9
                    mod_status in the connection summary table through two new
            Packit 90a5c9
                    columns: "Slot" and "Stopping". The former indicates the PID and
            Packit 90a5c9
                    the latter if the process is stopping or not; the extra state "Yes (old gen)"
            Packit 90a5c9
                    indicates a process still running after a graceful restart.

            Packit 90a5c9
                
            Packit 90a5c9
            Packit 90a5c9
                

            Limitations

            Packit 90a5c9
                    

            The improved connection handling may not work for certain connection

            Packit 90a5c9
                    filters that have declared themselves as incompatible with event. In these
            Packit 90a5c9
                    cases, this MPM will fall back to the behavior of the
            Packit 90a5c9
                    worker MPM and reserve one worker thread per connection.
            Packit 90a5c9
                    All modules shipped with the server are compatible with the event MPM.

            Packit 90a5c9
            Packit 90a5c9
                    

            A similar restriction is currently present for requests involving an

            Packit 90a5c9
                    output filter that needs to read and/or modify the whole response body.
            Packit 90a5c9
                    If the connection to the client blocks while the filter is processing the
            Packit 90a5c9
                    data, and the amount of data produced by the filter is too big to be
            Packit 90a5c9
                    buffered in memory, the thread used for the request is not freed while
            Packit 90a5c9
                    httpd waits until the pending data is sent to the client.
            Packit 90a5c9
                    To illustrate this point we can think about the following two situations:
            Packit 90a5c9
                    serving a static asset (like a CSS file) versus serving content retrieved from
            Packit 90a5c9
                    FCGI/CGI or a proxied server. The former is predictable, namely the event MPM
            Packit 90a5c9
                    has full visibility on the end of the content and it can use events: the worker
            Packit 90a5c9
                    thread serving the response content can flush the first bytes until EWOULDBLOCK
            Packit 90a5c9
                    or EAGAIN is returned, delegating the rest to the listener. This one in turn
            Packit 90a5c9
                    waits for an event on the socket, and delegates the work to flush the rest of the content
            Packit 90a5c9
                    to the first idle worker thread. Meanwhile in the latter example (FCGI/CGI/proxied content)
            Packit 90a5c9
                    the MPM can't predict the end of the response and a worker thread has to finish its work
            Packit 90a5c9
                    before returning the control to the listener. The only alternative is to buffer the
            Packit 90a5c9
                    response in memory, but it wouldn't be the safest option for the sake of the
            Packit 90a5c9
                    server's stability and memory footprint.
            Packit 90a5c9
                    

            Packit 90a5c9
            Packit 90a5c9
                
            Packit 90a5c9
            Packit 90a5c9
                

            Background material

            Packit 90a5c9
                    

            The event model was made possible by the introduction of new APIs into the supported operating systems:

            Packit 90a5c9
                    
              Packit 90a5c9
                          
            • epoll (Linux)
            • Packit 90a5c9
                          
            • kqueue (BSD)
            • Packit 90a5c9
                          
            • event ports (Solaris)
            • Packit 90a5c9
                      
              Packit 90a5c9
                      

              Before these new APIs where made available, the traditional select and poll APIs had to be used.

              Packit 90a5c9
                      Those APIs get slow if used to handle many connections or if the set of connections rate of change is high.
              Packit 90a5c9
                      The new APIs allow to monitor much more connections and they perform way better when the set of connections to monitor changes frequently. So these APIs made it possible to write the event MPM, that scales much better with the typical HTTP pattern of many idle connections.

              Packit 90a5c9
              Packit 90a5c9
                      

              The MPM assumes that the underlying apr_pollset

              Packit 90a5c9
                      implementation is reasonably threadsafe. This enables the MPM to
              Packit 90a5c9
                      avoid excessive high level locking, or having to wake up the listener
              Packit 90a5c9
                      thread in order to send it a keep-alive socket. This is currently
              Packit 90a5c9
                      only compatible with KQueue and EPoll.

              Packit 90a5c9
              Packit 90a5c9
                  
              Packit 90a5c9
              Packit 90a5c9
              top
              Packit 90a5c9
              Packit 90a5c9

              Requirements

              Packit 90a5c9
                  

              This MPM depends on APR's atomic

              Packit 90a5c9
                  compare-and-swap operations for thread synchronization. If you are
              Packit 90a5c9
                  compiling for an x86 target and you don't need to support 386s, or
              Packit 90a5c9
                  you are compiling for a SPARC and you don't need to run on
              Packit 90a5c9
                  pre-UltraSPARC chips, add
              Packit 90a5c9
                  --enable-nonportable-atomics=yes to the
              Packit 90a5c9
                  configure script's arguments. This will cause
              Packit 90a5c9
                  APR to implement atomic operations using efficient opcodes not
              Packit 90a5c9
                  available in older CPUs.

              Packit 90a5c9
              Packit 90a5c9
                  

              This MPM does not perform well on older platforms which lack good

              Packit 90a5c9
                  threading, but the requirement for EPoll or KQueue makes this
              Packit 90a5c9
                  moot.

              Packit 90a5c9
              Packit 90a5c9
                  
                Packit 90a5c9
                Packit 90a5c9
                      
              • To use this MPM on FreeBSD, FreeBSD 5.3 or higher is recommended.
              • Packit 90a5c9
                      However, it is possible to run this MPM on FreeBSD 5.2.1, if you
                Packit 90a5c9
                      use libkse (see man libmap.conf).
                Packit 90a5c9
                Packit 90a5c9
                      
              • For NetBSD, at least version 2.0 is recommended.
              • Packit 90a5c9
                Packit 90a5c9
                      
              • For Linux, a 2.6 kernel is recommended. It is also necessary to
              • Packit 90a5c9
                      ensure that your version of glibc has been compiled
                Packit 90a5c9
                      with support for EPoll.
                Packit 90a5c9
                Packit 90a5c9
                    
                Packit 90a5c9
                Packit 90a5c9
                top
                Packit 90a5c9
                Packit 90a5c9
                Packit 90a5c9
                Description:Limit concurrent connections per process
                Packit 90a5c9
                Syntax:AsyncRequestWorkerFactor factor
                Packit 90a5c9
                Default:2
                Packit 90a5c9
                Context:server config
                Packit 90a5c9
                Status:MPM
                Packit 90a5c9
                Module:event
                Packit 90a5c9
                Compatibility:Available in version 2.3.13 and later
                Packit 90a5c9
                Packit 90a5c9
                    

                The event MPM handles some connections in an asynchronous way, where

                Packit 90a5c9
                    request worker threads are only allocated for short periods of time as
                Packit 90a5c9
                    needed, and other connections with one request worker thread reserved per
                Packit 90a5c9
                    connection. This can lead to situations where all workers are tied up and
                Packit 90a5c9
                    no worker thread is available to handle new work on established async
                Packit 90a5c9
                    connections.

                Packit 90a5c9
                Packit 90a5c9
                    

                To mitigate this problem, the event MPM does two things:

                Packit 90a5c9
                    
                  Packit 90a5c9
                          
                • it limits the number of connections accepted per process, depending on the
                • Packit 90a5c9
                              number of idle request workers;
                  Packit 90a5c9
                          
                • if all workers are busy, it will
                • Packit 90a5c9
                              close connections in keep-alive state even if the keep-alive timeout has
                  Packit 90a5c9
                              not expired. This allows the respective clients to reconnect to a
                  Packit 90a5c9
                              different process which may still have worker threads available.
                  Packit 90a5c9
                      
                  Packit 90a5c9
                  Packit 90a5c9
                      

                  This directive can be used to fine-tune the per-process connection

                  Packit 90a5c9
                      limit. A process will only accept new connections if the current number of
                  Packit 90a5c9
                      connections (not counting connections in the "closing" state) is lower
                  Packit 90a5c9
                      than:

                  Packit 90a5c9
                  Packit 90a5c9
                      

                  Packit 90a5c9
                          ThreadsPerChild +
                  Packit 90a5c9
                          (AsyncRequestWorkerFactor *
                  Packit 90a5c9
                          number of idle workers)
                  Packit 90a5c9
                      

                  Packit 90a5c9
                  Packit 90a5c9
                      

                  An estimation of the maximum concurrent connections across all the processes given

                  Packit 90a5c9
                          an average value of idle worker threads can be calculated with:
                  Packit 90a5c9
                      

                  Packit 90a5c9
                  Packit 90a5c9
                  Packit 90a5c9
                      

                  Packit 90a5c9
                          (ThreadsPerChild +
                  Packit 90a5c9
                          (AsyncRequestWorkerFactor *
                  Packit 90a5c9
                          number of idle workers)) *
                  Packit 90a5c9
                          ServerLimit
                  Packit 90a5c9
                      

                  Packit 90a5c9
                  Packit 90a5c9
                      

                  Example

                  Packit 90a5c9
                      
                  ThreadsPerChild = 10
                  Packit 90a5c9
                  ServerLimit = 4
                  Packit 90a5c9
                  AsyncRequestWorkerFactor = 2
                  Packit 90a5c9
                  MaxRequestWorkers = 40
                  Packit 90a5c9
                  Packit 90a5c9
                  idle_workers = 4 (average for all the processes to keep it simple)
                  Packit 90a5c9
                  Packit 90a5c9
                  max_connections = (ThreadsPerChild + (AsyncRequestWorkerFactor * idle_workers)) * ServerLimit
                  Packit 90a5c9
                                  = (10 + (2 * 4)) * 4 = 72
                  Packit 90a5c9
                  Packit 90a5c9
                      
                  Packit 90a5c9
                  Packit 90a5c9
                      

                  When all the worker threads are idle, then absolute maximum numbers of concurrent

                  Packit 90a5c9
                          connections can be calculared in a simpler way:

                  Packit 90a5c9
                  Packit 90a5c9
                      

                  Packit 90a5c9
                          (AsyncRequestWorkerFactor + 1) *
                  Packit 90a5c9
                          MaxRequestWorkers
                  Packit 90a5c9
                      

                  Packit 90a5c9
                  Packit 90a5c9
                  Packit 90a5c9
                      

                  Example

                  Packit 90a5c9
                      
                  ThreadsPerChild = 10
                  Packit 90a5c9
                  ServerLimit = 4
                  Packit 90a5c9
                  MaxRequestWorkers = 40
                  Packit 90a5c9
                  AsyncRequestWorkerFactor = 2
                  Packit 90a5c9
                  Packit 90a5c9
                  Packit 90a5c9
                      

                  If all the processes have all threads idle then:

                  Packit 90a5c9
                  Packit 90a5c9
                      
                  idle_workers = 10
                  Packit 90a5c9
                  Packit 90a5c9
                  Packit 90a5c9
                      

                  We can calculate the absolute maximum numbers of concurrent connections in two ways:

                  Packit 90a5c9
                  Packit 90a5c9
                      
                  max_connections = (ThreadsPerChild + (AsyncRequestWorkerFactor * idle_workers)) * ServerLimit
                  Packit 90a5c9
                                  = (10 + (2 * 10)) * 4 = 120
                  Packit 90a5c9
                  Packit 90a5c9
                  max_connections = (AsyncRequestWorkerFactor + 1) * MaxRequestWorkers
                  Packit 90a5c9
                                  = (2 + 1) * 40 = 120
                  Packit 90a5c9
                  Packit 90a5c9
                      
                  Packit 90a5c9
                  Packit 90a5c9
                      

                  Tuning AsyncRequestWorkerFactor requires knowledge about the traffic handled by httpd in each specific use case, so changing the default value requires extensive testing and data gathering from mod_status.

                  Packit 90a5c9
                  Packit 90a5c9
                      

                  MaxRequestWorkers was called

                  Packit 90a5c9
                      MaxClients prior to version 2.3.13. The above value
                  Packit 90a5c9
                      shows that the old name did not accurately describe its meaning for the event MPM.

                  Packit 90a5c9
                  Packit 90a5c9
                      

                  AsyncRequestWorkerFactor can take non-integer

                  Packit 90a5c9
                      arguments, e.g "1.5".

                  Packit 90a5c9
                  Packit 90a5c9
                  Packit 90a5c9
                  Packit 90a5c9
                  Packit 90a5c9
                  Packit 90a5c9

                  Available Languages:  en  |

                  Packit 90a5c9
                   fr 

                  Packit 90a5c9
                  top

                  Comments

                  Notice:
                  This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.
                  Packit 90a5c9
                  <script type="text/javascript">
                  Packit 90a5c9
                  var comments_shortname = 'httpd';
                  Packit 90a5c9
                  var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/event.html';
                  Packit 90a5c9
                  (function(w, d) {
                  Packit 90a5c9
                      if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
                  Packit 90a5c9
                          d.write('
                  <\/div>');
                  Packit 90a5c9
                          var s = d.createElement('script');
                  Packit 90a5c9
                          s.type = 'text/javascript';
                  Packit 90a5c9
                          s.async = true;
                  Packit 90a5c9
                          s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
                  Packit 90a5c9
                          (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
                  Packit 90a5c9
                      }
                  Packit 90a5c9
                      else { 
                  Packit 90a5c9
                          d.write('
                  Comments are disabled for this page at the moment.<\/div>');
                  Packit 90a5c9
                      }
                  Packit 90a5c9
                  })(window, document);
                  Packit 90a5c9
                  //--></script>
                  Packit 90a5c9

                  Copyright 2018 The Apache Software Foundation.
                  Licensed under the Apache License, Version 2.0.

                  Packit 90a5c9

                  Modules | Directives | FAQ | Glossary | Sitemap

                  <script type="text/javascript">
                  Packit 90a5c9
                  if (typeof(prettyPrint) !== 'undefined') {
                  Packit 90a5c9
                      prettyPrint();
                  Packit 90a5c9
                  }
                  Packit 90a5c9
                  //--></script>
                  Packit 90a5c9
                  </body></html>