Hoge bezoekersaantallen genereren belastingspieken in seconden - als de PHP worker, database en cache niet werken, eindigt de paginaoproep in de WordPress time-out. Ik laat je zien waarom verzoeken vastlopen, hoe je de oorzaak kunt achterhalen en specifieke instellingen en upgrades kunt gebruiken om time-outs onder belasting te elimineren - permanent performant.
Centrale punten
- OorzakenOverbelaste PHP-workers, trage database, ontbrekende caching
- DiagnoseServerlogs, belastingstests, plug-incontroles en queryanalyse
- OnmiddellijkPHP-limieten verhogen, WP-Cron wijzigen, .htaccess repareren
- OptimalisatieCaching, objectcache, afbeeldingen- en activatuning, CDN
- SchalenSterkere hosting, meer PHP-medewerkers, verbindingslimieten aanpassen
Waarom hoge belasting leidt tot time-outs
Een toename van gelijktijdige aanvragen vreet als eerste vrije ruimte op. CPU, dan blokkeren I/O en databasesloten en klimmen de responstijden. Ik zie vaak PHP workers vollopen terwijl nieuwe verzoeken in de wachtrij hangen en dan een 504 of 502 foutmelding geven - een klassieke Time-out. Gedeelde hosting verergert dit omdat je bronnen deelt met andere projecten en pieken oplopen. Nog verraderlijker: ongeoptimaliseerde database queries op wp_options of posts met revisies die seconden kosten. In combinatie met een ontbrekende paginacache is er uiteindelijk geen tijdbudget meer voor de site.
502 vs. 504: Foutmeldingen correct interpreteren
Ik maak onderscheid tussen de symptomen voordat ik schiet: A 502 Slechte gateway wijst vaak op een gecrasht of onbereikbaar PHP backend proces (herstart FPM, controleer limieten). A 504 Gateway-time-out geeft aan dat de upstream (PHP-FPM) te traag reageert - meestal het resultaat van geblokkeerde workers, trage queries of te krappe read_timeout-waarden bij de proxy. Als beide fouten afwisselend optreden, ligt de focus op wachtrijlengtes en verbindingslimieten: de proxy kan nog steeds nieuwe verbindingen accepteren, maar FPM accepteert geen opdrachten meer of weigert ze vanwege overvulling.
Vind de oorzaak: Diagnose in enkele minuten
Ik begin met fout- en toegangslogs, want daar herken ik pieken in Verzoeken en lange runtimes onmiddellijk. Vervolgens controleer ik de CPU, RAM, I/O en actieve PHP processen - of workers aan hun limiet zitten of dat langzame queries overheersen. Op app-niveau schakel ik het debug-log in om lange acties en hooks te bekijken en foutieve queries te identificeren. Plugins om het te isoleren. Vervolgens deactiveer ik alle extensies en activeer ze afzonderlijk totdat de trigger is bepaald. Tot slot simuleer ik de belasting om te zien wanneer deze begint te mislukken en of de caching en objectcache effect hebben.
Onmiddellijke maatregelen die een merkbaar effect hebben
Ik verhoog eerst de runtime en het geheugen zodat het draaien van Processen niet sterven in time-out: in wp-config.php met set_time_limit(300); en per define('WP_MEMORY_LIMIT','512M');. Indien toegestaan, stel ik in .htaccess het volgende in php_waarde max_uitvoering_tijd 300 en php_waarde geheugenlimiet 512M voor meer Buffer. Dan deactiveer ik WP-Cron via define('DISABLE_WP_CRON', true); en een cron voor het echte systeem ingesteld, zodat pagina-aanvragen geen cron-runs triggeren. Ik laat de permalink-dialoog een nieuwe .htaccess genereren als het bestand corrupt is. Tot slot leeg ik alle caches en controleer ik in het incognitovenster of de TTFB instort of stabiel blijft.
Specifiek de time-outs voor webservers en proxy's configureren
Ik zorg ervoor dat de keten van webserver en PHP-FPM genoeg tijdvensters heeft, maar geen ongebruikte blokken genereert. Voor NGINX pas ik het volgende aan fastcgi_read_timeout, fastcgi_connect_timeout en send_timeout gematigd opwaarts (bijv. 60-120 s), terwijl keepalive_timeout blijft vrij kort om geen slots in beslag te nemen. Achter een reverse proxy (loadbalancer) bevinden zich proxy_read_timeout en proxy_connect_timeout Beide moeten overeenkomen met het FPM- en app-budget. Onder Apache beperk ik KeepAliveTimeout (2-5 s) en verhoog MaxRequestWorkers alleen als de RAM-reserves voldoende zijn voor de extra processen. De regel is: timeouts moeten voldoende groot zijn, maar de duur en het aantal verbindingen moeten gecontroleerd worden zodat er geen zombieverbindingen ontstaan.
PHP-FPM, processen en limieten correct instellen
Time-outs komen vaak voor omdat er te weinig PHP-workers draaien of omdat ze te lang geblokkeerd zijn - hier help ik om te beslissen PHP-FPM via pm=dynamisch/ongevraagd en redelijke limieten. Een ruwe beginwaarde voor pm.max_kinderenBeschikbare RAM voor PHP gedeeld door de gemiddelde procesgrootte, laat dan 20-30% reserve toe zodat de server kan ademen. pm.max_aanvragen voorkomt geheugenlekken en pm.process_idle_timeout verlaagt de inactieve kosten als de belasting fluctueert. Ik activeer Opcache strikt zodat de interpreter niet constant opnieuw compileert en de TTFB aanzienlijk krimpt. Als je dieper wilt graven, kun je praktische informatie vinden over PHP-FPM instellingen, die ik gebruik als basis voordat ik het thema opschaal of aanpas aan NGINX/Apache.
Apache/NGINX/LiteSpeed: Werkermodellen en keep-alive
Ik kies het werkermodel dat past bij het verkeersprofiel: Apache met mpm_gebeurtenis schaalt beter dan prefork en harmoniseert met FPM. NGINX profiteert van een paar werker_processen (auto) en hoog werker_verbindingen, om veel gelijktijdige clients te bedienen. LiteSpeed/LSAPI bindt PHP efficiënt, maar vereist aangepaste Max-Conns aan de PHP kant. Keep-Alive Ik houd het actief, maar kort: korte time-outs en beperkte keepalive_requests voorkomen dat inactieve clients slots blokkeren. Dit loont onder HTTP/2 en HTTP/3, omdat meerdere middelen over één verbinding lopen en de overhead wordt verminderd.
Je database stroomlijnen en versnellen
De meest voorkomende rem bevindt zich in de Databaseopgeblazen revisies, oude transients en een overmatige autoload-belasting in wp_options. Ik ruim regelmatig op, verminder revisies, verwijder verlopen transients en houd autoload='ja' klein, zodat WordPress geen honderden kilobytes laadt bij het opstarten. Ik optimaliseer tabellen met de DB-tool en controleer op ontbrekende Indices voor frequente WHERE-voorwaarden. Voor grote mediagegevens vertrouw ik op offloading of efficiënte metadata queries om te voorkomen dat JOIN's exploderen. Indien nodig, til ik ook max_toegestaan_packet en gebruiken een objectcache (Redis/Memcached), wat de belasting bij leestoegang aanzienlijk vermindert.
MySQL/InnoDB parameters en trage query-analyse
Ik activeer de Trage query-logs tijdelijk (klein lange_vraag_tijd-waarden, bijvoorbeeld 0,2-0,5 s) om uitschieters zichtbaar te maken. Voor InnoDB dimensioneer ik innodb_buffer_pool_grootte (50-70% van de DB-RAM) zodat warme gegevens in het geheugen worden opgeslagen. innodb_log_file_size en innodb_flush_log_at_trx_commit Ik pas het aan afhankelijk van de vereisten voor consistentie. Een SSD/NVMetmpdir versnelt grote soorten, en ik houd max_verbindingen in balans met het aantal PHP workers en connection pooling zodat de DB niet hoeft te thrashen. Belangrijk: Vermijd autocommit-traps en lange transacties, omdat ze locks verlengen en hele paginaketens vertragen.
Caching en CDN: de app ontlasten
Page caching levert HTML zonder PHP of de database aan te raken - dit is het grootste voordeel tijdens verkeerspieken. Hendel. Ik stel een full-page cache in met een lange TTL, maak onderscheid tussen ingelogde gebruikers en gasten en activeer „stale-while-revalidate“ zodat pagina's snel blijven, zelfs tijdens rebuilds. Een object cache versnelt herhaalde Query's, terwijl een CDN statische assets dicht bij de gebruiker levert en de Origin load enorm vermindert. Ik converteer afbeeldingen naar WebP, activeer lazy loading en combineer dit met HTTP/2 of HTTP/3 zodat veel bestanden parallel stromen. Deze gids voor Cache voor volledige pagina's, die ik altijd prioriteit geef tijdens piekbelastingen.
Cache-strategie: sleutels, varianten en bescherming tegen stormloop
Ik definieer vroege en stabiele cachesleutels: pad, host, relevante cookies (zo weinig mogelijk) en apparaattype. Ik plaats bewust cookies die personaliseren (bijv. winkelmand, valuta) als Variëren of ik omzeil ze met gefragmenteerde caching. Tegen Cache-stampede helpt „stale-while-revalidate“, microcaching (1-10 s) op de webserver en het voorverwarmen van kritieke routes voor campagnes. Ik zorg voor schone InvalidatieVerwijder specifiek wanneer inhoud wordt gepubliceerd in plaats van de hele cache door te spoelen. Dit houdt de hitrates hoog en de responstijden constant, zelfs bij volledige belasting.
Hostingvergelijking en verstandige upgrades
Op een gegeven moment wordt het punt bereikt waarop de limieten van het pakket van kracht worden - dan heeft de site meer nodig Bronnen in plaats van fine-tuning. Als het echt druk wordt, verlaat ik gedeelde omgevingen en ga ik naar beheerde aanbiedingen met dedicated CPU/RAM of naar een VPS met NGINX/LiteSpeed en NVMe-opslag. Snelle IOPS, voldoende PHP-workers en de nieuwste PHP 8+ met Opcache. Voor terugkerende pieken helpt auto-scaling om de worker en database te schalen zonder handmatige tussenkomst. Het volgende overzicht toont veelgebruikte opties en waarvoor ze geschikt zijn.
| Plaats | Aanbieder/Type | Dikte van de kern | Aanbevolen voor |
|---|---|---|---|
| 1 | webhoster.de (Beheerd) | Automatisch schalen, NVMe SSD, hoge CPU/RAM, beheerd WP | Veel verkeer, schaalvergroting |
| 2 | Beheerde WP Hosting | Geïntegreerde caching, geoptimaliseerde PHP-workers | Middelzware belasting |
| 3 | VPS met NGINX/LiteSpeed | Hoge IOPS, speciale bronnen | Geavanceerde sites |
Schalen, verbindingslimieten en PHP-werkers
Parallellisme wordt afgebroken als de webserver, PHP-FPM of de database te smal zijn. Grenzen ingesteld. I balans pm.max_kinderen met de echte procesgrootte, regel de keepalives van de webserver en controleer de MySQL verbindingspools. Overigens kunnen teveel workers het RAM uitputten en de I/O verstoppen - ik ga daarom stap voor stap te werk en meet. Als er 500 of 504 fouten optreden onder belasting, controleer ik samen verbindingslimieten, timeouts en wachtrijlengtes. Een compacte uitleg van typische limietvallen is te vinden in dit artikel op Verbindingsbeperkingen, wat me vaak minuten bespaart bij het analyseren van de oorzaak.
Efficiënte caching van WooCommerce en dynamische gebieden
E-commerce daagt de cache-strategie uit: Ik cache categoriepagina's, productpagina's en CMS-content volledig, terwijl het winkelmandje, de kassa en „Mijn account“ specifiek zijn uitgesloten van de cache. Mandfragmenten en gepersonaliseerde banners door het herladen of fragmenteren van kleine dynamische delen via JavaScript. Cookies zoals valuta, land of sessie komen alleen terecht in de Variëren, waar het onvermijdelijk is; anders vernietigen ze de hitrate. Ik warm geplande acties (bijv. verkoop) op zodat er geen koude cache opwarmt bij de start. Ik beperk admin Ajax- en REST-eindpunten door query's te bundelen, resultaten te cachen en polling te beperken.
Belastingstests, bewaking en waarschuwingen
Ik vertrouw niet op gevoel, ik bewijs effecten met Metingen. Voor campagnes simuleer ik golven van bezoekers, verhoog ik geleidelijk de gelijktijdigheid en controleer ik de belasting waarbij de TTFB en het foutpercentage beginnen toe te nemen. APM-tools laten me de traagste transacties, query's en externe oproepen zien - dit is precies waar ik hefboomwerking toepas. Waarschuwingen over CPU, RAM, 5xx-snelheid en responstijden waarschuwen me in een vroeg stadium, zodat ik voorbereid kan zijn voordat het echt misgaat. Storing reageren. Vervolgens herhaal ik de test met de cache geactiveerd om er zeker van te zijn dat optimalisaties werken onder volledige belasting.
Externe services en HTTP-verzoeken beveiligen
Veel timeouts komen door het blokkeren van HTTP-aanroepen in thema's/plugins. Ik stel strakke tijdvensters in voor wp_remote_get()/wp_remote_post() (timeouts voor verbinden/lezen), bouw fallbacks in en verplaats dure synchronisaties naar achtergrondtaken. Ik controleer DNS-resolutie en SSL-handshake afzonderlijk - defecte resolvers of certificaatketens vertragen de boel merkbaar. Ik cache terugkerende resultaten lokaal zodat storingen van externe API's de site niet beïnvloeden. Principe: Externe I/O mag nooit de runtime van het verzoek domineren.
Beveiliging, botverkeer en WAF-regels
Ik bescherm de applicatie tegen nutteloos verkeer: Snelheidslimieten op login, XML-RPC en search endpoints, strikte regels tegen scrapers en slechte bots en een throttle voor agressieve crawlers. 429/503 met Opnieuw proberen na helpen om capaciteit vrij te houden voor echte gebruikers. Een upstream WAF sorteert Layer 7-pieken en blokkeert bekende aanvalsvectoren voordat ze PHP/DB beïnvloeden. Voor media activeer ik zinvolle caching (ETag/Last-Modified) zodat herhaalde aanroepen nauwelijks serverkosten genereren.
Systeemgrenzen en OS tuning
Als verbindingen plotseling worden geweigerd onder belasting, kijk ik naar de OS-parameters: fs.bestand-max en open descriptors voor webserver/DB, net.core.somaxconn en net.ipv4.ip_local_port_range voor veel gelijktijdige sockets. Een te klein achterstand of agressief tcp_fin_timeout zorgt voor knelpunten. Ik verplaats logs die crashen naar de schijf naar snelle gegevensdragers of draai ze strak zodat I/O de app niet vertraagt.
Object cache: Redis/Memcached correct gebruiken
Ik kies Redis voor persistentie en functies zoals stroomrichtlijnen. maxmemory zodat sneltoetsen niet worden verplaatst en stel een geschikt uitzettingsbeleid in (bijvoorbeeld allkeys-lru). Serialisers zoals igbinary besparen RAM, korte TTL's op vluchtige transients verminderen churn. Belangrijk: De objectcachellaag moet de DB ontlasten - als de hitratio laag blijft, analyseer ik de sleuteldistributie en vereffen codepaden totdat de hits toenemen.
Veelvoorkomende foutbronnen snel elimineren
Veel timeouts worden veroorzaakt door een paar triggers - ik controleer eerst Cron, Heartbeat en Zoeken. Ik schakel WP-Cron om naar systeemcron, ik geef de Heartbeat API flink gas en vervang dure backendlijsten door server-side caching. Problematische plugins worden verwijderd of vervangen door lichtere alternatieven, vooral als ze externe fouten veroorzaken telkens wanneer een pagina wordt aangeroepen. API's contact. In .htaccess verwijder ik dubbele redirect-lussen en repareer ik onjuiste PHP-handlers die processen dupliceren. Ik vertraag bots en scrapers met snelheidslimieten en een upstream CDN zodat echte gebruikers niet hoeven te wachten.
Samenvatting voor snelle implementatie
Ik verhelp een dreigende Time-out in een vaste volgorde: meet de oorzaak, verhoog de limieten, activeer caching, stroomlijn de database, verhoog de hosting. Een duidelijke worker- en cachestrategie is cruciaal zodat verzoeken niet met elkaar concurreren om resources. Met een schone full-page cache, object cache en WebP assets wordt de serverbelasting onmiddellijk verminderd - vaak vele malen. Als dit niet genoeg is, zorgen meer CPU/RAM, snellere NVMe-opslag en goed ingestelde PHP FPM-parameters voor de nodige Reserve. Belastingtests en monitoring sluiten de lus, omdat alleen herhaalde metingen de prestaties onder echt verkeer garanderen.


