{"id":473387,"date":"2016-10-28T08:00:53","date_gmt":"2016-10-28T01:00:53","guid":{"rendered":"https:\/\/www.harianaceh.co.id\/?p=473387"},"modified":"2025-10-28T05:04:43","modified_gmt":"2025-10-27T22:04:43","slug":"apache-mpm-directives-explained-the-ultimate-performance-tuning-guide","status":"publish","type":"post","link":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/","title":{"rendered":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide"},"content":{"rendered":"<p class=\"wp-block-paragraph\"><strong>BANDA ACEH<\/strong> &#8211; How directives behave and which directives are mainly available hinges on the loaded <a title=\"MPM\" href=\"https:\/\/www.harianaceh.co.id\/tag\/mpm\/\">MPM<\/a>. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how <a title=\"Apache\" href=\"https:\/\/www.harianaceh.co.id\/tag\/apache\/\">Apache<\/a> addresses multiprocessing. Using our last article on Apache MPM Modules as a springboard, we will use this section to cover the following subsections:<\/p>\n<p class=\"wp-block-paragraph\">Each part will focus on how the directives affect performance for their respective MPM and some common considerations that should be assessed when optimizing Apache with those specific MPMs.<\/p>\n<p class=\"wp-block-paragraph\">Be sure to review this article in its entirety as the universal directives operate in the same manner regardless of the MPM chosen.<\/p>\n<h3 id=\"h-general-optimization\" class=\"wp-block-heading\"><strong>General Optimization<\/strong><\/h3>\n<h4 id=\"h-ifmodule\" class=\"wp-block-heading\">IfModule<\/h4>\n<p class=\"wp-block-paragraph\">An important directive to learn when working with Apache servers is the IfModule conditional statement. There are two parts to the IfModule statement. A beginning, which also accepts a module name or module source file name, as well as a closing statement. When the provided module is loaded into Apache, then all directives between the beginning IfModule statement and the closing IfModule statement are also read into the Apache running configuration. Please review the provided example below for further clarification:<\/p>\n<p class=\"wp-block-paragraph\"><code>&lt;ifModule mpm_prefork_module&gt;<br \/>\nMaxSpareServers 16<br \/>\n&lt;\/ifModule&gt;<br \/>\nTimeout 60<br \/>\n<\/code><\/p>\n<p class=\"wp-block-paragraph\"><strong><em>The above example defines the MaxSpareServers directive only when loaded by mpm_prefork_module. The Timeout directive is applied every time due to it being outside of the IfModule closing statement.<\/em><\/strong><\/p>\n<p class=\"wp-block-paragraph\">IfModule statements are used to maintain compatibility within Apache configuration between module changes. Maintaining compatibility is done by grouping directives into IfModule statements, so they are only used when the required module is loaded. Ensuring a syntactically correct configuration file even when swapping modules.<\/p>\n<p class=\"wp-block-paragraph\">Remember, as a rule of thumb, appropriately wrapping everything in an IfModule statement is a best practice standard with Apache and should be adhered to for superior compatibility in config files.<\/p>\n<h4 id=\"h-timeout\" class=\"wp-block-heading\">Timeout<\/h4>\n<p class=\"wp-block-paragraph\">The numerical value of seconds Apache waits for all common I\/O events. Apache will abandon requests fail to complete before the provided\u00a0<em>Timeout<\/em>\u00a0value.<\/p>\n<p class=\"wp-block-paragraph\">Determining the right\u00a0<em>Timeout<\/em>\u00a0depends on both traffic habits and hosted applications. Ideally,\u00a0<em>Timeout<\/em>\u00a0should be as low as possible while still allowing the vast majority of regular traffic to operate without issue. Large timeouts, those above 1 minute, open the server to\u00a0<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Slowloris_(computer_security)\">SlowLoris<\/a>\u00a0style DOS attacks and foster a long wait in the browser when it encounters a problem. Lower timeouts allow Apache to recover from errant stuck connections quickly. It becomes necessary to strike a balance between the two extremes.<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#serverlimit\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy entered loaded alignnone wp-image-327158\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-3-2.avif\" alt=\"\" width=\"255\" height=\"174\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-3-2.avif\" data-ll-status=\"loaded\" \/><\/a><\/figure>\n<p class=\"wp-block-paragraph\">Avoid increasing the global Timeout when addressing issues with a single script, or user, that requires a long Timeout. Problems can usually be resolved by a .htaccess file or include file to increase the Timeout directive for that specific script.<\/p>\n<h4 id=\"h-keepalive\" class=\"wp-block-heading\">KeepAlive<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"alignleft\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#serverlimit\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-4-min.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-4-min.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-4-min.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-4-min.webp \" \/><img loading=\"lazy\" decoding=\"async\" class=\"sp-no-webp lazy entered loaded alignnone wp-image-18453\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-4-min.jpg\" alt=\"KeepAlive\" width=\"255\" height=\"174\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-4-min.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/a><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">A simple on|off toggle enables the\u00a0<em>KeepAlive<\/em>\u00a0protocols with supported browsers. The\u00a0<em>KeepAlive<\/em>\u00a0feature can provide as much as a 50% reductions in latency, significantly boosting the performance of Apache.\u00a0<em>KeepAlive<\/em>\u00a0accomplishes this by reusing the same initial connections a browser creates when connecting to Apache for all follow-up requests which occur within a short period.<\/p>\n<p class=\"wp-block-paragraph\"><em>KeepAlive<\/em>\u00a0is a powerful feature and in general, should be enabled in most situations. It works great for reducing some of the CPU and Network overhead with modern element heavy websites. For example, an easy way to visualize\u00a0<em>KeepAlive<\/em>\u00a0is with the \u201chold the door\u201d phrase. Imagine a queue of people entering a building through a single doorway. Each person is required to open the door, walk through it, then close the door before the next person does the same process. Mostly, that\u2019s how Apache works without\u00a0<em>KeepAlive<\/em>. When enabled, the door stays open until all the people in line are through the door before it closes again.<\/p>\n<p class=\"wp-block-paragraph\">Two additional related directives also govern\u00a0<em>KeepAlive<\/em>.\u00a0<a href=\"#requests\">MaxKeepAliveRequests<\/a>\u00a0and\u00a0<a href=\"#timeout\">KeepAliveTimeout<\/a>. Discussed in the next section, each one plays a vital role in fine-tuning of the KeepAlive directive.<\/p>\n<h4 id=\"h-maxkeepaliverequests\" class=\"wp-block-heading\"><strong>MaxKeepAliveRequests<\/strong><\/h4>\n<p class=\"wp-block-paragraph\">Sets a limit on the number of requests an individual\u00a0<em>KeepAlive<\/em>\u00a0connection is permitted to handle. Once reached, Apache forces the connection to terminate, and creates a new one for any additional requests.<\/p>\n<p class=\"wp-block-paragraph\">Determining an ideal setting here is open to interpretation. Generally, you want this value to be at least as high as the largest count of elements (HTML, Text, CSS, Images, Etc..) served by the most heavily trafficked pages on the server.<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#serverlimit\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy entered loaded alignnone wp-image-327162\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-8-min-1.avif\" alt=\"\" width=\"291\" height=\"173\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-8-min-1.avif\" data-ll-status=\"loaded\" \/><\/a><\/figure>\n<p class=\"wp-block-paragraph\">Set MaxKeepAliveRequests to double that of the largest count of elements on common pages. Services like\u00a0<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.webpagetest.org\/\">webpagetest.org<\/a>\u00a0or\u00a0<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/gtmetrix.com\/\">gtmetrix.com<\/a>\u00a0can count elements on a page.<\/p>\n<h3 id=\"h-keepalivetimeout\" class=\"wp-block-heading\">KeepAliveTimeout<\/h3>\n<p class=\"wp-block-paragraph\">This directive is measured in seconds and will remain idle waiting for additional requests from its initiator. Since these types of connections are only accessible to their initiator, we want to keep\u00a0<em>KeepAliveTimeout<\/em>\u00a0very low. A low value prevents too many\u00a0<em>KeepAlive<\/em>\u00a0connections from locking out new visitors due to connection priority.<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#serverlimit\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy entered loaded alignnone wp-image-327166\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-9-min.avif\" alt=\"\" width=\"291\" height=\"173\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-9-min.avif\" data-ll-status=\"loaded\" \/><\/a><\/figure>\n<p class=\"wp-block-paragraph\">A large\u00a0<em>MaxKeepAliveRequests<\/em>\u00a0directive with a very low\u00a0<em>KeepAliveTimeout<\/em>\u00a0allows active visitors to reuse connections while also quickly recovering threads from idle visitors:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Configuration:\u00a0<\/strong>Set\u00a0<em>MaxKeepAliveRequests<\/em>\u00a0to 500+, Set\u00a0<em>KeepAliveTimeout<\/em>\u00a0to 2<\/li>\n<li><strong>Requirements:\u00a0<\/strong>Works best on MPM Event.<\/li>\n<\/ul>\n<hr class=\"wp-block-separator has-css-opacity\" \/>\n<h3 id=\"h-mpm-event-worker-optimization\" class=\"wp-block-heading\"><strong>MPM Event\/Worker Optimization<\/strong><\/h3>\n<p class=\"wp-block-paragraph\">This section details the use and performance considerations that are essential when running Worker based MPMs, including both MPM Event and MPM Worker. These MPMs are considered multi-threaded solutions and some directives behave differently based on the loaded MPM. The information provided in this section is only a portion about Worker based MPMs.<\/p>\n<p class=\"wp-block-paragraph\">In Worker based MPMs:\u00a0<em>ServerLimit<\/em>,\u00a0<em>ThreadsPerChild<\/em>, and\u00a0<em>MaxRequestWorkers<\/em>\u00a0are intrinsically linked with each other. It is essential to understand the role of each one and how changing one affects the others. The following directives govern the fine-tuning of the thread handling capabilities of Apache web servers.<\/p>\n<h4 id=\"h-mpm-worker-and-mpm-event\" class=\"wp-block-heading\">MPM Worker and MPM Event<\/h4>\n<p class=\"wp-block-paragraph\">The two modules, MPM Event, and MPM Worker for most intents and purposes operate identically. The difference is apparent in the way each handles\u00a0<em>KeepAlive<\/em>\u00a0requests. The MPM Worker locks threads for the duration of the KeepAlive process and directly affects the number of available threads able to handle new requests. The MPM Event uses a Listener thread for each child. These Listener threads handle standard requests, and\u00a0<em>KeepAlive<\/em>\u00a0requests alike meaning thread locking will not reduce the capacity of the server. Without thread locking, MPM Event is the superior choice but only in Apache 2.4. Before Apache 2.4 the MPM Event was unstable and prone to problems.<\/p>\n<h4 id=\"h-serverlimit\" class=\"wp-block-heading\">ServerLimit<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"alignleft\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#serverlimit\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-11-min.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-11-min.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-11-min.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-11-min.webp \" \/><\/picture><\/a><picture><img decoding=\"async\" class=\"wp-image-18474 sp-no-webp lazy entered loaded\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-11-min.jpg\" alt=\"ServerLimit\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-11-min.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\"><em>ServerLimit<\/em>\u00a0represents the upper limit of children Apache is allowed. The practical usage for\u00a0<em>ServerLimit<\/em>\u00a0is creating a hard ceiling in Apache to protect against input errors with\u00a0<em>MaxRequestWorkers<\/em>. The cap prevents spawning vastly more children than a system can handle, resulting in downtime, revenue loss, reputation loss or even data loss.<\/p>\n<p class=\"wp-block-paragraph\"><em>ServerLimit<\/em>\u00a0ties in directly with the\u00a0<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.liquidweb.com\/blog\/apache-performance-tuning-swap-memory\/\">thrashing point<\/a>\u00a0discussed earlier in this article. The thrashing point is the maximum number of children Apache can run before memory usage tips the scale into perpetual swap. Match the\u00a0<em>ServerLimit<\/em>\u00a0to the calculated thrashing point to safeguard the server.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"alignright\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#threadsperchild\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-12-min.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-12-min.avif \" \/><\/picture><\/a><picture><img decoding=\"async\" class=\"wp-image-18477 sp-no-webp lazy entered loaded\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-12-min.jpg\" alt=\"ThreadsPerChild\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-12-min.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/figure>\n<\/div>\n<h4 id=\"h-threadsperchild\" class=\"wp-block-heading\">ThreadsPerChild<\/h4>\n<p class=\"wp-block-paragraph\">Used to define the limit of threads that each Apache child can manage. Every thread running can handle a single request. The default of 25 works well for most cases and is a fair balance between children and threads.<\/p>\n<p class=\"wp-block-paragraph\">There is an upper limit on this directive as well, and the limit is controlled by the\u00a0<em>ThreadLimit<\/em>\u00a0directive, which defaults to 64 threads. The adjustments to increase\u00a0<em>ThreadsPerChild<\/em>\u00a0past 64 threads also need to be made to\u00a0<em>ThreadLimit<\/em>.<\/p>\n<p class=\"wp-block-paragraph\">Increasing this value allows each child to handle more requests keeping memory consumption down while allowing a larger\u00a0<em>MaxRequestWorkers<\/em>\u00a0directive. A key benefit of running more threads within each child is shared memory cache access. Threads from one child cannot access caches from another child. Boosting the number of threads per child squeezes out more performance due to this sharing of cache data. The major downside for increased threads per child occurs during child recycling. The capacity of the server is diminished by the number of threads configured for each child when that child process is eventually recycled (graceful restart).<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventWorker.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventWorker.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventWorker.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventWorker.webp \" \/><img decoding=\"async\" class=\"wp-image-18478 sp-no-webp lazy entered loaded aligncenter\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventWorker.jpg\" alt=\"MPM Event\/Worker\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventWorker.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">Inversely the opposite reaction is achieved by lowering\u00a0<em>ThreadsPerChild<\/em>. Fewer threads per child require more children to run an equal amount of\u00a0<em>MaxRequestWorkers<\/em>. Since children are full copies of Apache, this increases Apache\u2019s overall memory footprint but reduces the impact when recycling children. Fewer threads mean fewer potential \u201cstuck\u201d threads during the recycle procedure, keeping the higher capacity of requests available overall children. Having fewer threads per child provides increased shared memory isolation. For instance, dropping\u00a0<em>ThreadsPerChild<\/em>\u00a0to 1 gives the same request isolation of MPM Prefork but also inherits its massive performance tax as well, requiring one child per one request.<\/p>\n<p class=\"wp-block-paragraph\">When setting\u00a0<em>ThreadsPerChild<\/em>\u00a0always consider the server environment and hardware:<\/p>\n<ul class=\"wp-block-list\">\n<li>A memory-heavy shared server hosting numerous independent accounts might opt for a lower\u00a0<em>ThreadsPerChild<\/em>, reducing the potential impact of one user affecting another.<\/li>\n<li>A dedicated Apache server in a high-capacity load balanced configuration can choose to increase\u00a0<em>ThreadsPerChild<\/em>\u00a0significantly for a better overall performance of each thread.<\/li>\n<\/ul>\n<h4 id=\"h-threadlimit\" class=\"wp-block-heading\">ThreadLimit<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"alignleft\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-14-min.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-14-min.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-14-min.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-14-min.webp \" \/><img decoding=\"async\" class=\"wp-image-18482 sp-no-webp lazy entered loaded\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-14-min.jpg\" alt=\"ThreadLimit\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP-14-min.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">Used to set the maximum value of\u00a0<em>ThreadsPerChild<\/em>. This directive is a hard ceiling for\u00a0<em>ThreadsPerChild<\/em>. It helps protect against typographical errors with the\u00a0<em>ThreadsPerChild<\/em>\u00a0directive which could quickly spin a server out of control if too many threads are allowed due to an input error. This setting need to be adjusted in some high-end servers when the system needs more than the default of 64 threads per child.<\/p>\n<h4 id=\"h-maxrequestworkers-maxclients\" class=\"wp-block-heading\">MaxRequestWorkers \/ MaxClients<\/h4>\n<p class=\"wp-block-paragraph\">The directive sets the limit for active worker threads across all running children and acts as a soft ceiling with\u00a0<em>ServerLimit<\/em>\u00a0taking control as the hard limit. When the number of total running threads has reached or exceeded\u00a0<em>MaxRequestWorkers<\/em>, Apache no longer spawns new children.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#maxrequestworkers\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-1-min.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-1-min.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-1-min.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-1-min.webp \" \/><\/picture><\/a><picture><img decoding=\"async\" class=\"wp-image-18486 sp-no-webp lazy entered loaded aligncenter\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-1-min.jpg\" alt=\"MaxRequestWorkers\/MaxClients\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-1-min.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">Determining the\u00a0<em>MaxRequestWorkers<\/em>\u00a0is a critical part of server optimization. An optimal setting is based on several changing variables. This means its configuration needs to be reevaluated and tailored periodically over time, changed by watching traffic habits and system resource usage. The Apache status Scoreboard is an effective tool for analysis of Apache performance.<\/p>\n<p class=\"wp-block-paragraph\">It is typical of Worker based MPM systems to run an isolated third-party PHP handler like\u00a0<strong>Mod_fcgid<\/strong>,\u00a0<strong>PHP-FPM<\/strong>, and\u00a0<strong>mod_lsapi<\/strong>. These modules are responsible for processing PHP code outside of Apache and frees up Apache to handle all other non-PHP requests such as HTML, TEXT, CSS, Images, etc\u2026 These requests are far less taxing on server resources which allows Apache to handle larger volumes of requests, such as those beyond 400\u00a0<em>MaxRequestWorkers<\/em>.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min.webp \" \/><img decoding=\"async\" class=\"wp-image-18488 sp-no-webp lazy entered loaded aligncenter\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min.jpg\" alt=\"MPM Event\/Worker2\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/figure>\n<\/div>\n<h4 id=\"h-minsparethreads\" class=\"wp-block-heading\">MinSpareThreads<\/h4>\n<p class=\"wp-block-paragraph\">The least number of Threads that should remain open, waiting for new requests.\u00a0<em>MinSpareThreads<\/em>\u00a0is a multiple of\u00a0<em>ThreadsPerChild<\/em>\u00a0and cannot exceed\u00a0<em>MaxSpareThreads<\/em>, though it can match it.<\/p>\n<p class=\"wp-block-paragraph\">As s rule of thumb, set\u00a0<em>MinSpareThreads\u00a0<\/em>to equal 50% of\u00a0<em>MaxRequestWorkers<\/em>.<\/p>\n<p class=\"wp-block-paragraph\">Spare threads are idle workers threads. These threads are merely waiting for new incoming requests and are governed by the Apache child process that spawned them. If there are less available threads than\u00a0<em>MinSpareThreads<\/em>, The Apache parent will generate a new child with another\u00a0<em>ThreadsPerChild<\/em>\u00a0worth of threads.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min-1.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min-1.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min-1.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min-1.webp \" \/><img decoding=\"async\" class=\"wp-image-18494 sp-no-webp lazy entered loaded aligncenter\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min-1.jpg\" alt=\"MinSpareThreads\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-3-min-1.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/figure>\n<\/div>\n<h3 id=\"h-nbsp-0\" class=\"wp-block-heading\"><\/h3>\n<h4 id=\"h-maxsparethreads\" class=\"wp-block-heading\">MaxSpareThreads<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#threadsperchild\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-5-min-1.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-5-min-1.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-5-min-1.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-5-min-1.webp \" \/><\/picture><\/a><picture><img decoding=\"async\" class=\"wp-image-18502 sp-no-webp lazy entered loaded aligncenter\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-5-min-1.jpg\" alt=\"MaxSpareThreads\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-5-min-1.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">This directive governs the total number of idle threads allowed on the server across all children. Any threads above this limit direct their parent to shut down to reduce memory consumption during off-peak hours.<\/p>\n<p class=\"wp-block-paragraph\">Having a limit to the number of idle open threads is excellent for smaller servers with hardware constraints. However, it mostly unneeded on today\u2019s modernizing hardware.<\/p>\n<p class=\"wp-block-paragraph\">It is recommended that you set up Apache as an open throttle is a high-performance configuration for servers with significant RAM and multiple CPU cores. When running the open throttle configuration, all available threads become available at all time. Apache\u2019s memory usage will stay near its peak at all times, a side effect due to running all the configured children into memory preemptively. This configuration will produce the best possible response times from Apache by maintaining persistent open connections ready to do work and removing the overhead of spawning new processes in response to traffic surges:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Configuration:<\/strong>\u00a0Match both\u00a0<em>MinSpareThreads<\/em>\u00a0and\u00a0<em>MaxSpareThreads<\/em>\u00a0to\u00a0<em>MaxRequestWorkers<\/em>.<\/li>\n<li><strong>Requirements:<\/strong>\u00a0Make sure there is enough server RAM to run all\u00a0<em>MaxRequestWorkers\u00a0<\/em>at once.<\/li>\n<\/ul>\n<h4 id=\"h-startservers\" class=\"wp-block-heading\">StartServers<\/h4>\n<p class=\"wp-block-paragraph\">This directive governs the initial amount of children the Apache Parent process spawns when the Apache service is started or restarted. This is commonly left unchanged since Apache continuously checks the current running children in conjunction with\u00a0<em>ThreadsPerChild<\/em>\u00a0and compare it to\u00a0<em>MinSpareThreads<\/em>\u00a0to determine if more children get forked. This process is repeated perpetually, with a doubling of new children on each iteration, until\u00a0<em>MinSpareThreads<\/em>\u00a0is satisfied.<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-327172 lazy entered loaded alignleft\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-15-min-1.avif\" alt=\"\" width=\"238\" height=\"194\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-15-min-1.avif\" data-ll-status=\"loaded\" \/><\/figure>\n<p class=\"wp-block-paragraph\">As a rule of thumb, manually calculating StartServers is done by dividing\u00a0<em>MaxRequestWorkers<\/em>\u00a0by\u00a0<em>ThreadsPerChild<\/em>, rounding down to the nearest whole number. This process forces all children to be created without delay at startup and begins handling requests immediately. This aspect is especially useful in modern Apache servers which require periodic restarts to load in directive changes.<\/p>\n<h3 id=\"h-maxconnectionsperchild-maxrequestsperchild\" class=\"wp-block-heading\">MaxConnectionsPerChild \/ MaxRequestsPerChild<\/h3>\n<p class=\"wp-block-paragraph\">The number of requests a single Apache child process can handle equals a cumulative total on the child server across all threads it controls. Each request handled by a thread counts toward this limit to its parent. Once the child server has reached its limit, the child is then recycled.<\/p>\n<p class=\"wp-block-paragraph\">This directive is a stop-gap for accidental memory leaks. Some code executed through Apache threads may contain memory leaks. Leaked memory are portions of memory that subprocess failed to release properly, so they are inaccessible to any outside processes. The longer a leaking program is left running, the more memory it will leak. Setting a\u00a0<em>MaxConnectionsPerChild<\/em>\u00a0limit is a specific method for assuring Apache is periodically recycling programs to reduce the impact of leaked memory on the system. When using external code handlers like\u00a0<strong>Mod_fcgid<\/strong>,\u00a0<strong>PHP-FPM<\/strong>\u00a0or\u00a0<strong>mod_lsapi<\/strong>, it becomes necessary to set\u00a0<em>MaxConnectionsPerChild<\/em>\u00a0to 0 (unlimited), doing so prevents periodic error pages caused by Apache terminating threads prematurely.<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-327173 lazy entered loaded aligncenter\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/Untitled-drawing-6-min.avif\" alt=\"\" width=\"544\" height=\"360\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/Untitled-drawing-6-min.avif\" data-ll-status=\"loaded\" \/><\/figure>\n<p class=\"wp-block-paragraph\">As a rule of thumb, if the server encounters a memory leak never set the MaxConnectionsPerChild \/ MaxRequestsPerChild too low, instead start with 10,000 and reduce it incrementally.<\/p>\n<hr class=\"wp-block-separator has-css-opacity\" \/>\n<h3 id=\"h-mpm-prefork-optimization\" class=\"wp-block-heading\"><b>MPM Prefork Optimization<\/b><\/h3>\n<p class=\"wp-block-paragraph\">This MPM Prefork section details the use and performance considerations for various directives when running this module. This MPM is a non-threaded multi-processor designed for compatibility. It consists of a single Apache parent process, which is used to govern all new Apache processes also known as children. The following directives show how Apache is capable of performance tuning when using MPM Prefork. Unlike Worker based MPMs, optimizing MPM Prefork is generally simple and straightforward. There is a 1:1 ratio of Apache processes to incoming requests. However, MPM Prefork does not scale well with hardware and the more traffic it encounters, the more hardware it will need to keep up with the pace. It should be noted that some directives behave differently based on which MPM is loaded. The information provided in this section is only the portion about MPM Prefork.<\/p>\n<h4>MaxRequestWorkers \/ MaxClients<\/h4>\n<p><img decoding=\"async\" class=\"wp-image-18509 sp-no-webp lazy entered loaded aligncenter\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-7-min.jpg\" alt=\"MaxRequestWorkers \/ MaxClients\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/Untitled-drawing-7-min.jpg\" data-ll-status=\"loaded\" \/><\/p>\n<p class=\"wp-block-paragraph\">Used to control the upper limit of children that the Apache parent server is allowed to have in memory at one time. These children (also called workers) handle requests on a 1:1 ratio. This translates into the maximum number of simultaneous requests the server can handle.<\/p>\n<p class=\"wp-block-paragraph\">If this directive is too low, Apache under-utilizes the available hardware which translates to wasted money and long delays in page load times during peak hours. Alternatively, if this directive is too high, Apache outpaces the underlying hardware sending the system into thrashing (link to thrashing article) scenario which can lead to server crashes and potential data loss.<\/p>\n<h4 id=\"h-minspareservers\" class=\"wp-block-heading\">MinSpareServers<\/h4>\n<p class=\"wp-block-paragraph\">This directive defines a minimum number of spare children the Apache parent process can maintain in its memory. An additional server is a preforked idle Apache child that is ready to respond to a new incoming request. Having idle children waiting for new requests is essential for providing the fastest server response times. When the total idle children on the server drop below this value, a new child is preforked at the rate of one per second until this directive is satisfied. The \u201cone per second\u201d rule is in place to prevent surges of the creation process that overload the server, however, this failsafe comes at a cost. The one per second spawn rate is particularly slow when it comes to handling page requests. So it\u2019s highly beneficial to make sure enough children are preforked and ready to handle incoming requests.<\/p>\n<figure class=\"wp-block-image size-full\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#maxrequestworkers\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-327174 lazy entered loaded alignright\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-16-min.avif\" alt=\"\" width=\"294\" height=\"211\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-16-min.avif\" data-ll-status=\"loaded\" \/><\/a><\/figure>\n<p class=\"wp-block-paragraph\">\u00a0As a rule of thumb, never set this to zero. Setting this to 25% of\u00a0<em>MaxRequestWorkers<\/em>\u00a0ensures plenty resources are ready and waiting for requests.<\/p>\n<h4 id=\"h-maxspareservers\" class=\"wp-block-heading\">MaxSpareServers<\/h4>\n<p class=\"wp-block-paragraph\"><em>MasSpareServers<\/em>\u00a0controls the maximum number of idle Apache child servers running at one time. An idle child is one which is not currently handling a request but waiting for a new request. When there are more than\u00a0<em>MaxSpareServers<\/em>\u00a0idle children, Apache kills off the excess.<\/p>\n<p class=\"wp-block-paragraph\">If the\u00a0<em>MaxSpareServers<\/em>\u00a0value is less than\u00a0<em>MinSpareServers<\/em>, Apache will automatically adjust\u00a0<em>MaxSpareServers<\/em>\u00a0to equal\u00a0<em>MinSpareServers<\/em>\u00a0plus one.<\/p>\n<p class=\"wp-block-paragraph\">Like with\u00a0<i>MinSpareServers<\/i>, this value should always be altered with available server resources in mind.<\/p>\n<figure class=\"wp-block-image size-full\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#threadsperchild\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-327177 lazy entered loaded aligncenter\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-17-min.avif\" alt=\"\" width=\"294\" height=\"190\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-17-min.avif\" data-ll-status=\"loaded\" \/><\/a><\/figure>\n<p class=\"wp-block-paragraph\">As a rule of thumb, set this to double the value of\u00a0<em>MinSpareServers<\/em>.<\/p>\n<p class=\"wp-block-paragraph\">Remember, configuring Apache as an open throttle is a high-performance configuration for servers with significant RAM and multiple CPU cores. When running the open throttle configuration, all available Apache children become available at all times. As a side effect of running open throttle, the Apache memory usage will stay near its peak at all times, due to running all the configured children into memory preemptively. This configuration will produce the best possible response times by maintaining persistent open connections. Furthermore, in response to traffic surges, it removes the overhead that comes from spawning new processes:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Configuration:<\/strong>\u00a0Match both\u00a0<em>MinSpareServers<\/em>\u00a0and\u00a0<em>MaxSpareServers<\/em>\u00a0to\u00a0<em>MaxRequestWorkers<\/em>.<\/li>\n<li><strong>Requirements:<\/strong>\u00a0Make sure there is enough server RAM to run all\u00a0<em>MaxRequestWorkers<\/em>\u00a0at once.<\/li>\n<\/ul>\n<h4 id=\"h-startservers-0\" class=\"wp-block-heading\">StartServers<\/h4>\n<p class=\"wp-block-paragraph\">Created at startup, are the initial amount of Apache child servers.<\/p>\n<p class=\"wp-block-paragraph\">This seldom changed directive only impacts Apache startup and restart processes. Generally not altered because Apache uses internal logic to work out how many child servers should be running.<\/p>\n<p class=\"wp-block-paragraph\">Many modern servers periodically restart Apache to address configuration changes, rotate log files or other internal processes. When this occurs during a high load traffic surge, every bit of downtime matters. You can manually set the\u00a0<em>StartServers<\/em>\u00a0directive to mirror that of your\u00a0<em>MinSpareServers<\/em>\u00a0to shave off time from the Apache startup.<\/p>\n<figure class=\"wp-block-image size-full\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#maxrequestworkers\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-327179 lazy entered loaded\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-18-min-1.avif\" alt=\"\" width=\"294\" height=\"190\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/MPM-EventMP-18-min-1.avif\" data-ll-status=\"loaded\" \/><\/a><\/figure>\n<p class=\"wp-block-paragraph\">The\u00a0<em>StartServers<\/em>\u00a0directive should mirror that of MinSpareServers.<\/p>\n<h4 id=\"h-serverlimit-0\" class=\"wp-block-heading\">ServerLimit<\/h4>\n<div class=\"wp-block-image\">\n<figure class=\"alignright\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#serverlimit\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/ServerLimit.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/ServerLimit.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/ServerLimit.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/ServerLimit.webp \" \/><img decoding=\"async\" class=\"wp-image-18563 sp-no-webp lazy entered loaded\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/ServerLimit.jpg\" alt=\"ServerLimit Default Setting\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/ServerLimit.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/a><\/figure>\n<\/div>\n<p class=\"wp-block-paragraph\">The\u00a0<em>ServerLimit<\/em>\u00a0directive represents the upper limit of\u00a0<em>MaxRequestWorkers<\/em>. This setting is generally used as a safeguard or ceiling against input errors when modifying\u00a0<em>MaxRequestWorkers<\/em>.<\/p>\n<p class=\"wp-block-paragraph\">It becomes necessary to adjusted\u00a0<em>ServerLimit<\/em>\u00a0when the server is expected to handle more than the default of 256 requests simultaneously.<\/p>\n<p class=\"wp-block-paragraph\"><em>ServerLimit<\/em>\u00a0ties in directly with the thrashing point. The thrashing point is the maximum number of children Apache can run before memory usage tips the scale into perpetual swap. Match the\u00a0<em>ServerLimit<\/em>\u00a0to the calculated thrashing point to safeguard the server.<\/p>\n<p class=\"wp-block-paragraph\">Note that increasing\u00a0<em>ServerLimit<\/em>\u00a0is not recommended with MPM Prefork. Running more than 256 simultaneous requests is hardware intensive when using the MPM Prefork module.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"alignright\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/httpd.apache.org\/docs\/current\/mod\/mpm_common.html#threadsperchild\"><picture><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP3-min.avif \" type=\"image\/avif\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP3-min.avif \" \/><source srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP3-min.webp \" type=\"image\/webp\" data-srcset=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP3-min.webp \" \/><img decoding=\"async\" class=\"wp-image-18565 sp-no-webp lazy entered loaded\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP3-min.jpg\" alt=\"ThreadsPerChild Default Settings\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/03\/MPM-EventMP3-min.jpg\" data-ll-status=\"loaded\" \/><\/picture><\/a><\/figure>\n<\/div>\n<h4 id=\"h-maxconnectionsperchild-maxrequestsperchild-0\" class=\"wp-block-heading\">MaxConnectionsPerChild \/ MaxRequestsPerChild<\/h4>\n<p class=\"wp-block-paragraph\">This directive equals the number of requests a single Apache child server can handle.<\/p>\n<p class=\"wp-block-paragraph\">This directive is a stop-gap for accidental memory leaks. Code executed through Apache may contain faults which leak memory. These leaks add up over time making less and less of the shared memory pool of the child usable. The way to recover from leaked memory is to recycle the affected Apache child process. Setting a\u00a0<em>MaxConnectionsPerChild<\/em>\u00a0limit will protect from this type of memory leakage.<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-327180 lazy entered loaded aligncenter\" src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/Untitled-drawing-6-min-1.avif\" alt=\"\" width=\"544\" height=\"360\" data-src=\"https:\/\/www.liquidweb.com\/wp-content\/uploads\/2024\/07\/Untitled-drawing-6-min-1.avif\" data-ll-status=\"loaded\" \/><\/figure>\n<p class=\"wp-block-paragraph\">Remember never to set this too low. If the server encounters memory leak issues start with 10,000 and reduce incrementally.<\/p>\n<div class=\"pdfprnt-buttons pdfprnt-buttons-post pdfprnt-bottom-right\"><a href=\"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/posts\/473387?print=print\" class=\"pdfprnt-button pdfprnt-button-print\" target=\"_blank\" ><img decoding=\"async\" src=\"https:\/\/www.harianaceh.co.id\/apps\/pdf-print\/images\/print.png\" alt=\"image_print\" title=\"Print Content\" \/><\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>How directives behave and which directives are mainly available hinges on the loaded MPM. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how Apache addresses multiprocessing<\/p>\n","protected":false},"author":1,"featured_media":473390,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_disable_autopaging":false},"categories":[61,98452],"tags":[92190,329153],"series":[],"class_list":["post-473387","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknologi","category-tutorial","tag-apache","tag-mpm"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO Pro 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"How directives behave and which directives are mainly available hinges on the loaded MPM. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how Apache addresses multiprocessing\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Redaksi\"\/>\n\t<meta name=\"p:domain_verify\" content=\"589a976c546e720e3c097582d1f4946f\" \/>\n\t<meta name=\"keywords\" content=\"apache,mpm,teknologi,tutorial\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"id_ID\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Harian Aceh Indonesia - HARIANACEH.co.id\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide\" \/>\n\t\t<meta property=\"og:description\" content=\"How directives behave and which directives are mainly available hinges on the loaded MPM. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how Apache addresses multiprocessing\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.harianaceh.co.id\/media\/2025\/10\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.harianaceh.co.id\/media\/2025\/10\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2016-10-28T01:00:53+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-10-27T22:04:43+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/harianaceh.indonesia\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/harianaceh.indonesia\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@harianacehcoid\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide\" \/>\n\t\t<meta name=\"twitter:description\" content=\"How directives behave and which directives are mainly available hinges on the loaded MPM. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how Apache addresses multiprocessing\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@harianacehcoid\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.harianaceh.co.id\/media\/2025\/10\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg\" \/>\n\t\t<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t\t<meta name=\"twitter:data1\" content=\"Redaksi\" \/>\n\t\t<meta name=\"twitter:label2\" content=\"Estimasi waktu baca\" \/>\n\t\t<meta name=\"twitter:data2\" content=\"16 menit\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id#listItem\",\"position\":1,\"name\":\"Beranda\",\"item\":\"https:\\\/\\\/www.harianaceh.co.id\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/kanal\\\/teknologi\\\/#listItem\",\"name\":\"TEKNOLOGI\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/kanal\\\/teknologi\\\/#listItem\",\"position\":2,\"name\":\"TEKNOLOGI\",\"item\":\"https:\\\/\\\/www.harianaceh.co.id\\\/kanal\\\/teknologi\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/kanal\\\/teknologi\\\/tutorial\\\/#listItem\",\"name\":\"TUTORIAL\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id#listItem\",\"name\":\"Beranda\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/kanal\\\/teknologi\\\/tutorial\\\/#listItem\",\"position\":3,\"name\":\"TUTORIAL\",\"item\":\"https:\\\/\\\/www.harianaceh.co.id\\\/kanal\\\/teknologi\\\/tutorial\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#listItem\",\"name\":\"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/kanal\\\/teknologi\\\/#listItem\",\"name\":\"TEKNOLOGI\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#listItem\",\"position\":4,\"name\":\"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/kanal\\\/teknologi\\\/tutorial\\\/#listItem\",\"name\":\"TUTORIAL\"}}]},{\"@type\":\"NewsArticle\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#newsarticle\",\"name\":\"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide\",\"headline\":\"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide\",\"author\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/author\\\/redaksi\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.harianaceh.co.id\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg\",\"width\":1024,\"height\":640,\"caption\":\"Apache MPM Directives Explained- The Ultimate Performance Tuning Guide (2025). FOTO\\\/Net. \\u24b8 Hak cipta foto di atas dikembalikan sesungguhnya kepada pemilik foto\"},\"datePublished\":\"2016-10-28T08:00:53+07:00\",\"dateModified\":\"2025-10-28T05:04:43+07:00\",\"inLanguage\":\"id-ID\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#webpage\"},\"articleSection\":\"TEKNOLOGI, TUTORIAL, apache, MPM\",\"dateline\":\"Dipublish pada Oktober 28, 2016.\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/#organization\",\"name\":\"Harian Aceh Indonesia\",\"description\":\"HARIANACEH.co.id\",\"url\":\"https:\\\/\\\/www.harianaceh.co.id\\\/\",\"email\":\"desk.harianaceh@gmail.com\",\"telephone\":\"+628972920416\",\"foundingDate\":\"2013-06-10\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"value\":10},\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.harianaceh.co.id\\\/wp-content\\\/uploads\\\/2022\\\/04\\\/logo-hai-312x55-1.png\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#organizationLogo\",\"width\":312,\"height\":55,\"caption\":\"Logo Harian Aceh Indonesia\"},\"image\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/harianaceh.indonesia\",\"https:\\\/\\\/www.x.com\\\/harianacehcoid\",\"https:\\\/\\\/www.instagram.com\\\/harianaceh.indonesia\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@harianaceh.indonesia\",\"https:\\\/\\\/id.pinterest.com\\\/harianacehindonesia\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@kantorberitahai\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/harian-aceh-indonesia\\\/\",\"https:\\\/\\\/www.tumblr.com\\\/harianaceh\",\"https:\\\/\\\/id.wikipedia.org\\\/wiki\\\/Harian_Aceh_Indonesia\",\"https:\\\/\\\/bsky.app\\\/profile\\\/harianaceh.bsky.social\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/author\\\/redaksi\\\/#author\",\"url\":\"https:\\\/\\\/www.harianaceh.co.id\\\/author\\\/redaksi\\\/\",\"name\":\"Redaksi\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a3fb95bba4689db9e247ba8ff8b6a9b9b2da73b1d9ab6661dd7565f4f87a54e?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Redaksi\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/harianaceh.indonesia\",\"https:\\\/\\\/www.twitter.com\\\/harianacehcoid\",\"https:\\\/\\\/www.instagram.com\\\/harianacehindonesia\",\"https:\\\/\\\/www.tiktok.com\\\/@harianaceh.indonesia\",\"https:\\\/\\\/www.pinterest.com\\\/harianaceh\",\"https:\\\/\\\/www.youtube.com\\\/@kantorberitahai\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/harian-aceh-indonesia\",\"https:\\\/\\\/harianacehindonesia.tumblr.com\",\"https:\\\/\\\/id.wikipedia.org\\\/wiki\\\/Harian_Aceh_Indonesia\",\"https:\\\/\\\/bsky.app\\\/profile\\\/harianaceh.bsky.social\",\"https:\\\/\\\/www.threads.com\\\/@harianaceh.indonesia\"]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#webpage\",\"url\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/\",\"name\":\"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide\",\"description\":\"How directives behave and which directives are mainly available hinges on the loaded MPM. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how Apache addresses multiprocessing\",\"inLanguage\":\"id-ID\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/author\\\/redaksi\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/author\\\/redaksi\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.harianaceh.co.id\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#mainImage\",\"width\":1024,\"height\":640,\"caption\":\"Apache MPM Directives Explained- The Ultimate Performance Tuning Guide (2025). FOTO\\\/Net. \\u24b8 Hak cipta foto di atas dikembalikan sesungguhnya kepada pemilik foto\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/2016\\\/10\\\/28\\\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\\\/#mainImage\"},\"datePublished\":\"2016-10-28T08:00:53+07:00\",\"dateModified\":\"2025-10-28T05:04:43+07:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/#website\",\"url\":\"https:\\\/\\\/www.harianaceh.co.id\\\/\",\"name\":\"Harian Aceh Indonesia\",\"description\":\"HARIANACEH.co.id\",\"inLanguage\":\"id-ID\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.harianaceh.co.id\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>Apache MPM Directives Explained: The Ultimate Performance Tuning Guide<\/title>\n\n","aioseo_head_json":{"title":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide","description":"How directives behave and which directives are mainly available hinges on the loaded MPM. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how Apache addresses multiprocessing","canonical_url":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/","robots":"max-image-preview:large","keywords":"apache,mpm,teknologi,tutorial","webmasterTools":{"p:domain_verify":"589a976c546e720e3c097582d1f4946f","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id#listItem","position":1,"name":"Beranda","item":"https:\/\/www.harianaceh.co.id","nextItem":{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/#listItem","name":"TEKNOLOGI"}},{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/#listItem","position":2,"name":"TEKNOLOGI","item":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/tutorial\/#listItem","name":"TUTORIAL"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id#listItem","name":"Beranda"}},{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/tutorial\/#listItem","position":3,"name":"TUTORIAL","item":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/tutorial\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#listItem","name":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/#listItem","name":"TEKNOLOGI"}},{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#listItem","position":4,"name":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide","previousItem":{"@type":"ListItem","@id":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/tutorial\/#listItem","name":"TUTORIAL"}}]},{"@type":"NewsArticle","@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#newsarticle","name":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide","headline":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide","author":{"@id":"https:\/\/www.harianaceh.co.id\/profil\/redaksi\/#author"},"publisher":{"@id":"https:\/\/www.harianaceh.co.id\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.harianaceh.co.id\/media\/2025\/10\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg","width":1024,"height":640,"caption":"Apache MPM Directives Explained- The Ultimate Performance Tuning Guide (2025). FOTO\/Net. \u24b8 Hak cipta foto di atas dikembalikan sesungguhnya kepada pemilik foto"},"datePublished":"2016-10-28T08:00:53+07:00","dateModified":"2025-10-28T05:04:43+07:00","inLanguage":"id-ID","mainEntityOfPage":{"@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#webpage"},"isPartOf":{"@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#webpage"},"articleSection":"TEKNOLOGI, TUTORIAL, apache, MPM","dateline":"Dipublish pada Oktober 28, 2016."},{"@type":"Organization","@id":"https:\/\/www.harianaceh.co.id\/#organization","name":"Harian Aceh Indonesia","description":"HARIANACEH.co.id","url":"https:\/\/www.harianaceh.co.id\/","email":"desk.harianaceh@gmail.com","telephone":"+628972920416","foundingDate":"2013-06-10","numberOfEmployees":{"@type":"QuantitativeValue","value":10},"logo":{"@type":"ImageObject","url":"https:\/\/www.harianaceh.co.id\/media\/2022\/04\/logo-hai-312x55-1.png","@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#organizationLogo","width":312,"height":55,"caption":"Logo Harian Aceh Indonesia"},"image":{"@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/harianaceh.indonesia","https:\/\/www.x.com\/harianacehcoid","https:\/\/www.instagram.com\/harianaceh.indonesia\/","https:\/\/www.tiktok.com\/@harianaceh.indonesia","https:\/\/id.pinterest.com\/harianacehindonesia\/","https:\/\/www.youtube.com\/@kantorberitahai","https:\/\/www.linkedin.com\/company\/harian-aceh-indonesia\/","https:\/\/www.tumblr.com\/harianaceh","https:\/\/id.wikipedia.org\/wiki\/Harian_Aceh_Indonesia","https:\/\/bsky.app\/profile\/harianaceh.bsky.social"]},{"@type":"Person","@id":"https:\/\/www.harianaceh.co.id\/profil\/redaksi\/#author","url":"https:\/\/www.harianaceh.co.id\/profil\/redaksi\/","name":"Redaksi","image":{"@type":"ImageObject","@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/9a3fb95bba4689db9e247ba8ff8b6a9b9b2da73b1d9ab6661dd7565f4f87a54e?s=96&d=mm&r=g","width":96,"height":96,"caption":"Redaksi"},"sameAs":["https:\/\/www.facebook.com\/harianaceh.indonesia","https:\/\/www.twitter.com\/harianacehcoid","https:\/\/www.instagram.com\/harianacehindonesia","https:\/\/www.tiktok.com\/@harianaceh.indonesia","https:\/\/www.pinterest.com\/harianaceh","https:\/\/www.youtube.com\/@kantorberitahai","https:\/\/www.linkedin.com\/company\/harian-aceh-indonesia","https:\/\/harianacehindonesia.tumblr.com","https:\/\/id.wikipedia.org\/wiki\/Harian_Aceh_Indonesia","https:\/\/bsky.app\/profile\/harianaceh.bsky.social","https:\/\/www.threads.com\/@harianaceh.indonesia"]},{"@type":"WebPage","@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#webpage","url":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/","name":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide","description":"How directives behave and which directives are mainly available hinges on the loaded MPM. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how Apache addresses multiprocessing","inLanguage":"id-ID","isPartOf":{"@id":"https:\/\/www.harianaceh.co.id\/#website"},"breadcrumb":{"@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#breadcrumblist"},"author":{"@id":"https:\/\/www.harianaceh.co.id\/profil\/redaksi\/#author"},"creator":{"@id":"https:\/\/www.harianaceh.co.id\/profil\/redaksi\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.harianaceh.co.id\/media\/2025\/10\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg","@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#mainImage","width":1024,"height":640,"caption":"Apache MPM Directives Explained- The Ultimate Performance Tuning Guide (2025). FOTO\/Net. \u24b8 Hak cipta foto di atas dikembalikan sesungguhnya kepada pemilik foto"},"primaryImageOfPage":{"@id":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/#mainImage"},"datePublished":"2016-10-28T08:00:53+07:00","dateModified":"2025-10-28T05:04:43+07:00"},{"@type":"WebSite","@id":"https:\/\/www.harianaceh.co.id\/#website","url":"https:\/\/www.harianaceh.co.id\/","name":"Harian Aceh Indonesia","description":"HARIANACEH.co.id","inLanguage":"id-ID","publisher":{"@id":"https:\/\/www.harianaceh.co.id\/#organization"}}]},"og:locale":"id_ID","og:site_name":"Harian Aceh Indonesia - HARIANACEH.co.id","og:type":"article","og:title":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide","og:description":"How directives behave and which directives are mainly available hinges on the loaded MPM. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how Apache addresses multiprocessing","og:url":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/","og:image":"https:\/\/www.harianaceh.co.id\/media\/2025\/10\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg","og:image:secure_url":"https:\/\/www.harianaceh.co.id\/media\/2025\/10\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg","og:image:width":1024,"og:image:height":640,"article:published_time":"2016-10-28T01:00:53+00:00","article:modified_time":"2025-10-27T22:04:43+00:00","article:publisher":"https:\/\/www.facebook.com\/harianaceh.indonesia","article:author":"https:\/\/www.facebook.com\/harianaceh.indonesia","twitter:card":"summary_large_image","twitter:site":"@harianacehcoid","twitter:title":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide","twitter:description":"How directives behave and which directives are mainly available hinges on the loaded MPM. As discussed in our previous series, MPM is short for MultiProcess Modules, and they determine the basis for how Apache addresses multiprocessing","twitter:creator":"@harianacehcoid","twitter:image":"https:\/\/www.harianaceh.co.id\/media\/2025\/10\/Apache-MPM-Directives-Explained-The-Ultimate-Performance-Tuning-Guide-2025-e1761600865243.jpg","twitter:label1":"Ditulis oleh","twitter:data1":"Redaksi","twitter:label2":"Estimasi waktu baca","twitter:data2":"16 menit"},"aioseo_meta_data":{"post_id":"473387","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":{"category":98452},"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"NewsArticle","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":"1","ai":null,"created":"2025-10-27 21:24:57","updated":"2026-09-13 01:46:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.harianaceh.co.id\" title=\"Beranda\">Beranda<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/\" title=\"TEKNOLOGI\">TEKNOLOGI<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/tutorial\/\" title=\"TUTORIAL\">TUTORIAL<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\tApache MPM Directives Explained: The Ultimate Performance Tuning Guide\n<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Beranda","link":"https:\/\/www.harianaceh.co.id"},{"label":"TEKNOLOGI","link":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/"},{"label":"TUTORIAL","link":"https:\/\/www.harianaceh.co.id\/kanal\/teknologi\/tutorial\/"},{"label":"Apache MPM Directives Explained: The Ultimate Performance Tuning Guide","link":"https:\/\/www.harianaceh.co.id\/2016\/10\/28\/apache-mpm-directives-explained-the-ultimate-performance-tuning-guide\/"}],"_links":{"self":[{"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/posts\/473387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/comments?post=473387"}],"version-history":[{"count":0,"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/posts\/473387\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/media\/473390"}],"wp:attachment":[{"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/media?parent=473387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/categories?post=473387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/tags?post=473387"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.harianaceh.co.id\/aplikasi-api\/wp\/v2\/series?post=473387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}