{"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-capaciteitsplanning-worker-ram-verzoeken","status":"publish","type":"post","link":"https:\/\/webhosting.de\/nl\/php-fpm-kapazitaetsplanung-worker-ram-requests\/","title":{"rendered":"Capaciteitsplanning voor PHP-FPM: het aantal workers, het RAM-geheugen en het aantal gelijktijdige verzoeken berekenen"},"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\">Voor een zinvolle capaciteitsplanning van PHP-FPM bereken je eerst hoeveel workers er in het beschikbare RAM-budget passen. Los daarvan schat je hoeveel workers er nodig zijn voor het verkeer dat daadwerkelijk bij de pool binnenkomt. <strong style=\"font-weight:700;color:inherit\">pm.max_kinderen<\/strong> beperkt het aantal workers dat tegelijkertijd per pool beschikbaar is, maar is noch een bezoekersaantal, noch een directe doorvoercapaciteit. Ook de CPU, de database en piekbelastingen bepalen welke instelling in de praktijk haalbaar is. <\/p>\n<nav class=\"wh-toc\" aria-label=\"Inhoud van dit artikel\" 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\">Direct naar de paragraaf<\/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\">Wat een PHP-FPM-worker beperkt<\/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\">Procesbeheerder en wachtrij begrijpen<\/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\">Worker-geheugen correct indelen<\/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\">RAM-budget en aantal workers berekenen<\/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\">Het aantal benodigde workers op basis van aanvragen inschatten<\/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\">Poolinstellingen afleiden uit de planning<\/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\">FPM-status en geheugen in de gaten houden<\/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\">Trage verzoeken en wachtrijen onderzoeken<\/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\">Capaciteitsbeperkingen en volgende stappen<\/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\">Wat een PHP-FPM-worker beperkt<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">PHP-FPM beheert PHP-processen in pools. Een <strong style=\"font-weight:700;color:inherit\">Werknemer<\/strong> verwerkt telkens \u00e9\u00e9n aanvraag; de instelling van de pool <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> beperkt het aantal tegelijkertijd beschikbare workers en daarmee het aantal PHP-verzoeken dat tegelijkertijd door deze pool wordt verwerkt. Bij meerdere pools geldt de limiet voor de betreffende pool, en niet automatisch voor de gehele server. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Dit getal is noch het aantal aangemelde bezoekers, noch een directe maatstaf voor het aantal verzoeken per seconde. Een bezoeker kan meerdere verzoeken genereren, terwijl een aangemelde gebruiker tussen twee acties in geen worker in beslag neemt. Omgekeerd kan \u00e9\u00e9n enkel traag verzoek een worker langer bezighouden dan meerdere korte verzoeken achter elkaar.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Ook komt niet elke pagina-oproep bij PHP-FPM terecht. Als de webserver een statisch bestand rechtstreeks levert of als een voorgeschakelde cache een verzoek volledig beantwoordt, is daarvoor \u2013 afhankelijk van de architectuur \u2013 geen PHP-worker nodig. Cache-misses, ingelogde gebruikers en beheerpagina\u2019s kunnen daarentegen wel PHP-verzoeken genereren en de belasting tijdelijk verhogen.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Voor de capaciteitsplanning zijn daarom twee afzonderlijke vragen van cruciaal belang: hoeveel workers passen er, inclusief reserve, in het beschikbare RAM? En hoeveel workers zijn er nodig voor het verkeer dat daadwerkelijk bij de pool binnenkomt, zodat verzoeken niet buitensporig lang hoeven te wachten? Een hoge waarde voor <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> beantwoordt geen van deze vragen afzonderlijk.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Zelfs als er voldoende geheugen beschikbaar is, kunnen de CPU, de database of externe diensten de praktische capaciteit beperken. Extra workers maken dan weliswaar meer parallelle PHP-verwerking mogelijk, maar kunnen tegelijkertijd de druk op een toch al trage dienst vergroten. De poolwaarde is daarom een operationele limiet en geen prestatiegarantie.<\/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\">Procesbeheerder en wachtrij begrijpen<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">De <strong style=\"font-weight:700;color:inherit\">Procesmanager<\/strong> bepaalt wanneer PHP-FPM workers beschikbaar stelt. Bij <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> komt het aangehouden procesgetal overeen met de waarde van <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>. Hierdoor is het aantal processen goed te plannen, maar worden er ook bij een lage bezettingsgraad middelen vastgehouden. De bovengrens zelf moet wel in overeenstemming blijven met de beschikbare opslagruimte. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Op <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> past FPM het aantal processen aan: het startaantal en het minimale en maximale aantal vrije workers worden bovendien ingesteld. Bij <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 worden pas aangemaakt wanneer dat nodig is en worden na een geconfigureerde inactiviteitstijd be\u00ebindigd. Dit kan bij zelden gebruikte pools middelen besparen; bij een plotselinge piek in de belasting moet er echter eerst nieuwe procescapaciteit worden gecre\u00eberd. <\/p>\n<div class=\"wh-table-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Vergelijking van procesmanagers\" 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\">Vergelijking van procesmanagers<\/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\">Modus<\/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\">Belangrijke instellingen<\/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\">Toepassing en afweging<\/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\">statisch<\/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_kinderen<\/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\">Vast aantal werknemers; goed te plannen, maar middelen worden ongebruikt vastgehouden.<\/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\">dynamisch<\/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\">Aanpassing aan veranderende behoeften; beschikbare en beginnende werknemers moeten op elkaar worden afgestemd.<\/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 indien nodig; bespaart resources bij zelden gebruikte pools; bij een toename van de belasting moet rekening worden gehouden met het opstarten van processen.<\/td><\/tr><\/tbody><\/table><\/div><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Als alle workers bezig zijn, kunnen verdere verzoeken in de <strong style=\"font-weight:700;color:inherit\">Wachtrij voor luisteraars<\/strong> wachten op een vrij proces. De FPM-status geeft onder andere de huidige en de maximale wachtrij weer. Een enkele hoge maximumwaarde geeft echter niet aan of de pool op dat moment overbelast is; daarvoor is een tijdsreferentie nodig. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Een grotere wachtrij zorgt niet voor extra workers en versnelt een trage database niet. De wachtrij kan verzoeken tijdelijk opvangen, maar verschuift de wachttijd alleen maar naar v\u00f3\u00f3r de PHP-verwerking. Voor de keuze van de procesmanager zijn daarom zowel het typische belastingsverloop als de gevolgen van korte pieken van belang.<\/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\">Worker-geheugen correct indelen<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Het geheugenverbruik van een worker kan niet op betrouwbare wijze worden afgeleid uit alleen een PHP-configuratielimiet. Voor de planning zijn procesgegevens onder passende belastingomstandigheden nuttiger. Daarbij maakt het verschil of je kijkt naar het resident geheugen van een enkel proces of dat je het verbruik van een hele groep PHP-FPM-workers wilt inschatten.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><strong style=\"font-weight:700;color:inherit\">RSS<\/strong> beschrijft het resident geheugen van een proces. Als meerdere workers dezelfde geheugenpagina\u2019s gebruiken, kunnen deze in hun respectievelijke RSS voorkomen. Als je de RSS-waarden van alle workers bij elkaar optelt, kunnen gedeelde pagina\u2019s daardoor in sommige gevallen meerdere keren voorkomen; de som geeft daarom geen nauwkeurig beeld van het gezamenlijk bezette fysieke geheugen. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\"><strong style=\"font-weight:700;color:inherit\">PSS<\/strong> verdeelt gedeelde pagina\u2019s evenredig over de betrokken processen. De som van de PSS-waarden van een procesgroep is daarom vaak nuttiger voor de geheugenplanning dan de som van de RSS-waarden. Het blijft echter een momentopname: als het aantal processen dat pagina\u2019s deelt verandert, veranderen ook de respectieve aandelen. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Bekijk meerdere workers bij zowel typische als geheugenintensieve verzoeken. Een pas gestart proces of een enkel gemiddelde kan de latere behoefte onderschatten. De totale pool-PSS bij verschillende aantallen workers en belastingstoestanden helpt bij het afleiden van een conservatieve schatting; een extrapolatie naar meer workers blijft onzeker vanwege variabele gemeenschappelijke en priv\u00e9-aandelen.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Het 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 geen betrouwbare indicatie voor het totale besturingssysteemgeheugen van een FPM-proces en vervangt deze waarneming niet. Gedeeld geheugen, bijvoorbeeld via OPcache, moet je niet zomaar een tweede keer van het budget aftrekken als het al proportioneel is opgenomen in de gebruikte pool-PSS. Er moet echter wel rekening worden gehouden met andere diensten en een reserve.<\/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\">RAM-budget en aantal workers berekenen<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Het uitgangspunt is het daadwerkelijk beschikbare RAM: op een host het geheugen dat bruikbaar is voor de diensten, in de container de effectieve geheugenlimiet. Trek daar de behoefte van het besturingssysteem, de webserver, een eventuele lokale database en andere diensten van af. Ook andere FPM-pools en een reserve voor schommelingen in het geheugengebruik moeten in de berekening worden meegenomen.<\/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=\"Door AI gegenereerde illustratie van een verwijderde RAM-module op een antistatische werkplaatsmat.\" 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\">Door AI gegenereerde illustratie: het beschikbare RAM-geheugen bepaalt de limiet van het budget voor PHP-FPM-pools.<\/figcaption><\/figure><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Het resterende deel is het <strong style=\"font-weight:700;color:inherit\">Zwembadbudget<\/strong>. Voor de schatting van het aantal workers bekijk je de PSS-som van de pool-workers bij verschillende aantallen processen en belastingstoestanden. Houd daarbij rekening met zowel typische verzoeken als met eindpunten die veel geheugen verbruiken. Deel de betreffende som door het aantal workers in kwestie en leid uit meerdere waarnemingen een voorzichtige schatting af. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">De volgende berekening is een illustratief rekenvoorbeeld, geen meting. De aangenomen waarden dienen uitsluitend om de rekenwijze te illustreren; ze vormen geen aanbeveling voor een specifieke toepassing. Het resultaat wordt afgerond op een geheel aantal workers.<\/p>\n<div class=\"wh-table-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Illustratieve RAM-planning voor \u00e9\u00e9n enkele 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\">Illustratieve RAM-planning voor \u00e9\u00e9n enkele 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\">rekenstap<\/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\">Acceptatie<\/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\">Classificatie<\/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\">Effectieve RAM-limiet<\/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- of containergrens in het voorbeeld<\/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\">Overige diensten, pools en reserve<\/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\">Gezamenlijk overeengekomen aftrek<\/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\">Begroting voor het betreffende zwembad<\/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 min 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-schattingswaarde per werknemer<\/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\">Aangenomen conservatieve planningswaarde<\/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\">Rekenkundige RAM-limiet<\/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 werknemers<\/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 gedeeld door 80, afgerond<\/td><\/tr><\/tbody><\/table><\/div><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">De 25 workers vormen geen gegarandeerde, vaste toewijzing. PSS verdeelt gedeelde pagina\u2019s proportioneel en deze verdeling verandert naargelang het aantal processen dat deze pagina\u2019s deelt. Ook een andere mix van verzoeken kan de behoefte aan priv\u00e9geheugen be\u00efnvloeden; de schatting moet daarom worden getoetst aan het waargenomen totale verbruik en de bestaande limiet. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Als gedeeld geheugen, zoals OPcache, al proportioneel is opgenomen in het gebruikte PSS-totaal, trek je dit niet nogmaals forfaitair af als een volledige extra post. Houd echter wel rekening met een reserve voor geheugenaandelen die niet in je berekening zijn meegenomen. Juist bij een containerlimiet telt uiteindelijk het verbruik van alle processen binnen die limiet, niet alleen het geschatte aantal workers.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Een pas gestarte worker op zich zegt nog niet veel: deze heeft mogelijk nog geen veeleisend verzoek verwerkt. Vergelijk daarom meerdere tijdstippen en noteer welke eindpunten en hoeveel workers er telkens bij betrokken waren. Zo kun je zien of de gekozen benaderende waarde ook standhoudt bij minder gunstige, maar realistische bedrijfsomstandigheden.<\/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\">Het aantal benodigde workers op basis van aanvragen inschatten<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">De RAM-berekening geeft aan hoeveel workers er naar verwachting in de pool kunnen worden ondergebracht. Voor de werkelijke behoefte telt daarentegen hoeveel PHP-verzoeken daadwerkelijk in de betreffende pool binnenkomen en hoe lang ze een worker bezighouden. Als eerste benadering geldt: het gemiddelde aantal gelijktijdig bezette workers is gelijk aan het aantal PHP-verzoeken per seconde, vermenigvuldigd met de gemiddelde bezettingstijd van een worker in seconden.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Illustratief rekenvoorbeeld, geen meting: uitgaande van 20 PHP-verzoeken per seconde en een gemiddelde verwerkingstijd van 0,25 seconde zijn er gemiddeld vijf workers bezig. Dit is een gemiddelde over de beschouwde periode. Dit betekent niet dat er altijd precies vijf processen actief zijn, noch dat vijf voldoende is als pool-limiet voor korte pieken.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Voor het aantal verzoeken mag je niet zomaar alle paginaweergaven meerekenen. Als een cache veel antwoorden levert zonder PHP aan te roepen, belasten deze treffers de pool niet. Omgekeerd kunnen cache-misses, ingelogde bezoekers en beheerderstoegang tijdelijk meer PHP-werk veroorzaken dan een gemiddelde over de hele dag doet vermoeden.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">De <strong style=\"font-weight:700;color:inherit\">Werknemersbezettingsduur<\/strong> omvat ook wachttijden tijdens de verwerking, bijvoorbeeld op een database of een externe dienst. Deze is niet automatisch gelijk te stellen aan de responstijd die in de browser wordt weergegeven. Volgens <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> kan PHP het antwoord al naar de client hebben verzonden en toch nog verdere taken in de worker uitvoeren. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Voor acceptabele wachttijden heb je een marge boven de gemiddelde bezettingsgraad nodig. Hoe groot die marge moet zijn, hangt onder andere af van belastingsschommelingen, trage eindpunten en de gewenste responstijddoelstelling. Het vermenigvuldigen van het aantal piekverzoeken per seconde met een hoog latentiepercentiel kan een voorzichtige scenario-check zijn, maar is geen nauwkeurige wachtrijprognose.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Bekijk daarom verschillende tijdsperioden afzonderlijk: een korte piek in de drukte en rustig nachtverkeer kunnen hetzelfde daggemiddelde opleveren als een gelijkmatiger verloop, maar stellen verschillende eisen. Als de bezettingsduur toeneemt door een trage backend, stijgt bij een gelijkblijvend aantal aankomsten ook het gemiddelde aantal gebonden workers. De behoefte is dus niet alleen afhankelijk van het bezoekersaantal.<\/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\">Poolinstellingen afleiden uit de planning<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Vergelijk nu de op RAM gebaseerde bovengrens met de geschatte behoefte, inclusief een marge. Als de behoefte daaronder ligt, kies dan een voorzichtige startwaarde voor <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>, die het budget niet volledig hoeft te benutten. In het illustratieve voorbeeld zou 25 de theoretische RAM-limiet zijn, maar niet automatisch de juiste instelling; de CPU en de backend kunnen al eerder een limiet opleggen.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Als de geschatte behoefte boven de RAM-limiet ligt, lost een hogere limiet het probleem niet op: dit kan de host of container onder druk zetten wat betreft het geheugengebruik. Omgekeerd kan een zeer lage limiet ervoor zorgen dat verzoeken in de wachtrij terechtkomen. Verbeter in dat geval bijvoorbeeld de uitvoeringstijd of het cachegebruik en controleer of extra resources of een beperking van de inkomende belasting nodig zijn.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Op <strong style=\"font-weight:700;color:inherit\">dynamisch<\/strong> Stel je naast de bovengrens ook het startaantal en het minimum- en maximumaantal vrije workers in. De start- en reservewaarden moeten aansluiten bij de verwachte belasting en binnen de bovengrens blijven. Te weinig gereserveerde capaciteit kan bij een plotselinge piek extra startbehoefte betekenen; daarentegen verbruiken permanent veel vrije processen resources. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Op <strong style=\"font-weight:700;color:inherit\">ondemand<\/strong> Workers worden pas aangemaakt wanneer dat nodig is; de inactieve tijd totdat ze worden be\u00ebindigd, wordt apart ingesteld. Dit kan zinvol zijn voor pools die zelden worden gebruikt, maar vereist bijzondere aandacht bij snelle pieken in de belasting. Ook hier geldt dat <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> het aantal workers uit de pool dat tegelijkertijd beschikbaar is. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Meerdere websites op dezelfde host krijgen niet elk afzonderlijk de volledige beschikbare RAM toegewezen. Bereken hun mogelijke poolmaxima samen met de overige diensten en de reserve. Een eventueel geconfigureerde globale FPM-proceslimiet kan aanvullend van toepassing zijn, maar vervangt noch de afzonderlijke poolbudgetten, noch de controle van de CPU- en databasecapaciteit. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Controleer na wijzigingen de daadwerkelijke belasting en wachttijden over geschikte periodes, in plaats van de startwaarde als definitief te beschouwen. Bij managed hosting zijn procesgegevens of poolinstellingen mogelijk niet direct toegankelijk; maak in dat geval gebruik van de statistieken en de door de provider vrijgegeven opties. Welke instellingen beschikbaar zijn, hangt bovendien af van de PHP-versie en de bedrijfsomgeving.<\/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\">FPM-status en geheugen in de gaten houden<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">De FPM-statuspagina laat zien of de geplande workers voldoende zijn bij een werkelijke belasting. <strong style=\"font-weight:700;color:inherit\">Beveilig het status-eindpunt<\/strong> buiten het bereik van het publiek: deze kan gevoelige gegevens over verzoeken en bronnen prijsgeven. Een afzonderlijk geconfigureerde status-listener kan ook bereikbaar blijven wanneer de hoofdpool overbelast is; controleer de beschikbaarheid en instellingen ervan voor jouw PHP-versie en webserverconfiguratie.  <\/p>\n<div class=\"wh-table-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"FPM-statuswaarden in een tijdscontext analyseren\" 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\">FPM-statuswaarden in een tijdscontext analyseren<\/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\">Statuswaarde<\/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\">Classificatie<\/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\">Vervolgvraag<\/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\">actieve processen \/ inactieve processen<\/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\">Huidige werknemers en 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\">Zijn er bij piekbelastingen nog vrije workers beschikbaar?<\/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\">luisterwachtrij \/ maximale luisterwachtrij<\/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\">Huidige en tot nu toe maximale wachtrijlengte<\/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\">Wordt de wachtrij langer als de reactietijden langzaam zijn?<\/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. bereikte kinderen<\/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\">Teller voor het bereiken van de limiet van het aantal workers bij \u2018dynamic\u2019 of \u2018ondemand\u2019<\/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\">Stijgt de teller in de betreffende periode?<\/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\">langzame aanvragen<\/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\">Teller voor trage verzoeken<\/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\">Gaat deze stijging gepaard met langere responstijden?<\/td><\/tr><\/tbody><\/table><\/div><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Beschouw de waarden als <strong style=\"font-weight:700;color:inherit\">tijdreeksen<\/strong> samen met het aantal verzoeken en de responstijden. Een oud record van de wachtrij wijst niet op een huidige overbelasting; ook bij tellers is de stijging sinds de laatste waarneming veelzeggender dan de loutere totaalwaarde. Houd daarbij rekening met de start van de pool of herstarts, waardoor de referentieperiode verandert. <\/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=\"Door AI gegenereerde illustratie van twee stroken papier met huidige en vroegere puntverzamelingen.\" 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\">Door AI gegenereerde illustratie: de huidige statuswaarden en eerdere piekwaarden moeten in een tijdscontext worden geplaatst.<\/figcaption><\/figure><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Voor een bekende FPM-worker kun je op een Linux-systeem met een beschikbare proc-interface geaggregeerde geheugenwaarden in leesmodus opvragen. Vervang <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> met het daadwerkelijke proces-ID; je hebt hiervoor de juiste toegangsrechten nodig. Herhaal deze waarneming voor meerdere workers en belastingstoestanden, in plaats van uit \u00e9\u00e9n enkel proces een permanente poolgrootte af te leiden. <\/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\">Code kopi\u00ebren<\/button><span class=\"wh-copy-status\" aria-live=\"polite\"><\/span><span data-wh-copy-success hidden>Gekopieerd<\/span><span data-wh-copy-fallback hidden>Code gemarkeerd \u2013 gelieve te kopi\u00ebren<\/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\">Trage verzoeken en wachtrijen onderzoeken<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Een webshop kan veel actieve workers weergeven, ook al is de PHP-uitvoering zelf niet de oorspronkelijke bottleneck. Als verzoeken moeten wachten op trage databasequery's, blijven de workers ondertussen geblokkeerd. Als er nog meer verzoeken binnenkomen, kan de wachtrij van de listener groeien en de responstijd toenemen, zelfs als de CPU nog reserves heeft.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Een hogere limiet voor het aantal workers zorgt er in deze situatie mogelijk voor dat er meer verzoeken tegelijkertijd bij de database terechtkomen. Dat kan de <strong style=\"font-weight:700;color:inherit\">Backend-afdrukken<\/strong> verhogen en de wachttijden nog verder verlengen. Vergelijk daarom het tijdsverloop van de FPM-bezettingsgraad en de wachtrij met de databasebelasting, trage zoekopdrachten en externe serviceaanroepen, voordat je de limiet verhoogt.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Het FPM-Slowlog helpt bij het opsporen van langdurige PHP-aanroepen: voor verzoeken die een geconfigureerde drempel overschrijden, kan FPM een backtrace vastleggen. Deze geeft een uitvoeringspunt weer en is geen volledig profiel van het gehele verzoek. Terugkerende punten kunnen worden vergeleken met de verzoekduur en backend-statistieken; de <a href=\"https:\/\/webhosting.de\/nl\/php-fpm-slowlog-correct-analyseren-prestatieoptimalisatie-foutopsporing-analyse\/\">Handleiding voor het analyseren van het PHP-FPM-slowlog<\/a> wordt in de verdere analyse toegelicht. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Ook een time-out moet worden onderscheiden van de daadwerkelijke capaciteit. Bij nginx wordt <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> de toegestane tijd tussen opeenvolgende leesbewerkingen van de FastCGI-server, niet de totale duur van het verzoek in het algemeen. Een hogere waarde kan een langere wachttijd toestaan, maar zorgt niet voor extra workers en versnelt de database ook niet. <\/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\">Capaciteitsbeperkingen en volgende stappen<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Als het RAM-budget niet toereikend is voor de geschatte behoefte, lost een hogere instelling voor <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> Let niet op het doelconflict: extra processen hebben ook geheugen nodig. Controleer in plaats daarvan of het aantal PHP-verzoeken of de duur van de bezetting van de workers kan worden verminderd. Welke maatregel zinvol is, hangt af van waar de waargenomen belasting ontstaat.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Een beter benutte cache kan herhaalde verzoeken opvangen, terwijl een snellere PHP-uitvoering en database-toegang ervoor zorgen dat workers eerder worden vrijgegeven. Geschikte achtergrondtaken kunnen uit het directe verzoekpad worden verplaatst; ook deze taken hebben echter hun eigen resources nodig. Een belastingbeperking beschermt de backend tijdens pieken, maar kan ertoe leiden dat verzoeken moeten wachten of worden afgewezen.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Extra RAM kan een groter aantal workers mogelijk maken als het geheugen daadwerkelijk de beperkende factor is. Als de CPU, de database of een externe dienst al volledig benut worden, moet ook rekening worden gehouden met hun capaciteit. Meer geheugen alleen garandeert daarom noch kortere responstijden, noch een hogere doorvoersnelheid.<\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Als de opslagbehoefte van afzonderlijke workers tijdens hun levensduur toeneemt, kan <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> zorg ervoor dat deze regelmatig worden vervangen. Dit kan helpen bij het aanpakken van geheugenlekken in bibliotheken van derden, maar lost de oorzaak ervan niet op. Blijf na een wijziging het poolgeheugen en het verzoekgedrag in de gaten houden, in plaats van het herstartmechanisme te gebruiken als vervanging voor het opsporen van fouten. <\/p>\n<p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Voor een bredere architecturale keuze biedt de <a href=\"https:\/\/webhosting.de\/nl\/nginx-unit-als-alternatief-voor-php-fpm\/\">Vergelijking tussen NGINX Unit en PHP-FPM<\/a> Context: NGINX Unit is gearchiveerd en wordt niet meer onderhouden. Ongeacht de gekozen architectuur moet je wijzigingen doorvoeren op basis van <strong style=\"font-weight:700;color:inherit\">tijdreeksen<\/strong> Controleer: vergelijk bij een vergelijkbaar aantal verzoeken de wachtrij, de bezettingsgraad van de workers, het geheugen en de responstijden. Zo kun je vaststellen of een aanpassing het knelpunt daadwerkelijk heeft verholpen of alleen maar heeft verplaatst. <\/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\">Bronnen en stand van zaken op vakgebied<\/h2><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Stand van het onderzoek: <time datetime=\"2026-11-04\">2026-11-04<\/time><\/p><p style=\"margin:0 0 1.1em;font-size:inherit;line-height:inherit\">Stand van zaken: 4 november 2026. Controleer de beschikbaarheid van de status-listener, procesgegevens en pool-instellingen voor de gebruikte PHP- en Linux-versie en de hostingomgeving.<\/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>Hoeveel PHP-FPM-workers passen er in het RAM-geheugen en hoeveel zijn er nodig voor het daadwerkelijke verkeer? In dit artikel wordt uitgelegd hoe PSS wordt gemeten, hoe de workers worden toegewezen en wat de beperkingen zijn van 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 als alternatief voor PHP-FPM? Architectuur, risico\u2019s en toepassingen","excerpt":"NGINX Unit was technisch gezien meer dan PHP-FPM: de applicatieserver kon HTTP, routing, statische bestanden en PHP-uitvoering combineren. Voor nieuwe PHP-hostingplatforms is Unit echter geen algemeen alternatief, aangezien het project sinds oktober 2025 is gearchiveerd en niet meer wordt onderhouden. NGINX met PHP-FPM blijft daarom voor nieuwe systemen de meest begrijpelijke standaardkeuze. Unit is vooral relevant voor gedocumenteerde bestaande installaties, risicoanalyses en geplande migraties. Direct naar de paragraaf: Gearchiveerde status en duidelijk kort oordeel NGINX, PHP-FPM en Unit onderscheiden zich in PHP-modules, versies en configuratiebeperkingen PHP-routing en Front Controller configureren Procesmodellen en RAM-budget vergelijken Bedrijfsmodellen voor PHP-hosting beoordelen Unit veilig in bestaande omgevingen gebruiken Time-outs, logs en vastgelopen processen Keuze voor nieuwe en oude systemen Gearchiveerde status en duidelijk kort oordeel Per 30 september 2026 luidt het duidelijke oordeel: NGINX Unit kon PHP-toepassingen rechtstreeks uitvoeren en daarbij HTTP-verbindingen accepteren, TLS be\u00ebindigen, statische bestanden leveren en verzoeken routeren. Daarmee reikte de functionaliteit duidelijk verder dan die van PHP-FPM. Voor nieuwe productieve PHP-hostingplatforms is Unit echter geen algemene aanbeveling, omdat het offici\u00eble project sinds oktober 2025 is gearchiveerd en niet meer wordt onderhouden. Dat betekent niet dat een bestaande Unit-installatie onmiddellijk onbruikbaar zou zijn. Deze kan nog steeds een applicatie bedienen, mits de afhankelijkheden, beveiligingsmaatregelen en een migratietraject gedocumenteerd zijn. Een nieuwe investering moet echter anders worden beoordeeld: zonder voortdurend projectonderhoud nemen de risico\u2019s toe op het gebied van beveiligingslekken, beschikbaarheid van pakketten, nieuwe besturingssysteemversies en toekomstige PHP-compatibiliteit. Bij versie-aanduidingen is een duidelijke scheiding belangrijk. In de nog steeds beschikbare installatiedocumentatie wordt vaak Unit 1.34.2 genoemd, terwijl de stabiele release 1.35.0 is gepubliceerd. De release bevestigt onder andere compatibiliteit met PHP 8.5; hieruit volgt echter geen voortgezet onderhoud. De ontwikkelingstak \u2018master\u2019 is vanwege de gearchiveerde status geen toonaangevend product"},"I2":{"id":"I2","post_id":21283,"url":"https:\/\/webhosting.de\/linux-hugepages-hosting-mariadb-redis-php-fpm-optimierung-nebula\/","title":"Linux HugePages bij hosting: een boost voor MariaDB, Redis en PHP-FPM","excerpt":"Ik laat concreet zien hoe Linux-hugepages in de hostingstack MariaDB, Redis en PHP-FPM versnellen, waar ze juist vertragen en hoe ik ze doelgericht instel. Zo verlaag ik de latentie, verminder ik TLB-misses en houd ik het geheugenbeheer voorspelbaar. Belangrijkste punten De volgende punten vatten de belangrijkste handelingen en effecten samen. Kies bewust voor de THP-modus: \u201emadvise\u201c voor brede workloads, \u201enever\u201c voor gevoelige diensten zoals Redis. Plan statische HugePages in voor grote MariaDB-bufferpools om de latentie en TLB-misses te verlagen. Redis beschermen tegen latentiepieken: THP uitschakelen en fork-kosten beperken. PHP-FPM profiteert indirect door lagere kernel-overhead en snellere backends. Benchmarking en monitoring uitvoeren v\u00f3\u00f3r de livegang, effecten meetbaar maken. HugePages en THP kort uitgelegd Ik gebruik HugePages om grotere geheugenpagina\u2019s in te schakelen en zo het aantal te beheren pagina\u2019s te verminderen. Klassieke pagina\u2019s zijn 4 KB, terwijl grote pagina\u2019s meestal 2 MB groot zijn. Hierdoor nemen TLB-misses aanzienlijk af, besteedt de CPU minder tijd aan geheugenbeheer en reageren diensten die veel gebruikmaken van RAM sneller. Transparent Huge Pages (THP) probeert dit automatisch en kan werken zonder aanpassingen aan de applicatie. Praktijkverslagen laten vaak 20\u201340 % snellere bewerkingen zien, mits de workloads en instellingen op elkaar zijn afgestemd. THP-modi correct kiezen en testen Ik maak een duidelijk onderscheid tussen de modi \u201ealways\u201c, \u201emadvise\u201c en \u201enever\u201c, omdat ze workloads op verschillende manieren be\u00efnvloeden. \u201ealways\u201c kan verrassend veel RAM-geheugen bezetten en kopieerwerk veroorzaken wanneer diensten forken. \u201emadvise\u201c biedt controle: alleen geheugen dat de app expliciet markeert, maakt gebruik van grote pagina\u2019s. \u201enever\u201c biedt maximale voorspelbaarheid, vooral bij forking-intensieve diensten zoals Redis. Wie zich hier verder in wil verdiepen, vindt hier achtergrondinformatie over de voordelen en valkuilen: THP: booster of probleem. Ik test elke modus onder re\u00eble belasting, meet de latentie, CPU-tijd en RSS, en neem vervolgens een op feiten gebaseerde beslissing. Praktische configuratie op de host Voordat ik diensten omzet, zorg ik voor reproduceerbare standaardinstellingen op de host en een veilige terugvaloptie. THP gericht instellen (opstartparameters of systemd) Via kernel-boot: in GRUB \u201etransparent_hu"},"I3":{"id":"I3","post_id":20986,"url":"https:\/\/webhosting.de\/php-fpm-slowlog-richtig-auswerten-performance-optimierung-debugging-analyse\/","title":"PHP-FPM Slowlog correct analyseren: prestatieknelpunten betrouwbaar opsporen","excerpt":"Ik laat je zien hoe je het PHP-FPM-slowlog doelgericht kunt analyseren, de backtraces correct kunt interpreteren en daaruit duidelijke stappen kunt afleiden om de latentie te verminderen. Zo kun je op betrouwbare wijze prestatieknelpunten opsporen, maatregelen prioriteren en de laadtijden voor gebruikers merkbaar versnellen. Belangrijke punten bij het lezen van backtraces: frame #0 geeft de huidige bottleneck aan. Time-out instellen: begin hoog en verlaag deze vervolgens stapsgewijs. Correlatie met het toegangslogboek: trage URL\u2019s met zekerheid toewijzen. Patronen herkennen: prioriteit geven aan terugkerende functies. Code-oplossingen afleiden: DB, API\u2019s, loops en plug-ins gericht aanpakken. Wat is het PHP-FPM-slowlog? Het slowlog schrijft bij lange verzoeken een backtrace naar een logbestand en legt zo het huidige uitvoeringspunt vast, zonder het verzoek te be\u00ebindigen. Hieraan zie ik meteen welk script, welke URL en welke functie de weg blokkeert. De vermeldingen bevatten tijdstempels, pool, scriptbestandsnaam, verzoek-URI en de reeks functieaanroepen. Hierdoor onderscheidt de Slowlog zich duidelijk van klassieke foutenlogs, want hij documenteert prestaties, geen fouten. Voor zwaar belaste sites zoals WordPress-backends levert het snel bruikbare aanwijzingen op over dure query\u2019s, uitgebreide rendering of blokkerende I\/O-bewerkingen. Wie deze momentopnames begrijpt, kan de hoofdoorzaak zeer snel in kaart brengen en maatregelen plannen. Zo werkt de slowlog in de dagelijkse praktijk Na activering schrijft PHP-FPM, wanneer een gedefinieerde drempel wordt overschreden, een momentopname van de stack naar het log, terwijl het verzoek doorloopt. Elk item begint doorgaans bij \u201e#0\u201c, dus op de plek waar op dat moment tijd verloren gaat. Tussen de blokken zie ik vaak lege regels, wat het scheiden van de gebeurtenissen vereenvoudigt. De methode levert steekproeven in plaats van volledige profielen, maar biedt in ruil daarvoor trefzekere aanwijzingen voor echte knelpunten, zoals omslachtige sjabloonpaden, verweesde hooks of trage netwerkverzoeken. In drukke fasen koppel ik deze aanwijzingen aan piekbelastingen en kan ik zo codefragmenten netjes indelen. Zodra ik terugkerende patronen zie, pas ik bijvoorbeeld pm.max_children aan en gebruik ik daarvoor de informatie uit \u2018pm.max_children correct instellen\u2019. 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":"Capaciteitsplanning voor PHP-FPM: het aantal workers, het RAM-geheugen en het aantal gelijktijdige verzoeken berekenen","slug":"php-fpm-capaciteitsplanning-worker-ram-verzoeken","excerpt":"Hoeveel PHP-FPM-workers passen er in het RAM-geheugen en hoeveel zijn er nodig voor het daadwerkelijke verkeer? In dit artikel wordt uitgelegd hoe PSS wordt gemeten, hoe de workers worden toegewezen en wat de beperkingen zijn van pm.max_children.","status":"draft","featured_media":22160},"verify":{"content_md5":"b99a6321bcea002fa2d3704eb8c99934","title":"Capaciteitsplanning voor PHP-FPM: het aantal workers, het RAM-geheugen en het aantal gelijktijdige verzoeken berekenen","slug":"php-fpm-capaciteitsplanning-worker-ram-verzoeken","excerpt":"Hoeveel PHP-FPM-workers passen er in het RAM-geheugen en hoeveel zijn er nodig voor het daadwerkelijke verkeer? In dit artikel wordt uitgelegd hoe PSS wordt gemeten, hoe de workers worden toegewezen en wat de beperkingen zijn van 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: Configuratie - Handleiding"},"S2":{"id":"S2","url":"https:\/\/www.php.net\/fpm.status.php?utm_source=openai","title":"PHP: Statuspagina - Handleiding"},"S3":{"id":"S3","url":"https:\/\/docs.kernel.org\/7.0\/filesystems\/proc.html?utm_source=openai","title":"Het \/proc-bestandssysteem \u2014 De documentatie van de Linux-kernel"},"S4":{"id":"S4","url":"https:\/\/www.php.net\/manual\/de\/install.fpm.php?utm_source=openai","title":"PHP: FastCGI Process Manager (FPM) - Handleiding"},"S5":{"id":"S5","url":"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_fastcgi_module.html?utm_source=openai","title":"Module ngx_http_fastcgi_module"},"S6":{"id":"S6","url":"https:\/\/www.kernel.org\/doc\/html\/v6.12\/filesystems\/proc.html?utm_source=openai","title":"Het \/proc-bestandssysteem \u2014 De documentatie van de Linux-kernel"}},"_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":"Capaciteitsplanning voor PHP-FPM: het aantal workers, het RAM-geheugen en het aantal gelijktijdige verzoeken berekenen","slug":"php-fpm-capaciteitsplanning-worker-ram-verzoeken","excerpt":"Hoeveel PHP-FPM-workers passen er in het RAM-geheugen en hoeveel zijn er nodig voor het daadwerkelijke verkeer? In dit artikel wordt uitgelegd hoe PSS wordt gemeten, hoe de workers worden toegewezen en wat de beperkingen zijn van pm.max_children.","status":"draft","featured_media":0},"expected":{"content_md5":"b99a6321bcea002fa2d3704eb8c99934","title":"Capaciteitsplanning voor PHP-FPM: het aantal workers, het RAM-geheugen en het aantal gelijktijdige verzoeken berekenen","slug":"php-fpm-capaciteitsplanning-worker-ram-verzoeken","excerpt":"Hoeveel PHP-FPM-workers passen er in het RAM-geheugen en hoeveel zijn er nodig voor het daadwerkelijke verkeer? In dit artikel wordt uitgelegd hoe PSS wordt gemeten, hoe de workers worden toegewezen en wat de beperkingen zijn van 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":"Capaciteitsplanning voor PHP-FPM: het aantal workers, het RAM-geheugen en het aantal gelijktijdige verzoeken berekenen","slug":"php-fpm-capaciteitsplanning-worker-ram-verzoeken","excerpt":"Hoeveel PHP-FPM-workers passen er in het RAM-geheugen en hoeveel zijn er nodig voor het daadwerkelijke verkeer? In dit artikel wordt uitgelegd hoe PSS wordt gemeten, hoe de workers worden toegewezen en wat de beperkingen zijn van pm.max_children.","seo":{"title":"Capaciteitsplanning voor PHP-FPM: het aantal workers en het RAM-geheugen berekenen","description":"PHP-FPM-workers plannen op basis van RAM-budget en request-bezetting: zo kun je pm.max_children op een zinvolle manier beperken en bewaken.","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\/nl\/wp-json\/wp\/v2\/posts\/22158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/comments?post=22158"}],"version-history":[{"count":2,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/posts\/22158\/revisions"}],"predecessor-version":[{"id":22163,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/posts\/22158\/revisions\/22163"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/media\/22160"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/media?parent=22158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/categories?post=22158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/tags?post=22158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}