{"id":22158,"date":"2026-11-05T08:00:00","date_gmt":"2026-11-05T07:00:00","guid":{"rendered":"https:\/\/webhosting.de\/?p=22158"},"modified":"2026-11-05T07:23:23","modified_gmt":"2026-11-05T06:23:23","slug":"php-fpm-capacity-planning-worker-ram-requests","status":"publish","type":"post","link":"https:\/\/webhosting.de\/en\/php-fpm-kapazitaetsplanung-worker-ram-requests\/","title":{"rendered":"PHP-FPM Capacity Planning: Calculating Workers, RAM, and Concurrent Requests"},"content":{"rendered":"<div class=\"wh-article\" data-wh-layout=\"2.1.2\" style=\"width:100%;max-width:820px;margin:0 auto;color:#263b4b;font-family:inherit;font-size:18px;line-height:1.8;text-align:start;overflow-wrap:break-word;box-sizing:border-box\"><p class=\"wh-lead\" style=\"font-size:20px;line-height:1.7;color:#233746;margin:0 0 1.1em\">To plan PHP-FPM capacity effectively, first calculate how many workers will fit within the available RAM budget. Separately, estimate how many workers are needed to handle the traffic actually arriving at the pool. <strong style=\"font-weight:700;color:inherit\">pm.max_children<\/strong> It limits the number of workers available simultaneously per pool, but it is neither a visitor count nor a direct throughput value. CPU, database, and peak loads also determine which setting is viable in production. <\/p>\n<nav class=\"wh-toc\" aria-label=\"Contents of this article\" style=\"display:block;margin:28px 0 38px;padding:22px;border:1px solid #d9e4e8;border-radius:14px;background:#f4f8f8\"><p class=\"wh-toc-title\" style=\"font-size:13px;font-weight:700;letter-spacing:.08em;color:#49656b;margin:0 0 14px\">Go directly to the section<\/p><div class=\"wh-toc-grid\" style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:10px\"><div class=\"wh-toc-item\" style=\"display:block;min-width:0;margin:0;padding:0\"><a class=\"wh-toc-link\" href=\"#worker-und-anfragen\" style=\"display:block;height:100%;padding:12px 15px;border:1px solid #dce6e8;border-radius:9px;background:#fff;color:#18575b;font-size:14px;line-height:1.5;font-weight:600;text-decoration:none;box-sizing:border-box\">What Limits a PHP-FPM Worker<\/a><\/div>\n<div class=\"wh-toc-item\" style=\"display:block;min-width:0;margin:0;padding:0\"><a class=\"wh-toc-link\" href=\"#prozessmanager\" style=\"display:block;height:100%;padding:12px 15px;border:1px solid #dce6e8;border-radius:9px;background:#fff;color:#18575b;font-size:14px;line-height:1.5;font-weight:600;text-decoration:none;box-sizing:border-box\">Understanding Process Managers and Queues<\/a><\/div>\n<div class=\"wh-toc-item\" style=\"display:block;min-width:0;margin:0;padding:0\"><a class=\"wh-toc-link\" href=\"#speichergrundlagen\" style=\"display:block;height:100%;padding:12px 15px;border:1px solid #dce6e8;border-radius:9px;background:#fff;color:#18575b;font-size:14px;line-height:1.5;font-weight:600;text-decoration:none;box-sizing:border-box\">Classifying Worker Memory Correctly<\/a><\/div>\n<div class=\"wh-toc-item\" style=\"display:block;min-width:0;margin:0;padding:0\"><a class=\"wh-toc-link\" href=\"#ram-budget\" style=\"display:block;height:100%;padding:12px 15px;border:1px solid #dce6e8;border-radius:9px;background:#fff;color:#18575b;font-size:14px;line-height:1.5;font-weight:600;text-decoration:none;box-sizing:border-box\">Calculate RAM Budget and Number of Workers<\/a><\/div>\n<div class=\"wh-toc-item\" style=\"display:block;min-width:0;margin:0;padding:0\"><a class=\"wh-toc-link\" href=\"#verkehr-und-belegung\" style=\"display:block;height:100%;padding:12px 15px;border:1px solid #dce6e8;border-radius:9px;background:#fff;color:#18575b;font-size:14px;line-height:1.5;font-weight:600;text-decoration:none;box-sizing:border-box\">Estimate the number of workers needed based on requests<\/a><\/div>\n<div class=\"wh-toc-item\" style=\"display:block;min-width:0;margin:0;padding:0\"><a class=\"wh-toc-link\" href=\"#pool-konfiguration\" style=\"display:block;height:100%;padding:12px 15px;border:1px solid #dce6e8;border-radius:9px;background:#fff;color:#18575b;font-size:14px;line-height:1.5;font-weight:600;text-decoration:none;box-sizing:border-box\">Derive pool settings from the plan<\/a><\/div>\n<div class=\"wh-toc-item\" style=\"display:block;min-width:0;margin:0;padding:0\"><a class=\"wh-toc-link\" href=\"#status-und-messung\" style=\"display:block;height:100%;padding:12px 15px;border:1px solid #dce6e8;border-radius:9px;background:#fff;color:#18575b;font-size:14px;line-height:1.5;font-weight:600;text-decoration:none;box-sizing:border-box\">Monitor FPM Status and Storage<\/a><\/div>\n<div class=\"wh-toc-item\" style=\"display:block;min-width:0;margin:0;padding:0\"><a class=\"wh-toc-link\" href=\"#engpaesse-diagnostizieren\" style=\"display:block;height:100%;padding:12px 15px;border:1px solid #dce6e8;border-radius:9px;background:#fff;color:#18575b;font-size:14px;line-height:1.5;font-weight:600;text-decoration:none;box-sizing:border-box\">Investigating Slow Requests and Queues<\/a><\/div>\n<div class=\"wh-toc-item\" style=\"display:block;min-width:0;margin:0;padding:0\"><a class=\"wh-toc-link\" href=\"#kapazitaet-entscheiden\" style=\"display:block;height:100%;padding:12px 15px;border:1px solid #dce6e8;border-radius:9px;background:#fff;color:#18575b;font-size:14px;line-height:1.5;font-weight:600;text-decoration:none;box-sizing:border-box\">Capacity Limits and Next Steps<\/a><\/div>\n<\/div><\/nav><section class=\"wh-section\" aria-labelledby=\"worker-und-anfragen\" style=\"display:block;margin:0 0 36px;min-width:0\"><h2 id=\"worker-und-anfragen\" style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">What Limits a PHP-FPM Worker<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">PHP-FPM manages PHP processes in pools. A <strong style=\"font-weight:700;color:inherit\">Worker<\/strong> processes one request at a time; the pool setting <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">pm.max_children<\/code> Limits the number of workers available at any given time and, consequently, the number of PHP requests that this pool can process simultaneously. If there are multiple pools, the limit applies to each individual pool, not automatically to the entire server. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">This number is neither the number of logged-in visitors nor a direct measure of requests per second. A visitor can trigger multiple requests, while a logged-in user does not occupy a worker between two actions. Conversely, a single slow request can tie up a worker for longer than several short requests in a row.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Not every page view reaches PHP-FPM either. If the web server serves a static file directly or if an upstream cache fully fulfills a request, a PHP worker may not be necessary, depending on the architecture. Cache misses, logged-in users, and administrative pages, on the other hand, can still generate PHP requests and temporarily increase resource utilization.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">For capacity planning, therefore, two separate questions are crucial: How many workers, including a reserve, can fit into the available RAM? And how many workers does the traffic actually arriving at the pool require so that requests do not have to wait excessively long? A high value for <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">pm.max_children<\/code> does not answer any of these questions on its own.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Even if sufficient memory is available, the CPU, database, or external services may limit the practical capacity. While additional workers allow for more parallel PHP processing, they can simultaneously increase the load on an already slow service. The pool value is therefore an operational limit and not a performance guarantee.<\/p>\n<\/section><section class=\"wh-section\" aria-labelledby=\"prozessmanager\" style=\"display:block;margin:0 0 36px;min-width:0\"><h2 id=\"prozessmanager\" style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">Understanding Process Managers and Queues<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The <strong style=\"font-weight:700;color:inherit\">Process Manager<\/strong> Specifies when PHP-FPM provisions workers. When <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">static<\/code> the reserved process count corresponds to the value of <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">pm.max_children<\/code>. This makes it easy to plan the number of processes, but it also ties up resources even when the system is underutilized. The upper limit itself must still be consistent with the available memory. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">At <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">dynamic<\/code> FPM adjusts the number of processes: The initial count, as well as the minimum and maximum number of free workers, are also set. When <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">ondemand<\/code> Workers are created only when needed and are terminated after a configured idle period. This can save resources in pools that are rarely used; however, in the event of a sudden load spike, new processing capacity must first be created. <\/p>\n<div class=\"wh-table-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Comparison of Process Managers\" style=\"width:100%;max-width:100%;overflow-x:auto;margin:28px 0;border:1px solid #dce5e9;border-radius:14px;background:#fff;box-shadow:0 10px 28px -16px rgba(24,47,60,.32);box-sizing:border-box\"><table style=\"width:100%;min-width:580px;border-collapse:separate;border-spacing:0;border:0;margin:0;font-size:15px;line-height:1.6;background:#fff\"><caption style=\"padding:20px;text-align:start;font-size:17px;line-height:1.5;font-weight:700;color:#173246;background:#fff\">Comparison of Process Managers<\/caption><thead><tr><th scope=\"col\" style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#19394d;color:#fff\">Mode<\/th><th scope=\"col\" style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#19394d;color:#fff\">Important Settings<\/th><th scope=\"col\" style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#19394d;color:#fff\">Application and Consideration<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">static<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">pm.max_children<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Fixed number of workers; easy to plan, but resources are tied up when idle.<\/td><\/tr><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">dynamic<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">Adapting to changing demand; idle and newly started workers must be coordinated.<\/td><\/tr><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">ondemand<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">pm.max_children, pm.process_idle_timeout<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Workers on demand; saves resources in rarely used pools; process starts must be taken into account when the load increases.<\/td><\/tr><\/tbody><\/table><\/div><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">If all workers are busy, additional requests can be placed in the <strong style=\"font-weight:700;color:inherit\">Listener Queue<\/strong> wait for a free process. The FPM status shows, among other things, the current and maximum queue lengths. However, a single high maximum value does not indicate whether the pool is currently overloaded; to determine that, it needs to be viewed over time. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">A larger queue does not create additional workers or speed up a slow database. It can temporarily absorb requests, but merely shifts the wait time to before PHP processing. Therefore, both the typical load pattern and the consequences of short spikes are important when deciding on a process manager.<\/p>\n<\/section><section class=\"wh-section\" aria-labelledby=\"speichergrundlagen\" style=\"display:block;margin:0 0 36px;min-width:0\"><h2 id=\"speichergrundlagen\" style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">Classifying Worker Memory Correctly<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">A worker's memory requirements cannot be reliably determined based solely on a PHP configuration limit. Process data collected under appropriate load conditions is more helpful for planning purposes. It makes a difference whether you are looking at the resident memory of a single process or trying to estimate the memory usage of an entire group of PHP-FPM workers.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><strong style=\"font-weight:700;color:inherit\">RSS<\/strong> describes a process's resident memory. If multiple workers use the same memory pages, those pages may be included in each worker's RSS. If you add up the RSS values of all workers, shared pages may appear multiple times; therefore, the sum does not provide an accurate picture of the physical memory shared among them. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><strong style=\"font-weight:700;color:inherit\">PSS<\/strong> distributes shared pages proportionally among the participating processes. The sum of the PSS values for a process group is therefore often more useful for its memory planning than the sum of the RSS values. Nevertheless, it remains a snapshot: If the number of processes sharing pages changes, their respective shares also change. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Consider multiple workers for both typical and memory-intensive requests. A newly started process or a single average may underestimate future demand. The total pool PSS for different numbers of workers and load conditions helps derive a conservative estimate; extrapolating this to more workers remains uncertain due to variable shared and private portions.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The PHP-<code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">memory_limit<\/code> is not a reliable indicator of the total operating system memory used by an FPM process and does not replace this observation. You should not automatically deduct shared memory\u2014such as that used by OPcache\u2014a second time from the budget if it is already included proportionally in the used pool PSS. Other services and a reserve must still be taken into account.<\/p>\n<\/section><section class=\"wh-section\" aria-labelledby=\"ram-budget\" style=\"display:block;margin:0 0 36px;min-width:0\"><h2 id=\"ram-budget\" style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">Calculate RAM Budget and Number of Workers<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The starting point is the actual available RAM: on a host, this is the memory available for services; in a container, it is the effective memory limit. Subtract from this the memory requirements of the operating system, the web server, any local database, and other services. Other FPM pools and a reserve for fluctuating usage should also be factored into the calculation.<\/p>\n<figure class=\"wp-block-image size-large wh-figure\" aria-describedby=\"wh-caption-detail1\" style=\"display:block;float:none;clear:both;width:100%;max-width:760px;margin:34px auto 40px;border:1px solid #dae5e9;border-radius:14px;overflow:hidden;background:#f5f8fa;box-shadow:0 10px 28px -17px rgba(24,47,60,.28);box-sizing:border-box\"><div class=\"wh-figure-media\" style=\"display:block;background:#eef3f5;line-height:0\"><img loading=\"lazy\" width=\"800\" height=\"534\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-ram-budget-speichermodul-4f6be11b-detail1-b501ee44f1-1024x683.webp\" class=\"wp-image-22161\" alt=\"An AI-generated stock image of a removed RAM module on an antistatic workshop mat.\" decoding=\"async\" srcset=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-ram-budget-speichermodul-4f6be11b-detail1-b501ee44f1-1024x683.webp 1024w, https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-ram-budget-speichermodul-4f6be11b-detail1-b501ee44f1-300x200.webp 300w, https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-ram-budget-speichermodul-4f6be11b-detail1-b501ee44f1-768x512.webp 768w, https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-ram-budget-speichermodul-4f6be11b-detail1-b501ee44f1-18x12.webp 18w, https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-ram-budget-speichermodul-4f6be11b-detail1-b501ee44f1.webp 1536w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" ><\/div><figcaption class=\"wh-caption\" id=\"wh-caption-detail1\" style=\"display:block;margin:0;padding:12px 18px 15px;border-top:1px solid #dce5e9;color:#506575;background:#f5f8fa;font-size:14px;line-height:1.55;text-align:start\">AI-generated stock image: The amount of available RAM sets a limit on the budget for PHP-FPM pools.<\/figcaption><\/figure><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The remaining portion is the <strong style=\"font-weight:700;color:inherit\">Pool Budget<\/strong>. To estimate the number of workers, observe the PSS sum of the pool workers at various process counts and load conditions. Take into account both typical requests and memory-intensive endpoints. Divide the respective sum by the number of workers under consideration and derive a conservative estimate based on multiple observations. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The following calculation is an illustrative example; it is not a measurement. The values used are intended solely to demonstrate the calculation process; they are not a recommendation for a specific application. The result is rounded down to the nearest whole number of workers.<\/p>\n<div class=\"wh-table-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Illustrative RAM Planning for a Single Pool\" style=\"width:100%;max-width:100%;overflow-x:auto;margin:28px 0;border:1px solid #dce5e9;border-radius:14px;background:#fff;box-shadow:0 10px 28px -16px rgba(24,47,60,.32);box-sizing:border-box\"><table style=\"width:100%;min-width:580px;border-collapse:separate;border-spacing:0;border:0;margin:0;font-size:15px;line-height:1.6;background:#fff\"><caption style=\"padding:20px;text-align:start;font-size:17px;line-height:1.5;font-weight:700;color:#173246;background:#fff\">Illustrative RAM Planning for a Single Pool<\/caption><thead><tr><th scope=\"col\" style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#19394d;color:#fff\">Calculation step<\/th><th scope=\"col\" style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#19394d;color:#fff\">Acceptance<\/th><th scope=\"col\" style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#19394d;color:#fff\">Classification<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Effective RAM Limit<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">4,096 MiB<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Host or Container Boundary in the Example<\/td><\/tr><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">Other Services, Pools, and Reserves<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">2,048 MiB<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">Jointly Agreed Deduction<\/td><\/tr><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Budget for the pool in question<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">2,048 MiB<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">4,096 minus 2,048 MiB<\/td><\/tr><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">PSS Approximate Value per Worker<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">80 MiB<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">Assumed conservative planning value<\/td><\/tr><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Calculated RAM Limit<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">25 workers<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">2,048 divided by 80, rounded down<\/td><\/tr><\/tbody><\/table><\/div><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The 25 workers do not guarantee a safe allocation. PSS allocates shared pages proportionally, and this allocation changes based on the number of processes sharing those pages. A different request mix can also affect private memory requirements; therefore, the projection should be verified against the observed total consumption and the existing limit. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">If shared memory such as OPcache is already included proportionally in the PSS total used, do not deduct it again as a lump sum for the entire amount. Nevertheless, be sure to allow for a reserve to account for memory usage that your analysis does not capture. Especially with a container limit, what ultimately counts is the total consumption of all processes within that limit\u2014not just the estimated total worker count.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">A newly started worker alone is not very meaningful as a basis: It may not have processed any demanding requests yet. Therefore, compare multiple time points and note which endpoints and how many workers were involved in each case. This will help you determine whether the chosen approximation holds true even under less favorable but realistic operating conditions.<\/p>\n<\/section><section class=\"wh-section\" aria-labelledby=\"verkehr-und-belegung\" style=\"display:block;margin:0 0 36px;min-width:0\"><h2 id=\"verkehr-und-belegung\" style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">Estimate the number of workers needed based on requests<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The RAM calculation estimates how many workers can likely be accommodated. In contrast, actual demand is determined by how many PHP requests actually arrive in the pool in question and how long they keep a worker occupied. As a first approximation, the average number of workers occupied simultaneously equals the number of PHP requests per second multiplied by the average worker occupancy time in seconds.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Illustrative calculation example, not a measurement: Assuming 20 PHP requests per second and an average processing time of 0.25 seconds, an average of five workers are busy. This is an average over the period under consideration. It does not imply that exactly five processes are always running, nor that five is sufficient as a pool limit for brief spikes.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">When calculating the number of requests, do not include all page views without verification. If a cache returns many responses without calling PHP, these hits do not put a strain on the pool. Conversely, cache misses, logged-in visitors, and administrative accesses can sometimes trigger more PHP processing than a daily average would suggest.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The <strong style=\"font-weight:700;color:inherit\">Worker Time Recorded<\/strong> also includes wait times during processing, such as when waiting for a database or an external service. It is not automatically equivalent to the response time visible in the browser. According to <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">fastcgi_finish_request()<\/code> PHP may have already finished sending the response to the client but still be performing additional work in the worker. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">To ensure acceptable wait times, you need some headroom above the average utilization. How much headroom is needed depends, among other things, on load fluctuations, slow endpoints, and the desired response time target. Multiplying the peak requests per second by a high latency percentile can serve as a conservative scenario check, but it is not a precise queueing forecast.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Therefore, consider several time periods separately: A brief peak in activity and quiet nighttime traffic can result in the same daily average as more consistent operations, but they place different demands on the system. If the occupancy time increases due to a slow backend, the average number of tied-up workers also increases even if the arrival rate remains the same. The demand is therefore not solely a function of visitor volume.<\/p>\n<\/section><section class=\"wh-section\" aria-labelledby=\"pool-konfiguration\" style=\"display:block;margin:0 0 36px;min-width:0\"><h2 id=\"pool-konfiguration\" style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">Derive pool settings from the plan<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Now compare the RAM-based upper limit with the estimated requirement, including a margin. If the requirement falls below that limit, choose a conservative starting value for <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">pm.max_children<\/code>, which does not have to use up the entire budget. In the example given, 25 would be the calculated RAM limit, but not necessarily the appropriate setting; the CPU and backend may impose limits even before that.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">If the estimated demand exceeds the RAM limit, setting a higher limit will not resolve the issue: it may put the host or container under memory pressure. Conversely, a very low limit can cause requests to be queued. In this case, try optimizing execution time or cache usage, and check whether additional resources or a limit on incoming load are necessary.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">At <strong style=\"font-weight:700;color:inherit\">dynamic<\/strong> In addition to the upper limit, you specify the initial number as well as the minimum and maximum number of available workers. The initial and reserve values should match the expected load and remain within the upper limit. If too little capacity is reserved, a sudden increase in load may result in the need for additional workers; conversely, having too many idle processes over time consumes resources. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">At <strong style=\"font-weight:700;color:inherit\">ondemand<\/strong> Workers are created only when needed; the idle time until they are terminated is configured separately. This can be useful for pools that are rarely used, but requires special attention when there are rapid spikes in load. Here, too, it limits <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">pm.max_children<\/code> the number of workers in the pool that are available at the same time. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Multiple websites on the same host do not each receive all available RAM independently of one another. Allocate their potential pool limits together with the other services and the reserve. A global FPM process limit, if configured, may also apply, but it does not replace the individual pool budgets or the assessment of CPU and database capacity. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">After making changes, check the actual load and wait times over appropriate time periods, rather than treating the initial value as final. With managed hosting, process data or pool settings may not be directly accessible; in that case, use the provider\u2019s metrics and available options. The settings available also depend on the PHP version and operating environment.<\/p>\n<\/section><section class=\"wh-section\" aria-labelledby=\"status-und-messung\" style=\"display:block;margin:0 0 36px;min-width:0\"><h2 id=\"status-und-messung\" style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">Monitor FPM Status and Storage<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The FPM status page shows whether the planned workers are sufficient under actual load. <strong style=\"font-weight:700;color:inherit\">Protect the status endpoint<\/strong> Protected from public access: It may disclose sensitive information about requests and resources. A separately configured status listener can remain accessible even when the main pool is overloaded; check its availability and setup for your PHP version and web server configuration.  <\/p>\n<div class=\"wh-table-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Analyzing FPM Status Values in a Temporal Context\" style=\"width:100%;max-width:100%;overflow-x:auto;margin:28px 0;border:1px solid #dce5e9;border-radius:14px;background:#fff;box-shadow:0 10px 28px -16px rgba(24,47,60,.32);box-sizing:border-box\"><table style=\"width:100%;min-width:580px;border-collapse:separate;border-spacing:0;border:0;margin:0;font-size:15px;line-height:1.6;background:#fff\"><caption style=\"padding:20px;text-align:start;font-size:17px;line-height:1.5;font-weight:700;color:#173246;background:#fff\">Analyzing FPM Status Values in a Temporal Context<\/caption><thead><tr><th scope=\"col\" style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#19394d;color:#fff\">Status value<\/th><th scope=\"col\" style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#19394d;color:#fff\">Classification<\/th><th scope=\"col\" style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#19394d;color:#fff\">Follow-up question<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">active processes \/ idle processes<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Current Employees and Freelancers<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Will there still be available workers during peak loads?<\/td><\/tr><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">listen queue \/ max listen queue<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">Current and all-time maximum queue length<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">Does the queue grow when responses are slow?<\/td><\/tr><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">max children reached<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Counter for when the worker limit is reached in \"dynamic\" or \"ondemand\" mode<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#fff;color:#294252\">Does the counter increase during the period under consideration?<\/td><\/tr><tr><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">slow requests<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">Counter for Slow Requests<\/td><td style=\"padding:15px 18px;border:0;border-bottom:1px solid #e2e9ed;text-align:start;vertical-align:top;white-space:normal;font-size:15px;line-height:1.6;background:#f4f7f9;color:#294252\">Does this increase coincide with longer response times?<\/td><\/tr><\/tbody><\/table><\/div><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Consider the values as <strong style=\"font-weight:700;color:inherit\">time series<\/strong> along with request volume and response times. A past peak value for the queue does not indicate current overload; similarly, for counters, the increase since the last observation is more meaningful than the total value alone. Take into account pool starts or restarts, which can change the reference period. <\/p>\n<figure class=\"wp-block-image size-large wh-figure\" aria-describedby=\"wh-caption-detail2\" style=\"display:block;float:none;clear:both;width:100%;max-width:760px;margin:34px auto 40px;border:1px solid #dae5e9;border-radius:14px;overflow:hidden;background:#f5f8fa;box-shadow:0 10px 28px -17px rgba(24,47,60,.28);box-sizing:border-box\"><div class=\"wh-figure-media\" style=\"display:block;background:#eef3f5;line-height:0\"><img loading=\"lazy\" width=\"800\" height=\"534\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-status-zeitlicher-bezug-4f6be11b-detail2-7093395fad-1024x683.webp\" class=\"wp-image-22162\" alt=\"AI-generated illustration of two strips of paper showing current and previous clusters of dots.\" decoding=\"async\" srcset=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-status-zeitlicher-bezug-4f6be11b-detail2-7093395fad-1024x683.webp 1024w, https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-status-zeitlicher-bezug-4f6be11b-detail2-7093395fad-300x200.webp 300w, https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-status-zeitlicher-bezug-4f6be11b-detail2-7093395fad-768x512.webp 768w, https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-status-zeitlicher-bezug-4f6be11b-detail2-7093395fad-18x12.webp 18w, https:\/\/webhosting.de\/wp-content\/uploads\/2026\/11\/php-fpm-status-zeitlicher-bezug-4f6be11b-detail2-7093395fad.webp 1536w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" ><\/div><figcaption class=\"wh-caption\" id=\"wh-caption-detail2\" style=\"display:block;margin:0;padding:12px 18px 15px;border-top:1px solid #dce5e9;color:#506575;background:#f5f8fa;font-size:14px;line-height:1.55;text-align:start\">AI-generated illustration: Current status values and previous highs need to be put into a temporal context.<\/figcaption><\/figure><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">For a known FPM worker, you can read aggregated memory values on a Linux system with an available proc interface. Replace <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">PID<\/code> by the actual process ID; you need the appropriate access rights. Repeat the observation for multiple workers and load conditions, rather than deriving a permanent pool size from a single process. <\/p>\n<div class=\"wh-code-window\" data-wh-code style=\"margin:28px 0 34px;border:1px solid #2c4656;border-radius:12px;overflow:hidden;background:#132a3b;box-shadow:0 9px 25px -13px rgba(15,35,55,.2)\"><div class=\"wh-code-toolbar\" style=\"display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:11px 16px;background:#223e50;color:#edf5fa;font-size:13px;line-height:1.5;font-weight:600\"><span>Terminal<\/span><button type=\"button\" class=\"wh-code-copy\" data-wh-copy hidden style=\"padding:6px 11px;border:1px solid #7893a1;border-radius:6px;background:transparent;color:#fff;font-size:12px;line-height:1.5;font-weight:600;cursor:pointer\">Copy code<\/button><span class=\"wh-copy-status\" aria-live=\"polite\"><\/span><span data-wh-copy-success hidden>Copied<\/span><span data-wh-copy-fallback hidden>Code highlighted\u2014please copy<\/span><\/div><pre class=\"wh-code\" data-no-translation translate=\"no\" style=\"display:block;margin:0;padding:20px;max-width:100%;overflow-x:auto;color:#edf5fa;background:#132a3b;font:14px\/1.75 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre;direction:ltr;text-align:left\"><code class=\"language-bash\" style=\"font:inherit;color:inherit;background:transparent;padding:0;border:0;white-space:inherit\">cat \/proc\/PID\/smaps_rollup<\/code><\/pre><\/div><\/section><section class=\"wh-section\" aria-labelledby=\"engpaesse-diagnostizieren\" style=\"display:block;margin:0 0 36px;min-width:0\"><h2 id=\"engpaesse-diagnostizieren\" style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">Investigating Slow Requests and Queues<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">A store may show many active workers, even though PHP execution itself is not the original bottleneck. If requests are waiting for slow database queries, the workers remain tied up in the meantime. If additional requests arrive, the listener queue can grow and response times can increase, even if the CPU still has spare capacity.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">A higher worker limit might allow more requests to reach the database simultaneously in this situation. This can <strong style=\"font-weight:700;color:inherit\">Back-end Printing<\/strong> and further increase wait times. Therefore, compare the trends in FPM utilization and queue length with database load, slow queries, and external service calls before you increase the limit.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">The FPM slowlog helps pinpoint long PHP calls: For requests exceeding a configured threshold, FPM can log a backtrace. This shows a single execution point and is not a complete profile of the entire request. Recurring points can be cross-referenced with request duration and backend metrics; the <a href=\"https:\/\/webhosting.de\/en\/properly-analyzing-php-fpm-slowlog-performance-optimization-debugging-analysis\/\">Guide to Analyzing the PHP-FPM Slowlog<\/a> explains the further analysis. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">A timeout must also be distinguished from the actual capacity. In nginx, this is referred to as <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">fastcgi_read_timeout<\/code> the allowed interval between consecutive read operations from the FastCGI server, not the total request duration as a whole. A higher value may allow for longer wait times, but it neither creates additional workers nor speeds up the database. <\/p>\n<\/section><section class=\"wh-section\" aria-labelledby=\"kapazitaet-entscheiden\" style=\"display:block;margin:0 0 36px;min-width:0\"><h2 id=\"kapazitaet-entscheiden\" style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">Capacity Limits and Next Steps<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">If the RAM budget is insufficient to meet the estimated requirements, a higher setting for <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">pm.max_children<\/code> Don't overlook the trade-off: Additional processes also require memory. Instead, check whether you can reduce the number of PHP requests or the duration of their worker usage. Which approach makes sense depends on where the observed load is originating.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">A more effectively utilized cache can handle repeated requests, while faster PHP execution and database accesses free up workers sooner. Appropriate background tasks can be offloaded from the immediate request path; however, these tasks also require their own resources. A load limit protects the backend during peak times but can result in requests being queued or rejected.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Additional RAM can allow for a higher number of workers if memory is indeed the limiting factor. If the CPU, database, or an external service is already at full capacity, their capacity must also be taken into account. Therefore, more memory alone does not guarantee shorter response times or higher throughput.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">If the memory requirements of individual workers exceed their lifetime, then <code data-no-translation style=\"font:600 .87em\/1.5 ui-monospace,monospace;color:#235063;background:#edf3f5;border-radius:4px;padding:.1em .3em\">pm.max_requests<\/code> Arrange for them to be replaced regularly. This can help when dealing with memory leaks in third-party libraries, but it does not address the root cause. After making a change, continue to monitor pool memory and request behavior, rather than treating the restart mechanism as a substitute for debugging. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">For a broader architectural decision, the <a href=\"https:\/\/webhosting.de\/en\/nginx-unit-alternative-to-php-fpm\/\">Comparison of NGINX Unit and PHP-FPM<\/a> Context: NGINX Unit has been archived and is no longer maintained. Regardless of the architecture you choose, you should make changes based on <strong style=\"font-weight:700;color:inherit\">time series<\/strong> Check: For similar request volumes, compare the queue, worker utilization, memory usage, and response times. This will help you determine whether an adjustment has actually resolved the bottleneck or merely shifted it elsewhere. <\/p>\n<\/section><section class=\"wh-sources\" style=\"margin:40px 0 0;padding:24px 0 0;border-top:1px solid #dce5e9;color:#596b7b;font-size:14px;line-height:1.65\"><h2 style=\"margin:38px 0 18px;color:#172f41;font-size:clamp(24px,1.25rem + 1vw,30px);font-weight:700;line-height:1.3;scroll-margin-top:115px\">Sources and Current State of Knowledge<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Status of the research: <time datetime=\"2026-11-04\">2026-11-04<\/time><\/p><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Research status: November 4, 2026. Check the availability of status listeners, process data, and pool settings for the PHP and Linux versions in use, as well as the hosting environment.<\/p><div class=\"wh-source-urls\"><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><span class=\"wh-source-url\" data-no-translation dir=\"ltr\" style=\"overflow-wrap:anywhere;font:12px\/1.6 ui-monospace,monospace;direction:ltr\">https:\/\/www.php.net\/install.fpm.configuration<\/span><\/p><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><span class=\"wh-source-url\" data-no-translation dir=\"ltr\" style=\"overflow-wrap:anywhere;font:12px\/1.6 ui-monospace,monospace;direction:ltr\">https:\/\/www.php.net\/fpm.status.php<\/span><\/p><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><span class=\"wh-source-url\" data-no-translation dir=\"ltr\" style=\"overflow-wrap:anywhere;font:12px\/1.6 ui-monospace,monospace;direction:ltr\">https:\/\/docs.kernel.org\/7.0\/filesystems\/proc.html<\/span><\/p><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><span class=\"wh-source-url\" data-no-translation dir=\"ltr\" style=\"overflow-wrap:anywhere;font:12px\/1.6 ui-monospace,monospace;direction:ltr\">https:\/\/www.kernel.org\/doc\/html\/v6.12\/filesystems\/proc.html<\/span><\/p><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><span class=\"wh-source-url\" data-no-translation dir=\"ltr\" style=\"overflow-wrap:anywhere;font:12px\/1.6 ui-monospace,monospace;direction:ltr\">https:\/\/www.php.net\/manual\/de\/install.fpm.php<\/span><\/p><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><span class=\"wh-source-url\" data-no-translation dir=\"ltr\" style=\"overflow-wrap:anywhere;font:12px\/1.6 ui-monospace,monospace;direction:ltr\">https:\/\/nginx.org\/en\/docs\/http\/ngx_http_fastcgi_module.html<\/span><\/p><\/div><\/section><\/div>","protected":false},"excerpt":{"rendered":"<p>How many PHP-FPM workers can fit in RAM, and how many are actually needed to handle traffic? This article explains PSS measurement, worker allocation, and the limits of `pm.max_children`.<\/p>","protected":false},"author":1,"featured_media":22160,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[780],"tags":[],"class_list":["post-22158","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"surfer_file_name":null,"surfer_file_original_url":null,"_wp_attachment_image_alt":null,"litespeed-optimize-set":null,"litespeed-optimize-size":null,"_oembed_b5e1eb923ad3b086e579b1befcd4075c":null,"_elementor_source_image_hash":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"_source_url":null,"_elementor_migrations_state_8b2d":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"_wh_make_key":"wh_4f6be11b8d366b100ffc303a6d621b39","rank_math_internal_links_processed":"1","_wh_make_topic":"PHP-FPM Kapazit\u00e4tsplanung \u2013 gleichzeitige Requests, RAM-Verbrauch und Worker sinnvoll berechnen","_wh_make_input_keywords":["php-fpm worker","php hosting performance","pm max children"],"_wh_make_config":{"research_model":"gpt-6.1-terra","writer_model":"gpt-6.1-terra","review_model":"gpt-6.1-sol","image_model":"gpt-image-2.5-flare","image_quality":"high","image_format":"webp","final_status":"draft","charts_enabled":true},"_wh_make_links":{"I1":{"id":"I1","post_id":21778,"url":"https:\/\/webhosting.de\/nginx-unit-alternative-zu-php-fpm\/","title":"NGINX Unit as an Alternative to PHP-FPM? Architecture, Risks, and Use Cases","excerpt":"Technically, NGINX Unit was more than just PHP-FPM: The application server could integrate HTTP, routing, static files, and PHP execution. However, Unit is not a general alternative for new PHP hosting platforms, as the project has been archived since October 2025 and is no longer maintained. NGINX with PHP-FPM therefore remains the more straightforward standard choice for new systems. Unit is primarily relevant for documented existing installations, risk analyses, and planned migrations. Go directly to the section: Archived Status and Clear Verdict; NGINX, PHP-FPM, and Unit; Differentiating PHP Modules, Versions, and Configuration Limits; Configuring PHP Routing and Front Controller; Comparing Process Models and RAM Budgets; Evaluating Operating Models for PHP Hosting; Safely Operating Unit in Existing Environments; Timeouts, logs, and hung processes Deciding on new and legacy systems Archived status and clear verdict As of September 30, 2026, the clear verdict is: NGINX Unit was able to execute PHP applications directly while accepting HTTP connections, terminating TLS, serving static files, and routing requests. Its functionality thus significantly exceeded that of PHP-FPM. Nevertheless, Unit is not generally recommended for new production PHP hosting platforms because the official project has been archived since October 2025 and is no longer maintained. This does not mean that an existing Unit installation would immediately become inoperable. It can continue to serve an application as long as its dependencies, security measures, and a migration path are documented. However, a new investment must be evaluated differently: Without ongoing project maintenance, risks increase regarding security vulnerabilities, package availability, new operating system versions, and future PHP compatibility. A clear distinction is important when it comes to version numbers. The installation documentation, which remains available, frequently refers to Unit 1.34.2, while the stable release tag 1.35.0 has been published. Among other things, this release confirms PHP 8.5 compatibility; however, this does not imply continued maintenance. The \u201cmaster\u201d development branch is not a relevant product due to its archived status."},"I2":{"id":"I2","post_id":21283,"url":"https:\/\/webhosting.de\/linux-hugepages-hosting-mariadb-redis-php-fpm-optimierung-nebula\/","title":"Linux HugePages in Web Hosting: A Performance Boost for MariaDB, Redis, and PHP-FPM","excerpt":"I\u2019ll show you exactly how Linux hugepages power MariaDB, Redis, and PHP-FPM in the hosting stack, where they slow things down, and how I fine-tune them. This is how I lower latency, reduce TLB misses, and keep memory management predictable. Key Points The following bullet points summarize the most important steps and effects. Choose THP mode carefully: \u201emadvise\u201c for broad workloads, \u201enever\u201c for sensitive services like Redis. Allocate static HugePages for large MariaDB buffer pools to reduce latency and TLB misses. Protect Redis from latency spikes: Disable THP and limit fork costs. PHP-FPM benefits indirectly through lower kernel overhead and faster backends. Perform benchmarking and monitoring before going live to quantify the effects. HugePages and THP Explained Briefly I use HugePages to enable larger memory pages, thereby reducing the number of pages that need to be managed. Standard pages are 4 KB, while large pages are typically 2 MB. This significantly reduces TLB misses; the CPU spends less time on memory management, and services with heavy RAM access respond faster. Transparent Huge Pages (THP) attempts this automatically and can be effective without any application modifications. Real-world reports often show operations that are 20\u201340 % faster when workloads and settings are well-matched. Choosing and Testing THP Modes Correctly I clearly distinguish between the \u201ealways,\u201c \u201emadvise,\u201c and \u201enever\u201c modes because they affect workloads differently. \u201ealways\u201c can tie up a surprising amount of RAM and generate copying overhead when services fork. \u201emadvise\u201c allows for control: only memory that the app explicitly marks uses large pages. \u201enever\u201c offers maximum predictability, especially for fork-intensive services like Redis. If you want to dive deeper, you can find background information on the opportunities and pitfalls here: THP: Booster or Problem. I test each mode under real-world load, measure latency, CPU time, and RSS, and then make a fact-based decision. Practical Setup on the Host Before I switch services, I ensure reproducible host defaults and a secure fallback. Set THP specifically (boot parameter or systemd) Via kernel boot: In GRUB, set \u201etransparent_hu"},"I3":{"id":"I3","post_id":20986,"url":"https:\/\/webhosting.de\/php-fpm-slowlog-richtig-auswerten-performance-optimierung-debugging-analyse\/","title":"How to Properly Analyze the PHP-FPM Slowlog: Identifying Performance Bottlenecks with Confidence","excerpt":"I\u2019ll show you how to analyze the PHP-FPM slowlog effectively, interpret the backtraces correctly, and use that information to identify clear steps for reducing latency. This will help you reliably find performance bottlenecks, prioritize actions, and make loading times noticeably faster for users. Key points for reading backtraces: Frame #0 indicates the current bottleneck. Setting the timeout: start high, then gradually lower it. Correlating with the access log: reliably identify slow URLs. Count patterns: Prioritize recurring functions. Derive code fixes: Target the database, APIs, loops, and plugins specifically. What is the PHP-FPM slowlog? The slowlog writes a backtrace for long requests to a log file, thereby recording the current execution point without terminating the request. This allows me to immediately identify which script, which URL, and which function is blocking the flow. The entries include a timestamp, pool, script filename, request URI, and the chain of function calls. This clearly distinguishes the slowlog from traditional error logs, as it documents performance, not errors. For heavily loaded sites like WordPress backends, it provides quickly actionable insights into expensive queries, resource-intensive rendering, or blocking I\/O operations. Anyone who understands these snapshots can very quickly pinpoint the root cause and plan corrective actions. How the Slowlog Works in Practice Once enabled, PHP-FPM writes a snapshot of the stack to the log whenever a defined threshold is exceeded, while the request continues to run. Each entry typically starts with \u201e#0\u201c\u2014that is, at the point where time is currently being lost. I often see blank lines between the blocks, which makes it easier to separate the events. This method provides samples rather than full profiles, but in return offers accurate pointers to real bottlenecks such as complex template paths, orphaned hooks, or slow network calls. During periods of high traffic, I correlate these clues with load spikes, which allows me to neatly categorize sections of code. As soon as I spot recurring patterns, I adjust pm.max_children, for example, using the information from \u201cSetting pm.max_children Correctly.\u201d Slowlog ak"}},"_wh_make_stage":"entwurf","_wh_make_research_date":"2026-11-04","_wh_make_sitemap_info":{"index":"https:\/\/webhosting.de\/sitemap_index.xml?wh_make=1","sitemaps":["https:\/\/webhosting.de\/post-sitemap1.xml","https:\/\/webhosting.de\/post-sitemap2.xml","https:\/\/webhosting.de\/post-sitemap3.xml","https:\/\/webhosting.de\/post-sitemap4.xml"],"url_count":3138,"fetched_at":"2026-11-04T08:42:44+00:00","selected_ids":[21778,21283,20986]},"_wh_make_draft_hash":"016b2c55b9cab2e07071f2ea4f161eb286f2d0a219fe75ba26187c02d291fc35","_wh_make_work":{"version":"2.1","identity":{"sheet_ref":"1VMjxV8Q73i0Q1HO6s-u4jNHVRF0snliGCeg97intLPs","sheet_name":"Tabellenblatt1","external_id":"1441","topic":"PHP-FPM Kapazit\u00e4tsplanung \u2013 gleichzeitige Requests, RAM-Verbrauch und Worker sinnvoll berechnen","keywords":["php-fpm worker","php hosting performance","pm max children"],"category_input":"780"},"config":{"research_model":"gpt-6.1-terra","writer_model":"gpt-6.1-terra","review_model":"gpt-6.1-sol","image_model":"gpt-image-2.5-flare","image_quality":"high","image_format":"webp","final_status":"draft","charts_enabled":true},"phase":"done","pending":null,"receipts":{"a30f732faedb022dff7d047c23bfaa79":"298f9970ba17d98d2021f49e05b94c8cfd5a70ce20fed3efab854ff68f792d2a","65cd50b20cbd876bb4fd58c3bdf44934":"b27cc8a654da90ee8c87acc2fda26ec5b6d0f365bc5b068edec8968b4946eae8","d361ac731b1801282b1dfad518a9980e":"eb2e0c2b3a630a5ff615858472f17519eb012c1f471c69a8905d0bd03a91e892","eda54726519da48991078aa1ed3291f2":"8e751e9064f88c072cf283964767ba29b46bafad11adbd96ffcea49890781a6a","77c2cc14796e37c2587bca66f0322bfc":"934280c60b1ed120c9a9f0b76c9c996287f87c4a6b68b64c97573cbf04fa45cd","1aaa04ff0a7f94917f643c91e840ffc1":"6b4aaecdaadc6ebeb902570a4c0463a905df86278a5349580da57f31e33b45bf","9466d09b5abf3fe9c0486a57e66f25b6":"ab53f89de5fae8c62c319edb2d2f06ba77e9e6528dd4e1d57c55368fadc4778b","4194a801e1a60c6bdd10435c442ec5db":"2a37e076a187ebbe7fc2d2e307e2d0aeb9c761124b062f2cdb42833b20d70a49","daa97577eb60e5f66f6e979206e6d731":"79f22865a3b1d8d862346d758fd5db896a327ff3202c827b0f5d5721833713bd","b3d5de56a2786cc64ded4984179e9c5a":"660a0bd0824f3cf11f9befcfb278f5262fd2fa07acc838960bfc7f02172a78bb","ba8d6723ad4a4acf492b59440afe2aac":"0886e0b1820f396557ddc0bd41bb2e508fbf35db07e56a76b42375fa6e86644f"},"parts":{"1":[{"id":"worker-und-anfragen","heading":"Was ein PHP-FPM Worker begrenzt","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"PHP-FPM verwaltet PHP-Prozesse in Pools. Ein ","ref":""},{"kind":"strong","text":"Worker","ref":""},{"kind":"text","text":" bearbeitet jeweils eine Anfrage; die Pool-Einstellung ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":" begrenzt die Zahl der gleichzeitig verf\u00fcgbaren Worker und damit die gleichzeitig bearbeiteten PHP-Anfragen dieses Pools. Bei mehreren Pools gilt die Grenze jeweils f\u00fcr den betreffenden Pool, nicht automatisch f\u00fcr den gesamten Server.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Diese Zahl ist weder die Zahl angemeldeter Besucher noch ein direkter Wert f\u00fcr Requests pro Sekunde. Ein Besucher kann mehrere Anfragen ausl\u00f6sen, w\u00e4hrend ein angemeldeter Nutzer zwischen zwei Aktionen keinen Worker belegt. Umgekehrt kann ein einzelner langsamer Request einen Worker l\u00e4nger binden als mehrere kurze Anfragen hintereinander.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Auch nicht jeder Seitenaufruf erreicht PHP-FPM. Liefert der Webserver eine statische Datei direkt aus oder beantwortet ein vorgeschalteter Cache eine Anfrage vollst\u00e4ndig, ist daf\u00fcr je nach Architektur kein PHP-Worker n\u00f6tig. Cache-Misses, eingeloggte Nutzer und Verwaltungsseiten k\u00f6nnen dagegen weiterhin PHP-Anfragen erzeugen und kurzfristig die Belegung erh\u00f6hen.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr die Kapazit\u00e4tsplanung sind deshalb zwei getrennte Fragen entscheidend: Wie viele Worker passen mit Reserve in das verf\u00fcgbare RAM? Und wie viele Worker braucht der tats\u00e4chlich beim Pool eintreffende Verkehr, damit Anfragen nicht \u00fcberm\u00e4\u00dfig lange warten? Ein hoher Wert f\u00fcr ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":" beantwortet keine dieser Fragen allein.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Selbst wenn ausreichend Speicher vorhanden ist, k\u00f6nnen CPU, Datenbank oder externe Dienste die praktische Kapazit\u00e4t begrenzen. Zus\u00e4tzliche Worker erm\u00f6glichen dann zwar mehr parallele PHP-Arbeit, k\u00f6nnen aber gleichzeitig den Druck auf einen bereits langsamen Dienst erh\u00f6hen. Der Pool-Wert ist daher eine Betriebsgrenze und keine Leistungszusage.","ref":""}]}]},{"id":"prozessmanager","heading":"Prozessmanager und Warteschlange verstehen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Der ","ref":""},{"kind":"strong","text":"Prozessmanager","ref":""},{"kind":"text","text":" legt fest, wann PHP-FPM Worker bereitstellt. Bei ","ref":""},{"kind":"code","text":"static","ref":""},{"kind":"text","text":" entspricht die vorgehaltene Prozesszahl dem Wert von ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":". Das macht die Zahl der Prozesse gut planbar, bindet aber auch bei geringer Auslastung Ressourcen. Die Obergrenze selbst muss weiterhin zum verf\u00fcgbaren Speicher passen.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Bei ","ref":""},{"kind":"code","text":"dynamic","ref":""},{"kind":"text","text":" passt FPM die Prozesszahl an: Startzahl sowie minimale und maximale Zahl freier Worker werden zus\u00e4tzlich eingestellt. Bei ","ref":""},{"kind":"code","text":"ondemand","ref":""},{"kind":"text","text":" entstehen Worker erst bei Bedarf und werden nach einer konfigurierten Leerlaufzeit beendet. Das kann bei selten genutzten Pools Ressourcen sparen; bei einer pl\u00f6tzlichen Lastspitze muss jedoch zun\u00e4chst neue Prozesskapazit\u00e4t entstehen.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"table","caption":"Prozessmanager im Vergleich","headers":["Modus","Wichtige Einstellungen","Einsatz und Abw\u00e4gung"],"rows":[["static","pm.max_children","Feste Worker-Zahl; gut planbar, aber Ressourcenbindung im Leerlauf."],["dynamic","pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers","Anpassung an wechselnden Bedarf; freie und startende Worker m\u00fcssen abgestimmt werden."],["ondemand","pm.max_children, pm.process_idle_timeout","Worker bei Bedarf; spart bei selten genutzten Pools Ressourcen, Prozessstarts sind bei Lastanstieg zu ber\u00fccksichtigen."]],"source_ids":["S1"]},{"type":"paragraph","runs":[{"kind":"text","text":"Sind alle Worker besch\u00e4ftigt, k\u00f6nnen weitere Anfragen in der ","ref":""},{"kind":"strong","text":"Listener-Warteschlange","ref":""},{"kind":"text","text":" auf einen freien Prozess warten. Der FPM-Status zeigt unter anderem die aktuelle und die maximale Warteschlange. Ein einzelner hoher H\u00f6chstwert beschreibt allerdings nicht, ob der Pool gerade \u00fcberlastet ist; daf\u00fcr braucht er einen zeitlichen Bezug.","ref":""},{"kind":"citation","text":"","ref":"S2"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Eine gr\u00f6\u00dfere Warteschlange schafft keine zus\u00e4tzlichen Worker und beschleunigt keine langsame Datenbank. Sie kann Anfragen vor\u00fcbergehend aufnehmen, verlagert die Wartezeit aber lediglich vor die PHP-Bearbeitung. F\u00fcr die Entscheidung \u00fcber den Prozessmanager sind daher sowohl der typische Lastverlauf als auch die Folgen kurzer Spitzen wichtig.","ref":""}]}]},{"id":"speichergrundlagen","heading":"Worker-Speicher richtig einordnen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Der Speicherbedarf eines Workers l\u00e4sst sich nicht zuverl\u00e4ssig allein aus einer PHP-Konfigurationsgrenze ableiten. F\u00fcr die Planung sind Prozessdaten unter passenden Lastbedingungen hilfreicher. Dabei macht es einen Unterschied, ob du den residenten Speicher eines einzelnen Prozesses ansiehst oder den Verbrauch einer ganzen Gruppe von PHP-FPM Workern einsch\u00e4tzen willst.","ref":""}]},{"type":"paragraph","runs":[{"kind":"strong","text":"RSS","ref":""},{"kind":"text","text":" beschreibt residenten Speicher eines Prozesses. Nutzen mehrere Worker dieselben Speicherseiten, k\u00f6nnen diese in ihrem jeweiligen RSS enthalten sein. Addierst du die RSS-Werte aller Worker, erscheinen gemeinsam genutzte Seiten dadurch unter Umst\u00e4nden mehrfach; die Summe ist deshalb keine saubere Aussage \u00fcber den gemeinsam belegten physischen Speicher.","ref":""},{"kind":"citation","text":"","ref":"S3"}]},{"type":"paragraph","runs":[{"kind":"strong","text":"PSS","ref":""},{"kind":"text","text":" verteilt gemeinsam genutzte Seiten anteilig auf die beteiligten Prozesse. Die Summe der PSS-Werte einer Prozessgruppe ist f\u00fcr deren Speicherplanung daher oft hilfreicher als die Summe der RSS-Werte. Sie bleibt dennoch eine Momentaufnahme: \u00c4ndert sich die Zahl der Prozesse, die Seiten teilen, \u00e4ndern sich auch die jeweiligen Anteile.","ref":""},{"kind":"citation","text":"","ref":"S3"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Betrachte mehrere Worker bei typischen und auch bei speicherintensiven Requests. Ein frisch gestarteter Prozess oder ein einzelner Durchschnitt kann den sp\u00e4teren Bedarf untersch\u00e4tzen. Die gesamte Pool-PSS bei verschiedenen Worker-Zahlen und Lastzust\u00e4nden hilft, einen konservativen N\u00e4herungswert abzuleiten; eine Hochrechnung auf mehr Worker bleibt wegen ver\u00e4nderlicher gemeinsamer und privater Anteile unsicher.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Das PHP-","ref":""},{"kind":"code","text":"memory_limit","ref":""},{"kind":"text","text":" ist keine zuverl\u00e4ssige Angabe f\u00fcr den gesamten Betriebssystem-Speicher eines FPM-Prozesses und ersetzt diese Beobachtung nicht. Gemeinsam genutzten Speicher, etwa durch OPcache, solltest du nicht pauschal ein zweites Mal vom Budget abziehen, wenn er bereits anteilig in der verwendeten Pool-PSS enthalten ist. Andere Dienste und eine Reserve m\u00fcssen trotzdem ber\u00fccksichtigt werden.","ref":""}]}]}],"2":[{"id":"ram-budget","heading":"RAM-Budget und Worker-Zahl berechnen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Ausgangspunkt ist das tats\u00e4chlich verf\u00fcgbare RAM: auf einem Host der f\u00fcr die Dienste nutzbare Speicher, im Container das wirksame Speicherlimit. Ziehe davon den Bedarf des Betriebssystems, des Webservers, einer gegebenenfalls lokalen Datenbank und weiterer Dienste ab. Andere FPM-Pools und eine Reserve f\u00fcr schwankenden Verbrauch geh\u00f6ren ebenfalls in die Rechnung.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Der verbleibende Anteil ist das ","ref":""},{"kind":"strong","text":"Pool-Budget","ref":""},{"kind":"text","text":". F\u00fcr den Worker-Sch\u00e4tzwert beobachtest du die PSS-Summe der Pool-Worker bei verschiedenen Prozesszahlen und Lastzust\u00e4nden. Ber\u00fccksichtige typische Anfragen ebenso wie speicherintensive Endpunkte. Teile die jeweilige Summe durch die betrachtete Worker-Zahl und leite aus mehreren Beobachtungen einen vorsichtigen N\u00e4herungswert ab.","ref":""},{"kind":"citation","text":"","ref":"S3"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Die folgende Rechnung ist ein illustratives Rechenbeispiel, keine Messung. Die angenommenen Werte dienen nur dazu, den Rechenweg zu zeigen; sie sind keine Empfehlung f\u00fcr eine bestimmte Anwendung. Das Ergebnis wird auf eine ganze Worker-Zahl abgerundet.","ref":""}]},{"type":"table","caption":"Illustrative RAM-Planung f\u00fcr einen einzelnen Pool","headers":["Rechenschritt","Annahme","Einordnung"],"rows":[["Wirksames RAM-Limit","4.096 MiB","Host- oder Containergrenze im Beispiel"],["Andere Dienste, Pools und Reserve","2.048 MiB","Zusammen angenommener Abzug"],["Budget f\u00fcr den betrachteten Pool","2.048 MiB","4.096 minus 2.048 MiB"],["PSS-N\u00e4herungswert je Worker","80 MiB","Angenommener konservativer Planungswert"],["Rechnerische RAM-Grenze","25 Worker","2.048 geteilt durch 80, abgerundet"]],"source_ids":["S3","S6"]},{"type":"paragraph","runs":[{"kind":"text","text":"Die 25 Worker sind keine garantierte sichere Einstellung. PSS verteilt gemeinsam genutzte Seiten anteilig und ver\u00e4ndert sich mit der Zahl der Prozesse, die diese Seiten teilen. Auch ein anderer Request-Mix kann den privaten Speicherbedarf verschieben; die Hochrechnung sollte daher gegen den beobachteten Gesamtverbrauch und das vorhandene Limit gepr\u00fcft werden.","ref":""},{"kind":"citation","text":"","ref":"S3"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Ist gemeinsam genutzter Speicher wie OPcache bereits anteilig in der verwendeten PSS-Summe enthalten, ziehst du ihn nicht nochmals pauschal als vollst\u00e4ndigen Zusatzposten ab. Plane dennoch Reserve f\u00fcr Speicheranteile ein, die deine Betrachtung nicht erfasst. Gerade bei einem Containerlimit z\u00e4hlt letztlich der Verbrauch aller Prozesse innerhalb der Grenze, nicht nur die gesch\u00e4tzte Worker-Summe.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Ein frisch gestarteter Worker allein ist als Grundlage wenig aussagekr\u00e4ftig: Er hat m\u00f6glicherweise noch keinen anspruchsvollen Request bearbeitet. Vergleiche deshalb mehrere Zeitpunkte und halte fest, welche Endpunkte und wie viele Worker jeweils beteiligt waren. So l\u00e4sst sich erkennen, ob der gew\u00e4hlte N\u00e4herungswert auch bei ung\u00fcnstigeren, aber realistischen Betriebszust\u00e4nden tr\u00e4gt.","ref":""}]}]},{"id":"verkehr-und-belegung","heading":"Ben\u00f6tigte Worker aus Anfragen absch\u00e4tzen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Die RAM-Rechnung beschreibt, wie viele Worker voraussichtlich Platz finden. F\u00fcr den Bedarf z\u00e4hlt dagegen, wie viele PHP-Anfragen tats\u00e4chlich im betrachteten Pool eintreffen und wie lange sie einen Worker binden. Als erste N\u00e4herung gilt: mittlere gleichzeitig belegte Worker gleich PHP-Requests pro Sekunde multipliziert mit der mittleren Worker-Belegungszeit in Sekunden.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Illustratives Rechenbeispiel, keine Messung: Bei angenommenen 20 PHP-Requests pro Sekunde und einer mittleren Belegungszeit von 0,25 Sekunden sind im Mittel f\u00fcnf Worker besch\u00e4ftigt. Das ist ein Durchschnitt \u00fcber den betrachteten Zeitraum. Er sagt weder, dass immer genau f\u00fcnf Prozesse arbeiten, noch, dass f\u00fcnf als Pool-Limit f\u00fcr kurze Spitzen ausreichen.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr die Anfragezahl verwendest du nicht ungepr\u00fcft s\u00e4mtliche Seitenaufrufe. Wenn ein Cache viele Antworten ausliefert, ohne PHP aufzurufen, belasten diese Treffer den Pool nicht. Umgekehrt k\u00f6nnen Cache-Misses, eingeloggte Besucher und Verwaltungszugriffe zeitweise mehr PHP-Arbeit ausl\u00f6sen, als ein \u00fcber den ganzen Tag gebildeter Durchschnitt vermuten l\u00e4sst.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Die ","ref":""},{"kind":"strong","text":"Worker-Belegungszeit","ref":""},{"kind":"text","text":" umfasst auch Wartezeiten innerhalb der Bearbeitung, etwa auf eine Datenbank oder einen externen Dienst. Sie ist nicht automatisch mit der im Browser sichtbaren Antwortzeit gleichzusetzen. Nach ","ref":""},{"kind":"code","text":"fastcgi_finish_request()","ref":""},{"kind":"text","text":" kann PHP die Antwort bereits an den Client abgeschlossen haben und dennoch weitere Arbeit im Worker ausf\u00fchren.","ref":""},{"kind":"citation","text":"","ref":"S4"}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr akzeptable Wartezeiten brauchst du Spielraum \u00fcber der mittleren Belegung. Wie gro\u00df er sein muss, h\u00e4ngt unter anderem von Lastschwankungen, langsamen Endpunkten und dem gew\u00fcnschten Antwortzeitziel ab. Eine Multiplikation von Spitzen-Requests pro Sekunde mit einer hohen Latenz-Perzentile kann ein vorsichtiger Szenariocheck sein, ist aber keine pr\u00e4zise Warteschlangenprognose.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Betrachte deshalb mehrere Zeitr\u00e4ume getrennt: Eine kurze Aktionsspitze und ruhiger Nachtverkehr k\u00f6nnen denselben Tagesmittelwert ergeben wie ein gleichm\u00e4\u00dfigerer Betrieb, stellen aber unterschiedliche Anforderungen. Steigt die Belegungszeit durch ein langsames Backend, w\u00e4chst bei gleicher Ankunftsrate auch die mittlere Zahl gebundener Worker. Der Bedarf ist damit nicht allein eine Eigenschaft des Besucheraufkommens.","ref":""}]}]},{"id":"pool-konfiguration","heading":"Pool-Einstellungen aus der Planung ableiten","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Stelle nun die RAM-basierte Obergrenze dem gesch\u00e4tzten Bedarf einschlie\u00dflich Spielraum gegen\u00fcber. Passt der Bedarf darunter, w\u00e4hle einen vorsichtigen Startwert f\u00fcr ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":", der das Budget nicht aussch\u00f6pfen muss. Im illustrativen Beispiel w\u00e4ren 25 die rechnerische RAM-Grenze, nicht automatisch die passende Einstellung; CPU und Backend k\u00f6nnen schon vorher begrenzen.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Liegt der gesch\u00e4tzte Bedarf \u00fcber der RAM-Grenze, l\u00f6st ein h\u00f6heres Limit den Widerspruch nicht: Es kann den Host oder Container unter Speicherdruck setzen. Umgekehrt kann ein sehr niedriges Limit Anfragen warten lassen. Verbessere in diesem Fall etwa die Ausf\u00fchrungszeit oder Cache-Nutzung und pr\u00fcfe, ob zus\u00e4tzliche Ressourcen oder eine Begrenzung der Eingangslast n\u00f6tig sind.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Bei ","ref":""},{"kind":"strong","text":"dynamic","ref":""},{"kind":"text","text":" legst du neben der Obergrenze die Startzahl sowie Mindest- und H\u00f6chstzahl freier Worker fest. Die Start- und Reservewerte sollten zur erwarteten Last passen und innerhalb der Obergrenze bleiben. Zu wenig vorgehaltene Kapazit\u00e4t kann bei pl\u00f6tzlicher Last zus\u00e4tzlichen Startbedarf bedeuten; dauerhaft viele freie Prozesse verbrauchen dagegen Ressourcen.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Bei ","ref":""},{"kind":"strong","text":"ondemand","ref":""},{"kind":"text","text":" entstehen Worker erst bei Bedarf; die Leerlaufzeit bis zu ihrer Beendigung wird gesondert eingestellt. Das kann f\u00fcr selten genutzte Pools sinnvoll sein, erfordert aber bei schnellen Lastanstiegen besondere Aufmerksamkeit. Auch hier begrenzt ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":" die Zahl der gleichzeitig verf\u00fcgbaren Worker des Pools.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Mehrere Websites auf demselben Host erhalten nicht unabh\u00e4ngig voneinander jeweils das gesamte freie RAM. Budgetiere ihre m\u00f6glichen Pool-Maxima zusammen mit den \u00fcbrigen Diensten und der Reserve. Eine gegebenenfalls konfigurierte globale FPM-Prozessgrenze kann zus\u00e4tzlich greifen, ersetzt aber weder die einzelnen Pool-Budgets noch die Pr\u00fcfung von CPU und Datenbankkapazit\u00e4t.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Pr\u00fcfe nach \u00c4nderungen die tats\u00e4chliche Auslastung und Wartezeiten \u00fcber geeignete Zeitr\u00e4ume, statt den Startwert als endg\u00fcltig anzusehen. Bei Managed Hosting sind Prozessdaten oder Pool-Einstellungen m\u00f6glicherweise nicht direkt zug\u00e4nglich; nutze dann die Metriken und freigegebenen Optionen des Anbieters. Welche Einstellungen verf\u00fcgbar sind, h\u00e4ngt au\u00dferdem von PHP-Version und Betriebsumgebung ab.","ref":""}]}]}],"3":[{"id":"status-und-messung","heading":"FPM-Status und Speicher beobachten","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Die FPM-Statusseite zeigt, ob die geplanten Worker unter realer Last ausreichen. ","ref":""},{"kind":"strong","text":"Sch\u00fctze den Statusendpunkt","ref":""},{"kind":"text","text":" vor \u00f6ffentlichem Zugriff: Er kann sensible Angaben \u00fcber Anfragen und Ressourcen preisgeben. Ein separat konfigurierter Status-Listener kann auch bei einem ausgelasteten Hauptpool erreichbar bleiben; pr\u00fcfe seine Verf\u00fcgbarkeit und Einrichtung f\u00fcr deine PHP-Version und Webserver-Konfiguration.","ref":""},{"kind":"citation","text":"","ref":"S1"},{"kind":"citation","text":"","ref":"S2"}]},{"type":"table","caption":"FPM-Statuswerte im zeitlichen Zusammenhang auswerten","headers":["Statuswert","Einordnung","Anschlussfrage"],"rows":[["active processes \/ idle processes","Aktuell besch\u00e4ftigte und freie Worker","Bleiben bei Lastspitzen freie Worker verf\u00fcgbar?"],["listen queue \/ max listen queue","Aktuelle und bisher maximale Warteschlangenl\u00e4nge","W\u00e4chst die Warteschlange w\u00e4hrend langsamer Antworten?"],["max children reached","Z\u00e4hler f\u00fcr das Erreichen der Worker-Grenze bei dynamic oder ondemand","Steigt der Z\u00e4hler im betrachteten Zeitraum?"],["slow requests","Z\u00e4hler langsamer Anfragen","F\u00e4llt sein Anstieg mit l\u00e4ngeren Antwortzeiten zusammen?"]],"source_ids":["S2"]},{"type":"paragraph","runs":[{"kind":"text","text":"Betrachte die Werte als ","ref":""},{"kind":"strong","text":"Zeitreihen","ref":""},{"kind":"text","text":" zusammen mit Anfragevolumen und Antwortzeiten. Ein alter H\u00f6chstwert der Warteschlange beweist keine aktuelle \u00dcberlastung; ebenso ist bei Z\u00e4hlern ihr Anstieg seit der letzten Beobachtung aussagekr\u00e4ftiger als der blo\u00dfe Gesamtwert. Ber\u00fccksichtige dabei den Poolstart beziehungsweise Neustarts, durch die sich der Bezugszeitraum \u00e4ndert.","ref":""},{"kind":"citation","text":"","ref":"S2"}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr einen bekannten FPM-Worker kannst du auf einem Linux-System mit verf\u00fcgbarer proc-Schnittstelle aggregierte Speicherwerte lesend abrufen. Ersetze ","ref":""},{"kind":"code","text":"PID","ref":""},{"kind":"text","text":" durch die tats\u00e4chliche Prozess-ID; du ben\u00f6tigst die entsprechenden Zugriffsrechte. Wiederhole die Beobachtung f\u00fcr mehrere Worker und Lastzust\u00e4nde, statt aus einem einzelnen Prozess eine dauerhafte Poolgr\u00f6\u00dfe abzuleiten.","ref":""},{"kind":"citation","text":"","ref":"S6"}]},{"type":"code","language":"bash","code":"cat \/proc\/PID\/smaps_rollup","source_ids":["S6"]}]},{"id":"engpaesse-diagnostizieren","heading":"Langsame Requests und Warteschlangen untersuchen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Ein Shop kann viele aktive Worker anzeigen, obwohl nicht die PHP-Ausf\u00fchrung selbst der urspr\u00fcngliche Engpass ist. Warten Anfragen auf langsame Datenbankabfragen, bleiben die Worker w\u00e4hrenddessen gebunden. Treffen weitere Anfragen ein, kann die Listener-Warteschlange wachsen und die Antwortzeit steigen, selbst wenn die CPU noch Reserven zeigt.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Eine h\u00f6here Worker-Grenze l\u00e4sst in dieser Situation m\u00f6glicherweise mehr Anfragen gleichzeitig zur Datenbank gelangen. Das kann den ","ref":""},{"kind":"strong","text":"Backend-Druck","ref":""},{"kind":"text","text":" erh\u00f6hen und Wartezeiten weiter verl\u00e4ngern. Vergleiche deshalb den zeitlichen Verlauf von FPM-Auslastung und Warteschlange mit Datenbanklast, langsamen Abfragen und externen Dienstaufrufen, bevor du die Grenze erh\u00f6hst.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Das FPM-Slowlog hilft, lange PHP-Aufrufe einzugrenzen: F\u00fcr Anfragen \u00fcber einer konfigurierten Schwelle kann FPM einen Backtrace protokollieren. Dieser zeigt einen Ausf\u00fchrungspunkt und ist kein vollst\u00e4ndiges Profil der gesamten Anfrage. Wiederkehrende Stellen lassen sich mit Anfragedauer und Backend-Metriken abgleichen; die ","ref":""},{"kind":"internal_link","text":"Anleitung zum Auswerten des PHP-FPM Slowlogs","ref":"I3"},{"kind":"text","text":" erl\u00e4utert die weitere Analyse.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Auch ein Timeout ist von der eigentlichen Kapazit\u00e4t zu trennen. Bei nginx bezeichnet ","ref":""},{"kind":"code","text":"fastcgi_read_timeout","ref":""},{"kind":"text","text":" den zul\u00e4ssigen Abstand zwischen aufeinanderfolgenden Lesevorg\u00e4ngen vom FastCGI-Server, nicht pauschal die gesamte Requestdauer. Ein h\u00f6herer Wert kann l\u00e4ngeres Warten zulassen, schafft aber weder zus\u00e4tzliche Worker noch beschleunigt er die Datenbank.","ref":""},{"kind":"citation","text":"","ref":"S5"}]}]},{"id":"kapazitaet-entscheiden","heading":"Kapazit\u00e4tsgrenzen und n\u00e4chste Schritte","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Reicht das RAM-Budget nicht f\u00fcr den gesch\u00e4tzten Bedarf, l\u00f6st eine h\u00f6here Einstellung f\u00fcr ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":" den Zielkonflikt nicht: Zus\u00e4tzliche Prozesse ben\u00f6tigen ebenfalls Speicher. Pr\u00fcfe stattdessen, ob sich die Zahl der PHP-Anfragen oder die Dauer ihrer Worker-Belegung senken l\u00e4sst. Welche Ma\u00dfnahme sinnvoll ist, h\u00e4ngt davon ab, wo die beobachtete Last entsteht.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Ein besser genutzter Cache kann wiederholte Aufrufe abfangen, w\u00e4hrend schnellere PHP-Ausf\u00fchrung und Datenbankzugriffe Worker fr\u00fcher freigeben. Geeignete Hintergrundarbeit l\u00e4sst sich aus dem unmittelbaren Anfragepfad auslagern; auch diese Arbeit ben\u00f6tigt allerdings eigene Ressourcen. Eine Lastbegrenzung sch\u00fctzt bei Spitzen das Backend, kann aber dazu f\u00fchren, dass Anfragen warten oder abgewiesen werden.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Zus\u00e4tzliches RAM kann eine h\u00f6here Worker-Zahl erm\u00f6glichen, wenn Speicher tats\u00e4chlich die ma\u00dfgebliche Grenze ist. Sind CPU, Datenbank oder ein externer Dienst bereits ausgelastet, muss deren Kapazit\u00e4t ebenfalls ber\u00fccksichtigt werden. Mehr Speicher allein garantiert deshalb weder k\u00fcrzere Antwortzeiten noch einen h\u00f6heren Durchsatz.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Steigt der Speicherbedarf einzelner Worker \u00fcber ihre Lebensdauer, kann ","ref":""},{"kind":"code","text":"pm.max_requests","ref":""},{"kind":"text","text":" deren regelm\u00e4\u00dfiges Ersetzen veranlassen. Das kann beim Umgang mit Speicherlecks in Drittbibliotheken helfen, behebt aber nicht deren Ursache. Beobachte nach einer \u00c4nderung weiterhin Pool-Speicher und Anfrageverhalten, statt den Neustartmechanismus als Ersatz f\u00fcr die Fehlersuche zu behandeln.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr eine breitere Architekturentscheidung bietet der ","ref":""},{"kind":"internal_link","text":"Vergleich von NGINX Unit und PHP-FPM","ref":"I1"},{"kind":"text","text":" Kontext; NGINX Unit ist archiviert und wird nicht mehr gepflegt. Unabh\u00e4ngig von der gew\u00e4hlten Architektur solltest du \u00c4nderungen anhand von ","ref":""},{"kind":"strong","text":"Zeitreihen","ref":""},{"kind":"text","text":" pr\u00fcfen: Vergleiche bei \u00e4hnlichem Anfragevolumen Warteschlange, Worker-Auslastung, Speicher und Antwortzeiten. So l\u00e4sst sich erkennen, ob eine Anpassung den Engpass tats\u00e4chlich entsch\u00e4rft oder lediglich verlagert hat.","ref":""},{"kind":"citation","text":"","ref":"S2"}]}]}]},"plan":{"reader_question":"Wie viele gleichzeitige PHP-Anfragen kann ein Server innerhalb seines RAM-Budgets bearbeiten, und wie l\u00e4sst sich pm.max_children passend zum tats\u00e4chlichen Anfrageverkehr planen?","sections":[{"id":"worker-und-anfragen","heading":"Was ein PHP-FPM Worker begrenzt","part":1,"target_words":270,"purpose":"Pool, Worker und pm.max_children erkl\u00e4ren und gleichzeitig bearbeitete PHP-Anfragen von Besuchern und Requests pro Sekunde abgrenzen. An Cache-Treffern und statischen Dateien zeigen, warum nicht jeder Seitenaufruf einen Worker belegt. In kurzen Abs\u00e4tzen RAM-Grenze und ben\u00f6tigte Auslastung als getrennte Fragen einf\u00fchren.","source_ids":["S1"],"internal_link_ids":[]},{"id":"prozessmanager","heading":"Prozessmanager und Warteschlange verstehen","part":1,"target_words":270,"purpose":"static, dynamic und ondemand mit Startverhalten, freien Workern und Ressourcenfolgen unterscheiden. Erl\u00e4utern, wie die Listener-Warteschlange bei belegten Workern Wartezeit aufnimmt, aber keine zus\u00e4tzliche Verarbeitungskapazit\u00e4t schafft. Eine kompakte Vergleichstabelle zu Einstellungen, Einsatzf\u00e4llen und Nachteilen vorsehen.","source_ids":["S1","S2"],"internal_link_ids":[]},{"id":"speichergrundlagen","heading":"Worker-Speicher richtig einordnen","part":1,"target_words":270,"purpose":"RSS und PSS anhand gemeinsam genutzter Speicherseiten unterscheiden; erkl\u00e4ren, warum summiertes RSS mehrfach z\u00e4hlen kann und PSS nur eine last- und prozesszahlabh\u00e4ngige Momentaufnahme ist. memory_limit vom tats\u00e4chlichen Prozessspeicher abgrenzen und OPcache bei bereits enthaltener PSS nicht erneut pauschal abziehen.","source_ids":["S3"],"internal_link_ids":[]},{"id":"ram-budget","heading":"RAM-Budget und Worker-Zahl berechnen","part":2,"target_words":300,"purpose":"Vom wirksamen Host- oder Containerlimit Dienste, andere Pools und Reserve abziehen. Pool-PSS bei mehreren Worker-Zahlen und repr\u00e4sentativen sowie speicherintensiven Requests betrachten; aus einem konservativen N\u00e4herungswert Budget geteilt durch Worker-Speicher abrunden. Eine illustrative Rechnung und Tabelle mit Annahmen und Unsicherheiten planen; keine Messung suggerieren.","source_ids":["S3","S6"],"internal_link_ids":[]},{"id":"verkehr-und-belegung","heading":"Ben\u00f6tigte Worker aus Anfragen absch\u00e4tzen","part":2,"target_words":280,"purpose":"Mittlere Belegung als PHP-Requests pro Sekunde mal mittlere Worker-Bindungszeit herleiten. Das ausdr\u00fccklich illustrative Beispiel mit 20 Requests pro Sekunde und 0,25 Sekunden ergibt im Mittel f\u00fcnf belegte Worker; Lastspitzen und Wartezeit erfordern Spielraum. Datenbankwartezeit und Arbeit nach fastcgi_finish_request() einbeziehen; Perzentil-Multiplikation nicht als Warteschlangenprognose ausgeben.","source_ids":["S4"],"internal_link_ids":[]},{"id":"pool-konfiguration","heading":"Pool-Einstellungen aus der Planung ableiten","part":2,"target_words":270,"purpose":"RAM-Obergrenze und gesch\u00e4tzten Bedarf gegen\u00fcberstellen und einen vorsichtigen Startwert f\u00fcr pm.max_children sowie passende dynamic- oder ondemand-Einstellungen erl\u00e4utern. Mehrere Pools und gegebenenfalls globale Prozessgrenze gemeinsam budgetieren; CPU und Backend-Kapazit\u00e4t begrenzen die Entscheidung zus\u00e4tzlich. Managed-Hosting-Zugriff und Versionsabh\u00e4ngigkeit ber\u00fccksichtigen.","source_ids":["S1"],"internal_link_ids":[]},{"id":"status-und-messung","heading":"FPM-Status und Speicher beobachten","part":3,"target_words":270,"purpose":"Gesch\u00fctzte Statusseite und gegebenenfalls separaten Status-Listener einordnen. Aktive und freie Worker, Warteschlange, max children reached und slow requests als Zeitreihen mit Poolstart und Antwortzeiten auswerten; eine Statuswert-Tabelle vorsehen. Den lesenden Befehl cat \/proc\/PID\/smaps_rollup samt PID-Ersatz und Berechtigungsgrenzen nennen.","source_ids":["S1","S2","S6"],"internal_link_ids":[]},{"id":"engpaesse-diagnostizieren","heading":"Langsame Requests und Warteschlangen untersuchen","part":3,"target_words":270,"purpose":"Am Shop mit langsamer Datenbank zeigen, warum mehr Worker Backend-Druck erh\u00f6hen k\u00f6nnen. Slowlog als Einstieg in die Ursachenanalyse mit Datenbanklast und externen Aufrufen verkn\u00fcpfen. fastcgi_read_timeout korrekt als Abstand zwischen Lesevorg\u00e4ngen erkl\u00e4ren; ein h\u00f6herer Timeout schafft keine Kapazit\u00e4t. Vertiefenden Slowlog-Artikel zuordnen.","source_ids":["S1","S5"],"internal_link_ids":["I3"]},{"id":"kapazitaet-entscheiden","heading":"Kapazit\u00e4tsgrenzen und n\u00e4chste Schritte","part":3,"target_words":260,"purpose":"Bei unzureichendem RAM-Budget Cache, schnellere Ausf\u00fchrung, ausgelagerte Arbeit, Lastbegrenzung und zus\u00e4tzliche Ressourcen gegeneinander abw\u00e4gen. pm.max_requests als m\u00f6glichen Umgang mit Lecks, nicht als Ursachenbehebung erkl\u00e4ren. F\u00fcr Architekturentscheidungen auf den erg\u00e4nzenden Vergleich mit dem archivierten NGINX Unit verweisen und \u00c4nderungen anhand beobachteter Zeitreihen \u00fcberpr\u00fcfen.","source_ids":["S1","S2"],"internal_link_ids":["I1"]}]},"repairs":0,"reviews":1,"issues":[],"guard":{"content_md5":"b99a6321bcea002fa2d3704eb8c99934","title":"PHP-FPM Capacity Planning: Calculating Workers, RAM, and Concurrent Requests","slug":"php-fpm-capacity-planning-worker-ram-requests","excerpt":"How many PHP-FPM workers can fit in RAM, and how many are actually needed to handle traffic? This article explains PSS measurement, worker allocation, and the limits of `pm.max_children`.","status":"draft","featured_media":22160},"verify":{"content_md5":"b99a6321bcea002fa2d3704eb8c99934","title":"PHP-FPM Capacity Planning: Calculating Workers, RAM, and Concurrent Requests","slug":"php-fpm-capacity-planning-worker-ram-requests","excerpt":"How many PHP-FPM workers can fit in RAM, and how many are actually needed to handle traffic? This article explains PSS measurement, worker allocation, and the limits of `pm.max_children`.","status":"draft","featured_media":22160},"row_number":1936,"created_at":"2026-11-04T13:33:59+00:00","editorial_policy":{"version":"2.1.6","max_repairs":4,"review_model_from_attempt":2},"updated_at":"2026-11-04T13:38:51+00:00","verified_at":"2026-11-04T13:38:34+00:00"},"_wh_make_research":"# Recherchebriefing: PHP-FPM-Kapazit\u00e4tsplanung\n\nRecherchebezug: 4. November 2026  \nGeplanter Artikelumfang: 2.400\u20132.700 W\u00f6rter\n\n## Leserfrage und Ziel\n\nWie viele gleichzeitige PHP-Anfragen kann ein Server bearbeiten, ohne seinen Speicher zu ersch\u00f6pfen, und wie l\u00e4sst sich daf\u00fcr ein sinnvoller Wert f\u00fcr pm.max_children bestimmen?\n\nDer Artikel sollte zwei Fragen getrennt beantworten: Wie viele Worker passen voraussichtlich in das verf\u00fcgbare RAM? Und wie viele werden ben\u00f6tigt, um den tats\u00e4chlichen Anfrageverkehr mit akzeptabler Wartezeit zu bearbeiten? Der kleinere Wert ist nicht automatisch die endg\u00fcltige Einstellung: CPU, Datenbank, externe Dienste und Lastspitzen k\u00f6nnen die praktische Kapazit\u00e4t weiter begrenzen.\n\nZielgruppe sind Administratoren und technisch interessierte Betreiber von PHP-Websites. Vorausgesetzt werden Grundkenntnisse zu Webserver, PHP-FPM, Linux-Prozessen und Konfigurationsdateien. Auf Managed Hosting kann der Zugriff auf Prozessdaten und Pool-Einstellungen eingeschr\u00e4nkt sein; dort sind Anbieter-Metriken und freigegebene Einstellungen die Ausgangsbasis.\n\n## Gesicherte Funktionsweise\n\nPHP-FPM verwaltet Worker in Pools. Ein Worker bearbeitet eine PHP-Anfrage; pm.max_children begrenzt pro Pool die Zahl gleichzeitig bearbeiteter Anfragen. Das ist weder die Zahl gleichzeitig angemeldeter Besucher noch ein direkter Wert f\u00fcr Requests pro Sekunde. Statische Dateien oder vollst\u00e4ndig zwischengespeicherte Antworten m\u00fcssen abh\u00e4ngig von der Architektur keinen PHP-Worker belegen. ([php.net](https:\/\/www.php.net\/install.fpm.configuration?utm_source=openai))\n\nDie Prozessmanager unterscheiden sich darin, wann Worker bereitstehen:\n\n- static h\u00e4lt die durch pm.max_children festgelegte Prozesszahl vor. Das erleichtert die Planung bei gleichm\u00e4\u00dfiger Last, bindet aber auch im Leerlauf Ressourcen.\n- dynamic passt die Anzahl zwischen Bedarf und Obergrenze an. Startzahl und gew\u00fcnschte freie Worker werden gesondert konfiguriert.\n- ondemand startet Worker bei Bedarf und beendet sie nach einer konfigurierten Leerlaufzeit. Das kann bei selten genutzten Pools Ressourcen sparen; bei pl\u00f6tzlich eintreffender Last muss der Startbedarf ber\u00fccksichtigt werden. ([php.net](https:\/\/www.php.net\/install.fpm.configuration?utm_source=openai))\n\nSind alle Worker besch\u00e4ftigt, k\u00f6nnen weitere Anfragen in der Listener-Warteschlange warten. Deren Gr\u00f6\u00dfe ist kein Ersatz f\u00fcr Bearbeitungskapazit\u00e4t: Eine gr\u00f6\u00dfere Warteschlange kann Wartezeit verlagern, ohne die Ursache langsamer Requests zu beseitigen. Der FPM-Status zeigt unter anderem aktive und freie Prozesse, die aktuelle und maximale Warteschlange sowie Hinweise auf erreichte Worker-Grenzen. ([php.net](https:\/\/www.php.net\/fpm.status.php?utm_source=openai))\n\n## RAM-Budget und Worker-Verbrauch\n\nDer Artikel sollte die Rechnung in nachvollziehbaren Schritten aufbauen:\n\n1. Verf\u00fcgbares RAM beziehungsweise das wirksame Containerlimit bestimmen.\n2. Speicher f\u00fcr Betriebssystem, Webserver, Datenbank, andere Dienste, \u00fcbrige FPM-Pools und eine Reserve abziehen.\n3. Den verbleibenden Budgetanteil f\u00fcr den betrachteten Pool festlegen.\n4. Einen unter repr\u00e4sentativer Last beobachteten Speicherbedarf je Worker sch\u00e4tzen.\n5. Budget durch diesen Sch\u00e4tzwert teilen und abrunden. Das Ergebnis ist ein RAM-basierter Planungswert, keine Garantie.\n\nWichtig ist die Messmethode. RSS z\u00e4hlt residenten Speicher pro Prozess und kann gemeinsam genutzte Seiten bei mehreren Workern mehrfach enthalten. PSS verteilt gemeinsam genutzte Seiten anteilig auf die beteiligten Prozesse. Damit ist die Summe der PSS-Werte f\u00fcr eine Prozessgruppe oft hilfreicher als die Summe ihrer RSS-Werte. PSS bleibt aber eine Momentaufnahme und ver\u00e4ndert sich unter anderem mit der Zahl der Prozesse, die Seiten teilen. ([docs.kernel.org](https:\/\/docs.kernel.org\/7.0\/filesystems\/proc.html?utm_source=openai))\n\nF\u00fcr die Planung sollten mehrere Worker \u00fcber typische und speicherintensive Requests hinweg betrachtet werden, nicht nur ein frisch gestarteter Prozess. Ein sinnvoller Ansatz ist, die gesamte Pool-PSS bei verschiedenen Worker-Zahlen und Lastzust\u00e4nden zu beobachten und daraus einen konservativen N\u00e4herungswert abzuleiten. Gemeinsam genutzten Speicher, etwa durch OPcache, nicht pauschal zus\u00e4tzlich abziehen, wenn er bereits anteilig in der verwendeten PSS-Summe steckt. Eine Extrapolation bleibt unsicher, weil sich gemeinsame und private Anteile bei anderer Prozesszahl und anderem Workload \u00e4ndern.\n\nDas PHP-memory_limit ist keine zuverl\u00e4ssige Angabe des gesamten Betriebssystem-Speichers eines FPM-Prozesses und ersetzt deshalb keine Prozessmessung. Ebenso ist ein einzelner Durchschnittswert ungeeignet, wenn seltene Endpunkte erheblich mehr Speicher belegen.\n\n## Zusammenhang zwischen Requests und ben\u00f6tigten Workern\n\nAls erste N\u00e4herung kann der Artikel die mittlere Belegung erl\u00e4utern:\n\nMittlere gleichzeitig belegte Worker \u2248 PHP-Requests pro Sekunde \u00d7 mittlere Worker-Belegungszeit in Sekunden.\n\nDie Anfragezahl muss sich auf tats\u00e4chlich bei diesem Pool eintreffende PHP-Requests beziehen. Die Belegungszeit meint die Zeit, in der der Worker gebunden ist, einschlie\u00dflich relevanter Wartezeiten auf Datenbank oder externe Dienste. Sie ist nicht ohne Weiteres identisch mit der im Browser sichtbaren Antwortzeit. PHP-FPM unterst\u00fctzt au\u00dferdem Verarbeitung nach dem Senden der Antwort \u00fcber fastcgi_finish_request(); der Worker kann dadurch weiterhin besch\u00e4ftigt sein. ([php.net](https:\/\/www.php.net\/manual\/de\/install.fpm.php?utm_source=openai))\n\nIllustratives Rechenbeispiel, keine Messung: Bei angenommenen 20 PHP-Requests pro Sekunde und durchschnittlich 0,25 Sekunden Worker-Belegung ergeben sich im Mittel f\u00fcnf gleichzeitig belegte Worker. Daraus folgt nicht, dass f\u00fcnf Worker f\u00fcr einen zuverl\u00e4ssigen Betrieb gen\u00fcgen: Schwankende Ankunftsraten, langsame Endpunkte und das gew\u00fcnschte Antwortzeitziel erfordern zus\u00e4tzlichen Spielraum. Die Multiplikation von Spitzen-RPS mit einer hohen Latenz-Perzentile ist ebenfalls keine pr\u00e4zise Warteschlangenprognose; sie kann h\u00f6chstens als vorsichtiger Szenariocheck dienen.\n\n## Relevante Praxisf\u00e4lle\n\n**1. Cache-lastige Website:** Der Webserver oder ein vorgeschalteter Cache beantwortet viele Aufrufe ohne PHP. F\u00fcr die FPM-Planung z\u00e4hlt daher die verbleibende PHP-Last, besonders bei Cache-Misses, eingeloggten Nutzern und Administrationszugriffen. Ein niedriger durchschnittlicher FPM-Durchsatz schlie\u00dft kurzzeitige Lastspitzen nicht aus.\n\n**2. Shop mit langsamer Datenbank:** Viele aktive Worker und eine wachsende Warteschlange k\u00f6nnen auf langsame SQL-Abfragen oder blockierende externe Aufrufe hindeuten. Mehr Worker k\u00f6nnten gleichzeitig mehr Druck auf die Datenbank aus\u00fcben. Deshalb zuerst Belegungsdauer, Datenbanklast und langsame Requests gemeinsam betrachten; slowlog kann bei der Suche nach langen PHP-Aufrufen helfen. ([php.net](https:\/\/www.php.net\/install.fpm.configuration?utm_source=openai))\n\n**3. Mehrere Websites auf einem Host:** Jeder Pool hat eigene Grenzen, alle konkurrieren aber um dasselbe RAM und dieselbe CPU. Die Summe der m\u00f6glichen Pool-Maxima muss zusammen mit anderen Diensten und Reserve bewertet werden. Eine globale FPM-Prozessgrenze kann zus\u00e4tzlich relevant sein; sie ersetzt keine saubere Budgetierung je Pool. ([php.net](https:\/\/www.php.net\/install.fpm.configuration?utm_source=openai))\n\n**4. Container mit Speicherlimit:** Nicht vom physischen Host-RAM ausgehen, sondern vom tats\u00e4chlich geltenden Limit und den darin enthaltenen Prozessen. Bei knappen Limits zus\u00e4tzlich Reserven und beobachteten Gesamtverbrauch ber\u00fccksichtigen; die reine Worker-Rechnung bildet nicht alle Speicheranteile ab.\n\n## Diagnose, Entscheidungen und Grenzen\n\nDie FPM-Statusseite sollte nur intern beziehungsweise f\u00fcr ausdr\u00fccklich berechtigte Clients erreichbar sein, da sie sensible Informationen \u00fcber Requests und Ressourcen offenlegen kann. Ein separat konfigurierter Status-Listener kann die Abfrage auch dann erm\u00f6glichen, wenn der Hauptpool besch\u00e4ftigt ist. Seine Verf\u00fcgbarkeit und Einrichtung sind f\u00fcr die eingesetzte PHP-Version und Webserver-Konfiguration zu pr\u00fcfen. ([php.net](https:\/\/www.php.net\/install.fpm.configuration?utm_source=openai))\n\nF\u00fcr die Auswertung sind Zeitreihen wichtiger als ein einzelner Statusabruf: aktive und freie Worker, listen queue, max listen queue, max children reached und slow requests zusammen mit Anfragevolumen und Antwortzeiten betrachten. Maximal- und Z\u00e4hlerwerte brauchen den zeitlichen Bezug zum Poolstart; aus einem alten H\u00f6chstwert allein folgt keine aktuelle \u00dcberlastung. ([php.net](https:\/\/www.php.net\/fpm.status.php?utm_source=openai))\n\nWenn das RAM-Budget weniger Worker erlaubt als der Workload ben\u00f6tigt, sind Alternativen: PHP-Ausf\u00fchrung oder Datenbankzugriffe beschleunigen, Cache-Treffer erh\u00f6hen, Hintergrundarbeit auslagern, Last begrenzen oder Ressourcen erweitern. pm.max_requests kann das regelm\u00e4\u00dfige Ersetzen von Workern erm\u00f6glichen, etwa als Umgang mit Speicherlecks in Drittbibliotheken; es behebt deren Ursache nicht. ([php.net](https:\/\/www.php.net\/install.fpm.configuration?utm_source=openai))\n\nEin h\u00e4ufiger Fehler ist, den nginx-Wert fastcgi_read_timeout als gesamte maximale Requestdauer zu interpretieren. Laut nginx-Dokumentation betrifft er den Abstand zwischen aufeinanderfolgenden Lesevorg\u00e4ngen vom FastCGI-Server. Ein h\u00f6herer Timeout schafft zudem keine zus\u00e4tzliche Worker-Kapazit\u00e4t. ([nginx.org](https:\/\/nginx.org\/en\/docs\/http\/ngx_http_fastcgi_module.html?utm_source=openai))\n\n## Sichere Beispiele und Tabellenplanung\n\n**Terminalbefehl, nur lesend:** F\u00fcr einen bekannten und berechtigten Linux-Prozess kann cat \/proc\/PID\/smaps_rollup die aggregierten Speicherwerte anzeigen. PID ist durch die Prozess-ID zu ersetzen. Zugriff und Verf\u00fcgbarkeit h\u00e4ngen von System und Berechtigungen ab; nicht alle Systeme stellen dieselbe Schnittstelle bereit. Keine produktiven \u00c4nderungen oder Lasttests ausf\u00fchren. ([kernel.org](https:\/\/www.kernel.org\/doc\/html\/v6.12\/filesystems\/proc.html?utm_source=openai))\n\nF\u00fcr den sp\u00e4teren Artikel eignen sich drei Tabellen:\n\n- Prozessmanager: Startverhalten, ben\u00f6tigte Einstellungen, Einsatzfall und abzuw\u00e4gende Nachteile.\n- Statuswerte: Bedeutung, Aussage \u00fcber aktuellen Zustand oder bisherigen H\u00f6chstwert, m\u00f6gliche Anschlussdiagnose.\n- Kapazit\u00e4tsrechnung: RAM-Budget, Messmethode, Worker-Sch\u00e4tzwert, rechnerische Obergrenze und ausdr\u00fccklich ausgewiesene Unsicherheiten.\n\nEin Chart ist mangels geeigneter Messdaten nicht erforderlich. Ein Zahlenbeispiel im Text gen\u00fcgt, sofern es ausdr\u00fccklich als illustrativ gekennzeichnet ist.\n\n## Quelldokumente f\u00fcr die Artikelplanung\n\n- S1: PHP-Handbuch, FPM Configuration \u2013 Prozessmanager, Pool-Limits, Status-Listener und Slowlog. ([php.net](https:\/\/www.php.net\/install.fpm.configuration?utm_source=openai))\n- S2: PHP-Handbuch, FPM Status Page \u2013 Statusfelder und Schutz des Endpunkts. ([php.net](https:\/\/www.php.net\/fpm.status.php?utm_source=openai))\n- S3: Linux-Kernel-Dokumentation, \/proc Filesystem \u2013 RSS, PSS und smaps_rollup. ([docs.kernel.org](https:\/\/docs.kernel.org\/7.0\/filesystems\/proc.html?utm_source=openai))\n- S4: nginx-Dokumentation, FastCGI-Modul \u2013 insbesondere die Semantik von fastcgi_read_timeout. ([nginx.org](https:\/\/nginx.org\/en\/docs\/http\/ngx_http_fastcgi_module.html?utm_source=openai))\n- S5: PHP-Handbuch, FPM-\u00dcberblick \u2013 Funktionen einschlie\u00dflich fastcgi_finish_request(). ([php.net](https:\/\/www.php.net\/manual\/de\/install.fpm.php?utm_source=openai))\n\nVor Ver\u00f6ffentlichung sollten eingesetzte PHP- und Linux-Versionen sowie die tats\u00e4chlich verf\u00fcgbare Hosting-Oberfl\u00e4che gepr\u00fcft werden. Die genannten Dokumente beschreiben Funktionen, belegen aber keine universellen Performancewerte f\u00fcr eine konkrete Installation.","_wh_make_sources":{"S1":{"id":"S1","url":"https:\/\/www.php.net\/install.fpm.configuration?utm_source=openai","title":"PHP: Configuration - Manual"},"S2":{"id":"S2","url":"https:\/\/www.php.net\/fpm.status.php?utm_source=openai","title":"PHP: Status Page - Manual"},"S3":{"id":"S3","url":"https:\/\/docs.kernel.org\/7.0\/filesystems\/proc.html?utm_source=openai","title":"The \/proc Filesystem \u2014 The Linux Kernel Documentation"},"S4":{"id":"S4","url":"https:\/\/www.php.net\/manual\/de\/install.fpm.php?utm_source=openai","title":"PHP: FastCGI Process Manager (FPM) - Manual"},"S5":{"id":"S5","url":"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_fastcgi_module.html?utm_source=openai","title":"Modules ngx_http_fastcgi_module"},"S6":{"id":"S6","url":"https:\/\/www.kernel.org\/doc\/html\/v6.12\/filesystems\/proc.html?utm_source=openai","title":"The \/proc Filesystem \u2014 The Linux Kernel Documentation"}},"_wh_make_usage":{"research":{"input_tokens":13377,"output_tokens":2589,"response_id":"resp_0de9d77ca410f7ba016aeb3449d7d087d2abbb39037cde8c14","model":"gpt-6.1-terra","search_calls":1},"plan_65cd50b20cbd876bb4fd58c3bdf44934":{"input_tokens":5676,"output_tokens":1152,"response_id":"resp_07070f8cb815141f016aeb3472b32c87d28f5447aaaebcbf59","model":"gpt-6.1-terra","search_calls":0},"part1_d361ac731b1801282b1dfad518a9980e":{"input_tokens":7993,"output_tokens":1789,"response_id":"resp_05469b769500b5be016aeb3483661087d28a9e433d376e7e29","model":"gpt-6.1-terra","search_calls":0},"part2_eda54726519da48991078aa1ed3291f2":{"input_tokens":8043,"output_tokens":2180,"response_id":"resp_0f48008f6008c31e016aeb349bdbb487d28f13358a9673f916","model":"gpt-6.1-terra","search_calls":0},"part3_77c2cc14796e37c2587bca66f0322bfc":{"input_tokens":8071,"output_tokens":1773,"response_id":"resp_09acc0aa3cebdcc4016aeb34be1b8887d288ea1ddad2a21c12","model":"gpt-6.1-terra","search_calls":0},"package_1aaa04ff0a7f94917f643c91e840ffc1":{"input_tokens":15319,"output_tokens":1323,"response_id":"resp_0c56e246dfc75fe1016aeb34d8dda487d2a1187e71bf7bfad0","model":"gpt-6.1-terra","search_calls":0},"review_9466d09b5abf3fe9c0486a57e66f25b6":{"input_tokens":33769,"output_tokens":733,"response_id":"resp_08ce48482b4919d7016aeb34ee0e1087d28a7b5c4d77efb3a4","model":"gpt-6.1-sol","search_calls":2},"image_hero":{"input_tokens":171,"output_tokens":1372,"response_id":"","model":"gpt-image-2.5-flare","search_calls":0},"image_detail1":{"input_tokens":159,"output_tokens":1372,"response_id":"","model":"gpt-image-2.5-flare","search_calls":0},"image_detail2":{"input_tokens":162,"output_tokens":1372,"response_id":"","model":"gpt-image-2.5-flare","search_calls":0}},"_wh_make_last_error":"","_wh_make_write_intent":{"before":{"content_md5":"b6bec4627bf71ed7873cb4f75841c32d","title":"PHP-FPM Capacity Planning: Calculating Workers, RAM, and Concurrent Requests","slug":"php-fpm-capacity-planning-worker-ram-requests","excerpt":"How many PHP-FPM workers can fit in RAM, and how many are actually needed to handle traffic? This article explains PSS measurement, worker allocation, and the limits of `pm.max_children`.","status":"draft","featured_media":0},"expected":{"content_md5":"b99a6321bcea002fa2d3704eb8c99934","title":"PHP-FPM Capacity Planning: Calculating Workers, RAM, and Concurrent Requests","slug":"php-fpm-capacity-planning-worker-ram-requests","excerpt":"How many PHP-FPM workers can fit in RAM, and how many are actually needed to handle traffic? This article explains PSS measurement, worker allocation, and the limits of `pm.max_children`.","status":"draft","featured_media":22160},"at":"2026-11-04T13:38:22+00:00"},"_wh_make_design_version":"2.1.19","rank_math_title":"PHP-FPM Kapazit\u00e4tsplanung: Worker und RAM berechnen","_wh_make_doc":{"title":"PHP-FPM Capacity Planning: Calculating Workers, RAM, and Concurrent Requests","slug":"php-fpm-capacity-planning-worker-ram-requests","excerpt":"How many PHP-FPM workers can fit in RAM, and how many are actually needed to handle traffic? This article explains PSS measurement, worker allocation, and the limits of `pm.max_children`.","seo":{"title":"PHP-FPM Capacity Planning: Calculating Workers and RAM","description":"Scheduling PHP-FPM Workers Based on RAM Budget and Request Allocation: Here's How to Effectively Limit and Monitor `pm.max_children`.","focus_keyword":"PHP-FPM Kapazit\u00e4tsplanung"},"lead":[{"kind":"text","text":"F\u00fcr eine sinnvolle PHP-FPM Kapazit\u00e4tsplanung berechnest du zun\u00e4chst, wie viele Worker in das verf\u00fcgbare RAM-Budget passen. Davon getrennt sch\u00e4tzt du, wie viele Worker der tats\u00e4chlich beim Pool eintreffende Verkehr ben\u00f6tigt. ","ref":""},{"kind":"strong","text":"pm.max_children","ref":""},{"kind":"text","text":" begrenzt die gleichzeitig verf\u00fcgbaren Worker pro Pool, ist aber weder eine Besucherzahl noch ein direkter Durchsatzwert. Auch CPU, Datenbank und Lastspitzen bestimmen, welche Einstellung im Betrieb tragf\u00e4hig ist.","ref":""},{"kind":"citation","text":"","ref":"S1"}],"images":{"hero":{"prompt":"Sachliche redaktionelle Illustration zur Kapazit\u00e4tsplanung von PHP-FPM: Ein l\u00e4nglicher, offener Beh\u00e4lter aus matter grauer Pappe steht seitlich im Bild. Darin liegen mehrere gleichartige kleine Holzquader als Sinnbild begrenzt verf\u00fcgbarer Worker; einige schmale Anfragestreifen warten au\u00dferhalb des Beh\u00e4lters. Die r\u00e4umliche Grenze ist klar erkennbar, ohne eine konkrete Prozesszahl oder Messung zu behaupten. Augenh\u00f6he, asymmetrischer Anschnitt, ruhige erdige Farben und weiche Schatten. Keine Menschen, Schrift, Zahlen, Logos oder Wasserzeichen.","alt":"KI-generierte Illustration eines begrenzten Beh\u00e4lters mit Worker-Quadern und davor wartenden Anfragestreifen.","caption":"KI-generierte Illustration: Die Pool-Grenze begrenzt parallele Worker; weitere Anfragen k\u00f6nnen warten.","filename_base":"php-fpm-worker-kapazitaet-illustration","section_id":"","after_block":0},"detail1":{"prompt":"Fotografisches KI-generiertes Symbolbild zum verf\u00fcgbaren Arbeitsspeicher: Ein einzelnes ausgebautes RAM-Modul liegt diagonal auf einer leicht gebrauchten antistatischen Werkstattmatte. Enger seitlicher Detailausschnitt mit erkennbaren Speicherchips und Kontakten, ohne ein bestimmtes Produkt zu behaupten. Vorhandenes Fensterlicht, nat\u00fcrliche Materialien, dezente Alltagsspuren und sachliche Farben; keine inszenierte Produktwerbung. Keine Menschen, Bildschirme, lesbaren Beschriftungen, Zahlen, Logos oder Wasserzeichen.","alt":"KI-generiertes Symbolbild eines ausgebauten RAM-Moduls auf einer antistatischen Werkstattmatte.","caption":"KI-generiertes Symbolbild: Das verf\u00fcgbare RAM setzt dem Budget f\u00fcr PHP-FPM-Pools eine Grenze.","filename_base":"php-fpm-ram-budget-speichermodul","section_id":"ram-budget","after_block":1},"detail2":{"prompt":"Sachliche redaktionelle Illustration zur Auswertung des FPM-Status: Auf einer hellen matten Fl\u00e4che liegen zwei schmale, unterschiedlich lange Papierstreifen nebeneinander. Einer zeigt eine kleine aktuelle Ansammlung von Punkten, der andere zus\u00e4tzlich eine weiter zur\u00fcckliegende gr\u00f6\u00dfere Ansammlung als Symbol f\u00fcr einen fr\u00fcheren H\u00f6chststand. Schr\u00e4ge Draufsicht mit viel freiem Raum, reduzierte Formen in ged\u00e4mpftem Ocker und Dunkelgrau. Keine exakten Messwerte oder Benutzeroberfl\u00e4che darstellen; keine Menschen, Schrift, Zahlen, Logos oder Wasserzeichen.","alt":"KI-generierte Illustration zweier Papierstreifen mit aktuellen und fr\u00fcheren Punktansammlungen.","caption":"KI-generierte Illustration: Aktuelle Statuswerte und fr\u00fchere H\u00f6chstst\u00e4nde ben\u00f6tigen einen zeitlichen Bezug.","filename_base":"php-fpm-status-zeitlicher-bezug","section_id":"status-und-messung","after_block":3}},"chart":null,"social":{"facebook":"Wie viele PHP-FPM Worker passen ins RAM \u2013 und wie viele ben\u00f6tigt dein tats\u00e4chlicher Verkehr? Wir erkl\u00e4ren die beiden Rechnungen und ihre Grenzen.","instagram":"RAM-Budget und Request-Belegung getrennt betrachten: So wird aus pm.max_children eine begr\u00fcndete Betriebsgrenze statt eines geratenen Werts.","tiktok":"Mehr PHP-FPM Worker sind nicht automatisch schneller. Entscheidend sind RAM-Budget, Belegungszeit und die Kapazit\u00e4t des Backends.","youtube":"PHP-FPM Kapazit\u00e4t planen: Worker-Speicher mit PSS einsch\u00e4tzen, Anfragebelegung berechnen und pm.max_children \u00fcberwachen.","threads":"Ein PHP-FPM Worker ist weder ein Besucher noch ein Request pro Sekunde. F\u00fcr die Planung z\u00e4hlen RAM-Budget und tats\u00e4chliche Belegungszeit getrennt.","x":"PHP-FPM planen: Wie viele Worker passen ins RAM, und wie viele braucht der Pool bei tats\u00e4chlicher Last? Die beiden Rechnungen liefern Anhaltspunkte \u2013 keine Leistungsgarantie."},"avatar_script":"Wie viele PHP-FPM Worker du einstellen solltest, h\u00e4ngt von zwei getrennten Rechnungen ab. Zuerst bestimmst du das verf\u00fcgbare RAM-Budget f\u00fcr den Pool. Daf\u00fcr ziehst du andere Dienste, weitere Pools und eine Reserve vom wirksamen Speicherlimit ab. Den Worker-Verbrauch sch\u00e4tzt du anhand mehrerer PSS-Beobachtungen unter unterschiedlichen Lastbedingungen. Danach betrachtest du den tats\u00e4chlichen PHP-Verkehr: Requests pro Sekunde multipliziert mit der mittleren Worker-Belegungszeit ergeben eine erste N\u00e4herung f\u00fcr die mittlere Auslastung. F\u00fcr Spitzen brauchst du zus\u00e4tzlichen Spielraum. Der rechnerische RAM-Wert ist keine Garantie: Auch CPU, Datenbank und externe Dienste k\u00f6nnen begrenzen. \u00dcberwache deshalb Warteschlange, Worker-Auslastung, Speicher und Antwortzeiten gemeinsam \u00fcber die Zeit.","version_note":"Recherchestand: 4. November 2026. Verf\u00fcgbarkeit von Status-Listener, Prozessdaten und Pool-Einstellungen f\u00fcr die eingesetzte PHP- und Linux-Version sowie die Hosting-Umgebung pr\u00fcfen.","sections":[{"id":"worker-und-anfragen","heading":"Was ein PHP-FPM Worker begrenzt","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"PHP-FPM verwaltet PHP-Prozesse in Pools. Ein ","ref":""},{"kind":"strong","text":"Worker","ref":""},{"kind":"text","text":" bearbeitet jeweils eine Anfrage; die Pool-Einstellung ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":" begrenzt die Zahl der gleichzeitig verf\u00fcgbaren Worker und damit die gleichzeitig bearbeiteten PHP-Anfragen dieses Pools. Bei mehreren Pools gilt die Grenze jeweils f\u00fcr den betreffenden Pool, nicht automatisch f\u00fcr den gesamten Server.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Diese Zahl ist weder die Zahl angemeldeter Besucher noch ein direkter Wert f\u00fcr Requests pro Sekunde. Ein Besucher kann mehrere Anfragen ausl\u00f6sen, w\u00e4hrend ein angemeldeter Nutzer zwischen zwei Aktionen keinen Worker belegt. Umgekehrt kann ein einzelner langsamer Request einen Worker l\u00e4nger binden als mehrere kurze Anfragen hintereinander.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Auch nicht jeder Seitenaufruf erreicht PHP-FPM. Liefert der Webserver eine statische Datei direkt aus oder beantwortet ein vorgeschalteter Cache eine Anfrage vollst\u00e4ndig, ist daf\u00fcr je nach Architektur kein PHP-Worker n\u00f6tig. Cache-Misses, eingeloggte Nutzer und Verwaltungsseiten k\u00f6nnen dagegen weiterhin PHP-Anfragen erzeugen und kurzfristig die Belegung erh\u00f6hen.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr die Kapazit\u00e4tsplanung sind deshalb zwei getrennte Fragen entscheidend: Wie viele Worker passen mit Reserve in das verf\u00fcgbare RAM? Und wie viele Worker braucht der tats\u00e4chlich beim Pool eintreffende Verkehr, damit Anfragen nicht \u00fcberm\u00e4\u00dfig lange warten? Ein hoher Wert f\u00fcr ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":" beantwortet keine dieser Fragen allein.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Selbst wenn ausreichend Speicher vorhanden ist, k\u00f6nnen CPU, Datenbank oder externe Dienste die praktische Kapazit\u00e4t begrenzen. Zus\u00e4tzliche Worker erm\u00f6glichen dann zwar mehr parallele PHP-Arbeit, k\u00f6nnen aber gleichzeitig den Druck auf einen bereits langsamen Dienst erh\u00f6hen. Der Pool-Wert ist daher eine Betriebsgrenze und keine Leistungszusage.","ref":""}]}]},{"id":"prozessmanager","heading":"Prozessmanager und Warteschlange verstehen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Der ","ref":""},{"kind":"strong","text":"Prozessmanager","ref":""},{"kind":"text","text":" legt fest, wann PHP-FPM Worker bereitstellt. Bei ","ref":""},{"kind":"code","text":"static","ref":""},{"kind":"text","text":" entspricht die vorgehaltene Prozesszahl dem Wert von ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":". Das macht die Zahl der Prozesse gut planbar, bindet aber auch bei geringer Auslastung Ressourcen. Die Obergrenze selbst muss weiterhin zum verf\u00fcgbaren Speicher passen.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Bei ","ref":""},{"kind":"code","text":"dynamic","ref":""},{"kind":"text","text":" passt FPM die Prozesszahl an: Startzahl sowie minimale und maximale Zahl freier Worker werden zus\u00e4tzlich eingestellt. Bei ","ref":""},{"kind":"code","text":"ondemand","ref":""},{"kind":"text","text":" entstehen Worker erst bei Bedarf und werden nach einer konfigurierten Leerlaufzeit beendet. Das kann bei selten genutzten Pools Ressourcen sparen; bei einer pl\u00f6tzlichen Lastspitze muss jedoch zun\u00e4chst neue Prozesskapazit\u00e4t entstehen.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"table","caption":"Prozessmanager im Vergleich","headers":["Modus","Wichtige Einstellungen","Einsatz und Abw\u00e4gung"],"rows":[["static","pm.max_children","Feste Worker-Zahl; gut planbar, aber Ressourcenbindung im Leerlauf."],["dynamic","pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers","Anpassung an wechselnden Bedarf; freie und startende Worker m\u00fcssen abgestimmt werden."],["ondemand","pm.max_children, pm.process_idle_timeout","Worker bei Bedarf; spart bei selten genutzten Pools Ressourcen, Prozessstarts sind bei Lastanstieg zu ber\u00fccksichtigen."]],"source_ids":["S1"]},{"type":"paragraph","runs":[{"kind":"text","text":"Sind alle Worker besch\u00e4ftigt, k\u00f6nnen weitere Anfragen in der ","ref":""},{"kind":"strong","text":"Listener-Warteschlange","ref":""},{"kind":"text","text":" auf einen freien Prozess warten. Der FPM-Status zeigt unter anderem die aktuelle und die maximale Warteschlange. Ein einzelner hoher H\u00f6chstwert beschreibt allerdings nicht, ob der Pool gerade \u00fcberlastet ist; daf\u00fcr braucht er einen zeitlichen Bezug.","ref":""},{"kind":"citation","text":"","ref":"S2"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Eine gr\u00f6\u00dfere Warteschlange schafft keine zus\u00e4tzlichen Worker und beschleunigt keine langsame Datenbank. Sie kann Anfragen vor\u00fcbergehend aufnehmen, verlagert die Wartezeit aber lediglich vor die PHP-Bearbeitung. F\u00fcr die Entscheidung \u00fcber den Prozessmanager sind daher sowohl der typische Lastverlauf als auch die Folgen kurzer Spitzen wichtig.","ref":""}]}]},{"id":"speichergrundlagen","heading":"Worker-Speicher richtig einordnen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Der Speicherbedarf eines Workers l\u00e4sst sich nicht zuverl\u00e4ssig allein aus einer PHP-Konfigurationsgrenze ableiten. F\u00fcr die Planung sind Prozessdaten unter passenden Lastbedingungen hilfreicher. Dabei macht es einen Unterschied, ob du den residenten Speicher eines einzelnen Prozesses ansiehst oder den Verbrauch einer ganzen Gruppe von PHP-FPM Workern einsch\u00e4tzen willst.","ref":""}]},{"type":"paragraph","runs":[{"kind":"strong","text":"RSS","ref":""},{"kind":"text","text":" beschreibt residenten Speicher eines Prozesses. Nutzen mehrere Worker dieselben Speicherseiten, k\u00f6nnen diese in ihrem jeweiligen RSS enthalten sein. Addierst du die RSS-Werte aller Worker, erscheinen gemeinsam genutzte Seiten dadurch unter Umst\u00e4nden mehrfach; die Summe ist deshalb keine saubere Aussage \u00fcber den gemeinsam belegten physischen Speicher.","ref":""},{"kind":"citation","text":"","ref":"S3"}]},{"type":"paragraph","runs":[{"kind":"strong","text":"PSS","ref":""},{"kind":"text","text":" verteilt gemeinsam genutzte Seiten anteilig auf die beteiligten Prozesse. Die Summe der PSS-Werte einer Prozessgruppe ist f\u00fcr deren Speicherplanung daher oft hilfreicher als die Summe der RSS-Werte. Sie bleibt dennoch eine Momentaufnahme: \u00c4ndert sich die Zahl der Prozesse, die Seiten teilen, \u00e4ndern sich auch die jeweiligen Anteile.","ref":""},{"kind":"citation","text":"","ref":"S3"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Betrachte mehrere Worker bei typischen und auch bei speicherintensiven Requests. Ein frisch gestarteter Prozess oder ein einzelner Durchschnitt kann den sp\u00e4teren Bedarf untersch\u00e4tzen. Die gesamte Pool-PSS bei verschiedenen Worker-Zahlen und Lastzust\u00e4nden hilft, einen konservativen N\u00e4herungswert abzuleiten; eine Hochrechnung auf mehr Worker bleibt wegen ver\u00e4nderlicher gemeinsamer und privater Anteile unsicher.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Das PHP-","ref":""},{"kind":"code","text":"memory_limit","ref":""},{"kind":"text","text":" ist keine zuverl\u00e4ssige Angabe f\u00fcr den gesamten Betriebssystem-Speicher eines FPM-Prozesses und ersetzt diese Beobachtung nicht. Gemeinsam genutzten Speicher, etwa durch OPcache, solltest du nicht pauschal ein zweites Mal vom Budget abziehen, wenn er bereits anteilig in der verwendeten Pool-PSS enthalten ist. Andere Dienste und eine Reserve m\u00fcssen trotzdem ber\u00fccksichtigt werden.","ref":""}]}]},{"id":"ram-budget","heading":"RAM-Budget und Worker-Zahl berechnen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Ausgangspunkt ist das tats\u00e4chlich verf\u00fcgbare RAM: auf einem Host der f\u00fcr die Dienste nutzbare Speicher, im Container das wirksame Speicherlimit. Ziehe davon den Bedarf des Betriebssystems, des Webservers, einer gegebenenfalls lokalen Datenbank und weiterer Dienste ab. Andere FPM-Pools und eine Reserve f\u00fcr schwankenden Verbrauch geh\u00f6ren ebenfalls in die Rechnung.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Der verbleibende Anteil ist das ","ref":""},{"kind":"strong","text":"Pool-Budget","ref":""},{"kind":"text","text":". F\u00fcr den Worker-Sch\u00e4tzwert beobachtest du die PSS-Summe der Pool-Worker bei verschiedenen Prozesszahlen und Lastzust\u00e4nden. Ber\u00fccksichtige typische Anfragen ebenso wie speicherintensive Endpunkte. Teile die jeweilige Summe durch die betrachtete Worker-Zahl und leite aus mehreren Beobachtungen einen vorsichtigen N\u00e4herungswert ab.","ref":""},{"kind":"citation","text":"","ref":"S3"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Die folgende Rechnung ist ein illustratives Rechenbeispiel, keine Messung. Die angenommenen Werte dienen nur dazu, den Rechenweg zu zeigen; sie sind keine Empfehlung f\u00fcr eine bestimmte Anwendung. Das Ergebnis wird auf eine ganze Worker-Zahl abgerundet.","ref":""}]},{"type":"table","caption":"Illustrative RAM-Planung f\u00fcr einen einzelnen Pool","headers":["Rechenschritt","Annahme","Einordnung"],"rows":[["Wirksames RAM-Limit","4.096 MiB","Host- oder Containergrenze im Beispiel"],["Andere Dienste, Pools und Reserve","2.048 MiB","Zusammen angenommener Abzug"],["Budget f\u00fcr den betrachteten Pool","2.048 MiB","4.096 minus 2.048 MiB"],["PSS-N\u00e4herungswert je Worker","80 MiB","Angenommener konservativer Planungswert"],["Rechnerische RAM-Grenze","25 Worker","2.048 geteilt durch 80, abgerundet"]],"source_ids":["S3","S6"]},{"type":"paragraph","runs":[{"kind":"text","text":"Die 25 Worker sind keine garantierte sichere Einstellung. PSS verteilt gemeinsam genutzte Seiten anteilig und ver\u00e4ndert sich mit der Zahl der Prozesse, die diese Seiten teilen. Auch ein anderer Request-Mix kann den privaten Speicherbedarf verschieben; die Hochrechnung sollte daher gegen den beobachteten Gesamtverbrauch und das vorhandene Limit gepr\u00fcft werden.","ref":""},{"kind":"citation","text":"","ref":"S3"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Ist gemeinsam genutzter Speicher wie OPcache bereits anteilig in der verwendeten PSS-Summe enthalten, ziehst du ihn nicht nochmals pauschal als vollst\u00e4ndigen Zusatzposten ab. Plane dennoch Reserve f\u00fcr Speicheranteile ein, die deine Betrachtung nicht erfasst. Gerade bei einem Containerlimit z\u00e4hlt letztlich der Verbrauch aller Prozesse innerhalb der Grenze, nicht nur die gesch\u00e4tzte Worker-Summe.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Ein frisch gestarteter Worker allein ist als Grundlage wenig aussagekr\u00e4ftig: Er hat m\u00f6glicherweise noch keinen anspruchsvollen Request bearbeitet. Vergleiche deshalb mehrere Zeitpunkte und halte fest, welche Endpunkte und wie viele Worker jeweils beteiligt waren. So l\u00e4sst sich erkennen, ob der gew\u00e4hlte N\u00e4herungswert auch bei ung\u00fcnstigeren, aber realistischen Betriebszust\u00e4nden tr\u00e4gt.","ref":""}]}]},{"id":"verkehr-und-belegung","heading":"Ben\u00f6tigte Worker aus Anfragen absch\u00e4tzen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Die RAM-Rechnung beschreibt, wie viele Worker voraussichtlich Platz finden. F\u00fcr den Bedarf z\u00e4hlt dagegen, wie viele PHP-Anfragen tats\u00e4chlich im betrachteten Pool eintreffen und wie lange sie einen Worker binden. Als erste N\u00e4herung gilt: mittlere gleichzeitig belegte Worker gleich PHP-Requests pro Sekunde multipliziert mit der mittleren Worker-Belegungszeit in Sekunden.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Illustratives Rechenbeispiel, keine Messung: Bei angenommenen 20 PHP-Requests pro Sekunde und einer mittleren Belegungszeit von 0,25 Sekunden sind im Mittel f\u00fcnf Worker besch\u00e4ftigt. Das ist ein Durchschnitt \u00fcber den betrachteten Zeitraum. Er sagt weder, dass immer genau f\u00fcnf Prozesse arbeiten, noch, dass f\u00fcnf als Pool-Limit f\u00fcr kurze Spitzen ausreichen.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr die Anfragezahl verwendest du nicht ungepr\u00fcft s\u00e4mtliche Seitenaufrufe. Wenn ein Cache viele Antworten ausliefert, ohne PHP aufzurufen, belasten diese Treffer den Pool nicht. Umgekehrt k\u00f6nnen Cache-Misses, eingeloggte Besucher und Verwaltungszugriffe zeitweise mehr PHP-Arbeit ausl\u00f6sen, als ein \u00fcber den ganzen Tag gebildeter Durchschnitt vermuten l\u00e4sst.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Die ","ref":""},{"kind":"strong","text":"Worker-Belegungszeit","ref":""},{"kind":"text","text":" umfasst auch Wartezeiten innerhalb der Bearbeitung, etwa auf eine Datenbank oder einen externen Dienst. Sie ist nicht automatisch mit der im Browser sichtbaren Antwortzeit gleichzusetzen. Nach ","ref":""},{"kind":"code","text":"fastcgi_finish_request()","ref":""},{"kind":"text","text":" kann PHP die Antwort bereits an den Client abgeschlossen haben und dennoch weitere Arbeit im Worker ausf\u00fchren.","ref":""},{"kind":"citation","text":"","ref":"S4"}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr akzeptable Wartezeiten brauchst du Spielraum \u00fcber der mittleren Belegung. Wie gro\u00df er sein muss, h\u00e4ngt unter anderem von Lastschwankungen, langsamen Endpunkten und dem gew\u00fcnschten Antwortzeitziel ab. Eine Multiplikation von Spitzen-Requests pro Sekunde mit einer hohen Latenz-Perzentile kann ein vorsichtiger Szenariocheck sein, ist aber keine pr\u00e4zise Warteschlangenprognose.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Betrachte deshalb mehrere Zeitr\u00e4ume getrennt: Eine kurze Aktionsspitze und ruhiger Nachtverkehr k\u00f6nnen denselben Tagesmittelwert ergeben wie ein gleichm\u00e4\u00dfigerer Betrieb, stellen aber unterschiedliche Anforderungen. Steigt die Belegungszeit durch ein langsames Backend, w\u00e4chst bei gleicher Ankunftsrate auch die mittlere Zahl gebundener Worker. Der Bedarf ist damit nicht allein eine Eigenschaft des Besucheraufkommens.","ref":""}]}]},{"id":"pool-konfiguration","heading":"Pool-Einstellungen aus der Planung ableiten","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Stelle nun die RAM-basierte Obergrenze dem gesch\u00e4tzten Bedarf einschlie\u00dflich Spielraum gegen\u00fcber. Passt der Bedarf darunter, w\u00e4hle einen vorsichtigen Startwert f\u00fcr ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":", der das Budget nicht aussch\u00f6pfen muss. Im illustrativen Beispiel w\u00e4ren 25 die rechnerische RAM-Grenze, nicht automatisch die passende Einstellung; CPU und Backend k\u00f6nnen schon vorher begrenzen.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Liegt der gesch\u00e4tzte Bedarf \u00fcber der RAM-Grenze, l\u00f6st ein h\u00f6heres Limit den Widerspruch nicht: Es kann den Host oder Container unter Speicherdruck setzen. Umgekehrt kann ein sehr niedriges Limit Anfragen warten lassen. Verbessere in diesem Fall etwa die Ausf\u00fchrungszeit oder Cache-Nutzung und pr\u00fcfe, ob zus\u00e4tzliche Ressourcen oder eine Begrenzung der Eingangslast n\u00f6tig sind.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Bei ","ref":""},{"kind":"strong","text":"dynamic","ref":""},{"kind":"text","text":" legst du neben der Obergrenze die Startzahl sowie Mindest- und H\u00f6chstzahl freier Worker fest. Die Start- und Reservewerte sollten zur erwarteten Last passen und innerhalb der Obergrenze bleiben. Zu wenig vorgehaltene Kapazit\u00e4t kann bei pl\u00f6tzlicher Last zus\u00e4tzlichen Startbedarf bedeuten; dauerhaft viele freie Prozesse verbrauchen dagegen Ressourcen.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Bei ","ref":""},{"kind":"strong","text":"ondemand","ref":""},{"kind":"text","text":" entstehen Worker erst bei Bedarf; die Leerlaufzeit bis zu ihrer Beendigung wird gesondert eingestellt. Das kann f\u00fcr selten genutzte Pools sinnvoll sein, erfordert aber bei schnellen Lastanstiegen besondere Aufmerksamkeit. Auch hier begrenzt ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":" die Zahl der gleichzeitig verf\u00fcgbaren Worker des Pools.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Mehrere Websites auf demselben Host erhalten nicht unabh\u00e4ngig voneinander jeweils das gesamte freie RAM. Budgetiere ihre m\u00f6glichen Pool-Maxima zusammen mit den \u00fcbrigen Diensten und der Reserve. Eine gegebenenfalls konfigurierte globale FPM-Prozessgrenze kann zus\u00e4tzlich greifen, ersetzt aber weder die einzelnen Pool-Budgets noch die Pr\u00fcfung von CPU und Datenbankkapazit\u00e4t.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Pr\u00fcfe nach \u00c4nderungen die tats\u00e4chliche Auslastung und Wartezeiten \u00fcber geeignete Zeitr\u00e4ume, statt den Startwert als endg\u00fcltig anzusehen. Bei Managed Hosting sind Prozessdaten oder Pool-Einstellungen m\u00f6glicherweise nicht direkt zug\u00e4nglich; nutze dann die Metriken und freigegebenen Optionen des Anbieters. Welche Einstellungen verf\u00fcgbar sind, h\u00e4ngt au\u00dferdem von PHP-Version und Betriebsumgebung ab.","ref":""}]}]},{"id":"status-und-messung","heading":"FPM-Status und Speicher beobachten","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Die FPM-Statusseite zeigt, ob die geplanten Worker unter realer Last ausreichen. ","ref":""},{"kind":"strong","text":"Sch\u00fctze den Statusendpunkt","ref":""},{"kind":"text","text":" vor \u00f6ffentlichem Zugriff: Er kann sensible Angaben \u00fcber Anfragen und Ressourcen preisgeben. Ein separat konfigurierter Status-Listener kann auch bei einem ausgelasteten Hauptpool erreichbar bleiben; pr\u00fcfe seine Verf\u00fcgbarkeit und Einrichtung f\u00fcr deine PHP-Version und Webserver-Konfiguration.","ref":""},{"kind":"citation","text":"","ref":"S1"},{"kind":"citation","text":"","ref":"S2"}]},{"type":"table","caption":"FPM-Statuswerte im zeitlichen Zusammenhang auswerten","headers":["Statuswert","Einordnung","Anschlussfrage"],"rows":[["active processes \/ idle processes","Aktuell besch\u00e4ftigte und freie Worker","Bleiben bei Lastspitzen freie Worker verf\u00fcgbar?"],["listen queue \/ max listen queue","Aktuelle und bisher maximale Warteschlangenl\u00e4nge","W\u00e4chst die Warteschlange w\u00e4hrend langsamer Antworten?"],["max children reached","Z\u00e4hler f\u00fcr das Erreichen der Worker-Grenze bei dynamic oder ondemand","Steigt der Z\u00e4hler im betrachteten Zeitraum?"],["slow requests","Z\u00e4hler langsamer Anfragen","F\u00e4llt sein Anstieg mit l\u00e4ngeren Antwortzeiten zusammen?"]],"source_ids":["S2"]},{"type":"paragraph","runs":[{"kind":"text","text":"Betrachte die Werte als ","ref":""},{"kind":"strong","text":"Zeitreihen","ref":""},{"kind":"text","text":" zusammen mit Anfragevolumen und Antwortzeiten. Ein alter H\u00f6chstwert der Warteschlange beweist keine aktuelle \u00dcberlastung; ebenso ist bei Z\u00e4hlern ihr Anstieg seit der letzten Beobachtung aussagekr\u00e4ftiger als der blo\u00dfe Gesamtwert. Ber\u00fccksichtige dabei den Poolstart beziehungsweise Neustarts, durch die sich der Bezugszeitraum \u00e4ndert.","ref":""},{"kind":"citation","text":"","ref":"S2"}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr einen bekannten FPM-Worker kannst du auf einem Linux-System mit verf\u00fcgbarer proc-Schnittstelle aggregierte Speicherwerte lesend abrufen. Ersetze ","ref":""},{"kind":"code","text":"PID","ref":""},{"kind":"text","text":" durch die tats\u00e4chliche Prozess-ID; du ben\u00f6tigst die entsprechenden Zugriffsrechte. Wiederhole die Beobachtung f\u00fcr mehrere Worker und Lastzust\u00e4nde, statt aus einem einzelnen Prozess eine dauerhafte Poolgr\u00f6\u00dfe abzuleiten.","ref":""},{"kind":"citation","text":"","ref":"S6"}]},{"type":"code","language":"bash","code":"cat \/proc\/PID\/smaps_rollup","source_ids":["S6"]}]},{"id":"engpaesse-diagnostizieren","heading":"Langsame Requests und Warteschlangen untersuchen","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Ein Shop kann viele aktive Worker anzeigen, obwohl nicht die PHP-Ausf\u00fchrung selbst der urspr\u00fcngliche Engpass ist. Warten Anfragen auf langsame Datenbankabfragen, bleiben die Worker w\u00e4hrenddessen gebunden. Treffen weitere Anfragen ein, kann die Listener-Warteschlange wachsen und die Antwortzeit steigen, selbst wenn die CPU noch Reserven zeigt.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Eine h\u00f6here Worker-Grenze l\u00e4sst in dieser Situation m\u00f6glicherweise mehr Anfragen gleichzeitig zur Datenbank gelangen. Das kann den ","ref":""},{"kind":"strong","text":"Backend-Druck","ref":""},{"kind":"text","text":" erh\u00f6hen und Wartezeiten weiter verl\u00e4ngern. Vergleiche deshalb den zeitlichen Verlauf von FPM-Auslastung und Warteschlange mit Datenbanklast, langsamen Abfragen und externen Dienstaufrufen, bevor du die Grenze erh\u00f6hst.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Das FPM-Slowlog hilft, lange PHP-Aufrufe einzugrenzen: F\u00fcr Anfragen \u00fcber einer konfigurierten Schwelle kann FPM einen Backtrace protokollieren. Dieser zeigt einen Ausf\u00fchrungspunkt und ist kein vollst\u00e4ndiges Profil der gesamten Anfrage. Wiederkehrende Stellen lassen sich mit Anfragedauer und Backend-Metriken abgleichen; die ","ref":""},{"kind":"internal_link","text":"Anleitung zum Auswerten des PHP-FPM Slowlogs","ref":"I3"},{"kind":"text","text":" erl\u00e4utert die weitere Analyse.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"Auch ein Timeout ist von der eigentlichen Kapazit\u00e4t zu trennen. Bei nginx bezeichnet ","ref":""},{"kind":"code","text":"fastcgi_read_timeout","ref":""},{"kind":"text","text":" den zul\u00e4ssigen Abstand zwischen aufeinanderfolgenden Lesevorg\u00e4ngen vom FastCGI-Server, nicht pauschal die gesamte Requestdauer. Ein h\u00f6herer Wert kann l\u00e4ngeres Warten zulassen, schafft aber weder zus\u00e4tzliche Worker noch beschleunigt er die Datenbank.","ref":""},{"kind":"citation","text":"","ref":"S5"}]}]},{"id":"kapazitaet-entscheiden","heading":"Kapazit\u00e4tsgrenzen und n\u00e4chste Schritte","blocks":[{"type":"paragraph","runs":[{"kind":"text","text":"Reicht das RAM-Budget nicht f\u00fcr den gesch\u00e4tzten Bedarf, l\u00f6st eine h\u00f6here Einstellung f\u00fcr ","ref":""},{"kind":"code","text":"pm.max_children","ref":""},{"kind":"text","text":" den Zielkonflikt nicht: Zus\u00e4tzliche Prozesse ben\u00f6tigen ebenfalls Speicher. Pr\u00fcfe stattdessen, ob sich die Zahl der PHP-Anfragen oder die Dauer ihrer Worker-Belegung senken l\u00e4sst. Welche Ma\u00dfnahme sinnvoll ist, h\u00e4ngt davon ab, wo die beobachtete Last entsteht.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Ein besser genutzter Cache kann wiederholte Aufrufe abfangen, w\u00e4hrend schnellere PHP-Ausf\u00fchrung und Datenbankzugriffe Worker fr\u00fcher freigeben. Geeignete Hintergrundarbeit l\u00e4sst sich aus dem unmittelbaren Anfragepfad auslagern; auch diese Arbeit ben\u00f6tigt allerdings eigene Ressourcen. Eine Lastbegrenzung sch\u00fctzt bei Spitzen das Backend, kann aber dazu f\u00fchren, dass Anfragen warten oder abgewiesen werden.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Zus\u00e4tzliches RAM kann eine h\u00f6here Worker-Zahl erm\u00f6glichen, wenn Speicher tats\u00e4chlich die ma\u00dfgebliche Grenze ist. Sind CPU, Datenbank oder ein externer Dienst bereits ausgelastet, muss deren Kapazit\u00e4t ebenfalls ber\u00fccksichtigt werden. Mehr Speicher allein garantiert deshalb weder k\u00fcrzere Antwortzeiten noch einen h\u00f6heren Durchsatz.","ref":""}]},{"type":"paragraph","runs":[{"kind":"text","text":"Steigt der Speicherbedarf einzelner Worker \u00fcber ihre Lebensdauer, kann ","ref":""},{"kind":"code","text":"pm.max_requests","ref":""},{"kind":"text","text":" deren regelm\u00e4\u00dfiges Ersetzen veranlassen. Das kann beim Umgang mit Speicherlecks in Drittbibliotheken helfen, behebt aber nicht deren Ursache. Beobachte nach einer \u00c4nderung weiterhin Pool-Speicher und Anfrageverhalten, statt den Neustartmechanismus als Ersatz f\u00fcr die Fehlersuche zu behandeln.","ref":""},{"kind":"citation","text":"","ref":"S1"}]},{"type":"paragraph","runs":[{"kind":"text","text":"F\u00fcr eine breitere Architekturentscheidung bietet der ","ref":""},{"kind":"internal_link","text":"Vergleich von NGINX Unit und PHP-FPM","ref":"I1"},{"kind":"text","text":" Kontext; NGINX Unit ist archiviert und wird nicht mehr gepflegt. Unabh\u00e4ngig von der gew\u00e4hlten Architektur solltest du \u00c4nderungen anhand von ","ref":""},{"kind":"strong","text":"Zeitreihen","ref":""},{"kind":"text","text":" pr\u00fcfen: Vergleiche bei \u00e4hnlichem Anfragevolumen Warteschlange, Worker-Auslastung, Speicher und Antwortzeiten. So l\u00e4sst sich erkennen, ob eine Anpassung den Engpass tats\u00e4chlich entsch\u00e4rft oder lediglich verlagert hat.","ref":""},{"kind":"citation","text":"","ref":"S2"}]}]}]},"_wh_make_word_report":{"words":2340,"min":2000,"max":3000,"target":2500,"ok":true,"missing":0,"excess":0,"lead_words":59,"section_words":{"worker-und-anfragen":233,"prozessmanager":238,"speichergrundlagen":245,"ram-budget":338,"verkehr-und-belegung":290,"pool-konfiguration":291,"status-und-messung":212,"engpaesse-diagnostizieren":187,"kapazitaet-entscheiden":247}},"_wh_make_review":{"verdict":"pass","issues":[],"checked_source_ids":["S1","S2","S3","S4","S5","S6"],"summary":"Der Artikel ist fachlich plausibel und freigabef\u00e4hig. Prozessmanager, Pool-Grenzen, Status-Listener und Worker-Recycling sind durch S1 gest\u00fctzt. ([php.net](https:\/\/www.php.net\/install.fpm.configuration)) Die Statusauswertung ber\u00fccksichtigt aktuelle Werte, historische Maxima und Neustarts korrekt; S2 wurde wegen Abrufproblemen der Kurzadresse \u00fcber die entsprechende offizielle Handbuchseite gepr\u00fcft. ([php.net](https:\/\/www.php.net\/manual\/en\/fpm.status.php?utm_source=openai)) RSS, PSS und der lesende smaps_rollup-Aufruf stimmen mit der Kernel-Dokumentation \u00fcberein. ([docs.kernel.org](https:\/\/docs.kernel.org\/7.0\/filesystems\/proc.html)) Die weitere Worker-Belegung nach fastcgi_finish_request() und die nginx-Timeout-Semantik sind korrekt dargestellt; dabei entsprechen S4 und S5 den tats\u00e4chlichen Registry-URLs. ([php.net](https:\/\/www.php.net\/manual\/de\/install.fpm.php)) Beide Rechenbeispiele sind rechnerisch richtig und ausdr\u00fccklich keine Messungen. Bildplan und Bildunterschriften sind als KI-generierte Symbolik eingeordnet und enthalten keine irref\u00fchrende technische Topologie. Ein Chart ist nicht vorhanden. Der Archivierungsstatus von NGINX Unit wurde zus\u00e4tzlich anhand offizieller Projektinformationen best\u00e4tigt. ([unit.nginx.org](https:\/\/unit.nginx.org\/?utm_source=openai))"},"_wh_make_review_doc_hash":"8610d9d0213c9ae5260bfdefd05ca6c189e5279aa668ea3306ad183c3c5c8732","_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"inline_featured_image":null,"_yoast_wpseo_linkdex":null,"_eael_widget_elements":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_trp_translated_slug_en_us":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_wh_make_writer_raw":null,"_wh_make_design_backup_204":null,"_wp_desired_post_slug":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"91","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"PHP-FPM Kapazit\u00e4tsplanung","rank_math_og_content_image":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"22160","_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":"PHP-FPM Worker anhand von RAM-Budget und Request-Belegung planen: So l\u00e4sst sich pm.max_children sinnvoll eingrenzen und \u00fcberwachen.","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/posts\/22158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/comments?post=22158"}],"version-history":[{"count":2,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/posts\/22158\/revisions"}],"predecessor-version":[{"id":22163,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/posts\/22158\/revisions\/22163"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/media\/22160"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/media?parent=22158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/categories?post=22158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/en\/wp-json\/wp\/v2\/tags?post=22158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}