...

Server Ulimits i hosting: optimera fil- och processgränser

Servergränser Inom hosting styr du specifikt hur många filer och processer som dina tjänster får hålla öppna samtidigt, och bestämmer därmed över fördröjning, felmeddelanden och tillgänglighet. Jag kommer att visa dig steg för steg hur du mäter, justerar och övervakar fil- och processgränser så att webbservrar fungerar smidigt även under belastning. pålitlig arbete.

Centrala punkter

  • Mjuk/Hård Förstå gränser och sätta dem på ett lämpligt sätt
  • ingen fil (filer) och nproc (processer) riktad ökning
  • PHP-FPM och konfigurera köer korrekt
  • Övervakning och identifiera flaskhalsar
  • Säkerhet med rimliga övre gränser

Ulimits kortfattat förklarat: Mjukt vs hårt

Jag använder Ulimits för att få fram tillförlitliga data per användare eller process. Gränser för resurser. Mjuka gränser är de aktuella, föränderliga gränserna, som jag kan höja upp till den hårda gränsen om applikationen behöver mer manöverutrymme på kort sikt. De hårda gränserna representerar den absoluta övre gränsen och förhindrar okontrollerad tillväxt av enskilda tjänster, vilket skulle påverka hela värden. Som standard hänvisar kommandot ulimit till den hårda gränsen utan en switch, vilket gör det enklare för administratörer med rättigheter att göra justeringar. Detta förhindrar att ett enda skript överbelastar servern med för många filer eller processer. överbelastad.

Jag skiljer alltid mellan de viktigaste parametrarna, t.ex. ingen fil (öppna filer), nproc (processer/trådar), fsize (filstorlek), stack (stackstorlek) och cpu (CPU-tid). Särskilt webbstackar med PHP-, databas- och cachekomponenter kräver ofta betydligt fler öppna deskriptorer än de lägsta standardvärdena. Utan rätt gränser kan meddelanden som „för många öppna filer“, långa svarstider eller timeouts för förfrågningar ackumuleras. Jag mäter den faktiska användningen först, ökar gränserna gradvis och kontrollerar sedan latens, felräknare och genomströmning. Det är så jag säkerställer konsekvent prestanda under höga åtkomstnivåer. Svarstider.

Varför gränser är avgörande för hosting

Hostingmiljöer delar hårdvaruresurser, så jag använder lämpliga gränser för att förhindra orättvis tillgång till resurser för enskilda konton eller tjänster och hålla Prestanda stabil. I instegsabonnemanget är till exempel samtidiga CGI/PHP-processer och CPU-tiden per användare begränsade så att ett felaktigt cron-jobb inte saktar ner hela värden. I högre planer kan fler processer köras och mer RAM-minne användas, vilket gynnar krävande applikationer som t.ex. butiker. Jag utvärderar alltid antalet processer, RAM per process och CPU-tid tillsammans så att inga konstgjorda flaskhalsar kvarstår. Jag ger ett detaljerat praktiskt ramverk för rättvisa resurser i artikeln om Gränser för delad hosting, som sammanfattar de inbördes förhållandena organiserar.

Den fil descriptor-gränsen är kritisk eftersom varje öppen fil, varje socket och varje pipe binder en descriptor. Standardvärden på 1024 är ofta för små för moderna webbapplikationer, särskilt när det finns många samtidiga anslutningar. Jag läser därför först av verkliga toppar från loggar och verktyg innan jag ökar värdena, så att jag vet vilka effekter det får på kärntabeller och minnestryck. På så sätt kan jag öka genomströmningen utan att äventyra värdens säkerhet och reaktionsförmåga. Om du förstår principen undviker du slumpmässiga fel på grund av för snäva Hinder.

De viktigaste parametrarna i vardagen: nofile, nproc och co.

För webbrelaterade arbetsbelastningar ingen fil högst upp eftersom HTTP-anslutningar, uppströmssocklar och databasanslutningar förbrukar enorma mängder deskriptorer. Jag planerar buffertar för toppbelastningar, till exempel två till fyra gånger den typiska toppen, så att korta vågor av trafik inte omedelbart leder till fel. För arbetsbaserade tjänster skalar jag nofile parallellt med antalet arbetare och deras maximala anslutningar. Om ett CDN, en omvänd proxy eller ett meddelandelager läggs till ökar efterfrågan igen, vilket jag tar hänsyn till i beräkningen. Det är bara med en ren buffert som sporadiska „open file“-fel försvinner och Felprocent minskar.

nproc-Jag betraktar processer och trådar tillsammans eftersom vissa runtimes använder trådpooler som räknas mot den övre gränsen. Jag kontrollerar spawn-strategier för webbservrar, appservrar och databasen så att den övre gränsen inte träder i kraft obemärkt och blockerar nya arbetare. Om nproc-värdena är för låga visar det sig ofta i form av tröga tjänstestarter eller köer som inte bearbetas. Jag ökar gränsen så att den matchar antalet CPU-kärnor, IO-belastningen och applikationens arkitektur. Detta gör att spawn-processen förblir förutsägbar och förhindrar stelbenta Blockeringar.

Kontrollera Ulimits: så här läser jag verkligheten

Jag börjar varje optimering med synlighet, för utan siffror blir det inga åtgärder blind. Kommandot ulimit -a visar mig de aktuella gränserna för skalsessionen och utgör därmed grunden för jämförelser med servicekonfigurationer. Jag kontrollerar nofile och nproc separat eftersom dessa värden är de första som når sina gränser i hosting. Jag använder också lsof, ss eller netstat för att räkna öppna filer och socklar per process. Det är först när jag vet hur hög belastningen är under produktion som jag planerar buffertar och lägger till dem i Gränsvärden i.

# Alla gränser för en session
ulimit -a

# Filbeskrivningar (mjuka/hårda)
ulimit -n
ulimit -Hn

# Processer/threads per användare
ulimit -u
ulimit -Hu

För tjänster som systemd startar tittar jag inte bara på mitt interaktiva skal, eftersom systemd ställer in sina egna Gränser. Jag jämför därför de effektiva värdena för en process som körs via /proc//limits för att avslöja inkonsekvenser mellan skalet och tjänsten. Avvikelser indikerar att det saknas inställningar i enhetsfiler, som jag sedan lägger till direkt. Den här jämförelsen besparar mig mycket funderande över varför en app inte får öppna fler filer trots högre shell-gränser. Detta gör att jag snabbt kan hitta konfigurationsluckor och säkerställa konsekvent Ram.

Temporär anpassning: snabbtester i pågående sessioner

Innan jag sätter gränser permanent testar jag specifikt högre gränser i ett skal. Värden. På så sätt kan jag utan omstart se om programmet accepterar fler anslutningar som förväntat eller om latensen minskar. Ökade värden gäller i den här sessionen tills jag stänger den eller startar om tjänsten. Jag dokumenterar effekten på syslog, felloggar och mätvärden så att senare permanenta justeringar är välgrundade. Korta tester besparar mig stora återställningar och ger tillförlitliga resultat. Kuponger.

# Temporärt i det aktuella skalet
ulimit -n 65536 # Höj filbeskrivare
ulimit -u 4096 # Öka gränsen för processer/trådar

# Explicit kontrollera/justera hårda gränser (root)
ulimit -Hn 131072
ulimit -Hu 8192

Jag genomför sådana tester vid planerade belastningstoppar för att kunna analysera verkliga effekter. Se. Om felen „för många öppna filer“ upphör och antalet förfrågningar per sekund ökar, registrerar jag de uppmätta värdena. Om effekten förblir låg letar jag efter parallella bromsar, till exempel för smala socket-backlogs, begränsningar av arbetare i webbservern eller databasanslutningspooler. Det är först när hela kedjan skalas upp som en högre ulimit-server lönar sig ordentligt. På så sätt förhindrar jag partiella optimeringar som i slutändan inte har någon märkbar effekt. Förbättring ta med.

Permanent konfigurering: limits.conf och systemd

För permanenta värden redigerar jag /etc/security/limits.conf och lägger till användar- eller tjänstespecifika värden. Linjer. Jag skiljer mellan mjuka och hårda gränser så att programmen förblir mycket elastiska på kort sikt men ändå har en tydlig överkant. För systemd-tjänster ställer jag också in LimitNOFILE och LimitNPROC, eftersom enhetsfiler annars åsidosätter skaländringar. Efter anpassningen laddar jag om systemd och startar om de berörda tjänsterna så att de nya gränserna träder i kraft. Omstarten är viktig, annars stannar processerna kvar i gamla Ramvärden.

# /etc/security/limits.conf (exempel)
* mjuk ingen fil 65536
* hård nofile 131072
www-data mjuk nproc 4096
www-data hård nproc 8192

# systemd-enhet (t.ex. /etc/systemd/system/nginx.service.d/limits.conf)
[Service]
BegränsaNOFILE=65536
BegränsaNPROC=4096

# Aktivera ändringarna
systemctl daemon-reload
systemctl starta om nginx
Sammanhang Plats Giltighet Typisk
Interaktiv session ulimit i Shell Endast nuvarande shell/childs Snabba tester
Systemomfattande användare /etc/security/limits.conf Inloggning/PAM-baserade processer Slitstark bas
Tjänster (systemd) Enhetens fil: LimitNOFILE/LimitNPROC Endast påverkad tjänst Tydliga gränser för tjänsterna

Korrekt kategorisering av systemomfattande kernel-gränser

Förutom process- och användarrelaterade begränsningar finns det systemövergripande tak som jag alltid kontrollerar. Även en hög nofile är värdelös om kärnan håller den globala filbeskrivartabellen kort. Jag kontrollerar därför fs.file-max (totalt antal möjliga öppna FD) och fs.nr_open (maximalt antal FD som tillåts per process på kärnnivå). Om dessa värden inte stämmer överens når jag gränserna tidigt trots att jag höjer ulimits.

# Kontrollera systemomfattande gränser
cat /proc/sys/fs/file-max
cat /proc/sys/fs/nr_open
cat /proc/sys/fs/file-nr # In-Use, Free, Max

# Tillfälligt höjd (tills omstart)
sysctl fs.file-max=2097152

# Permanent (i /etc/sysctl.d/99-ulimits.conf)
fs.fil-max = 2097152

Jag noterar kaskaden: Processgräns (RLIMIT_NOFILE) ≤ fs.nr_open ≤ fs.file-max (global). Om nofile ställs in via fs.nr_open ignorerar kärnan begäran i tysthet. Jag dimensionerar globalt i enlighet med detta och sedan per tjänst. För att acceptera backlogs skalar jag också net.core.somaxconn och backlog-parametrarna för respektive tjänst, annars kommer inkommande anslutningar att fortsätta svälta i kön.

systemd-enheter: TasksMax, PIDsMax och DefaultLimits

På moderna distributioner begränsar systemd inte bara deskriptorer utan även antalet uppgifter (processer/threads) per tjänst via UppgifterMax. Jag ställer in lämpliga värden för inställningar med hög samtidighet eller använder „infinity“ när jag överför kontrollen till nproc. För användartjänster anvä[email protected]änst respektive system.conf med DefaultLimit*-omkopplare för att höja baslinjevärdena på ett konsekvent sätt.

# Service drop-in för fler uppgifter och FD
mkdir -p /etc/systemd/system/php-fpm.service.d
cat < /etc/systemd/system/php-fpm.service.d/limits.conf
[Tjänst]
LimitNOFILE=131072
LimitNPROC=8192
UppgifterMax=16384
EOF

systemctl daemon-reload
systemctl starta om php-fpm

# Systemomfattande standardvärden (använd försiktigt)
# /etc/systemd/system.conf
StandardbegränsningNOFILE=65536
StandardbegränsningNPROC=4096
DefaultTasksMax=8192

Viktigt: sudo-, su- och SSH-inloggningar ärver begränsningar på olika sätt. För PAM-baserade inloggningar träder /etc/security/limits.conf i kraft, men ofta inte för skal eller cronjobs som inte är inloggade. Jag testar därför alltid hela sökvägen som min tjänst startar via så att det inte finns några tysta avvikelser kvar.

Skalning av webbservrar tillsammans med Ulimits

Med NGINX kopplar jag ihop worker_processes, worker_connections och arbetare_rlimit_nofile med de systemomfattande gränserna. Tumregel: Maximalt antal samtidiga anslutningar ≈ worker_processes × worker_connections, plus reserv för uppströmmar, loggar och interna pipes. Utan en ökad worker_rlimit_nofile kör NGINX tidigt i EMFILE trots höga ulimits.

# NGINX-exempel (utdrag)
arbetare_processer auto;
Händelser {
    arbetare_anslutningar 40960;
    multi_accept på;
    använd epoll;
}
worker_rlimit_nofile 131072;

Med Apache (MPM-händelse) är jag uppmärksam på ServerLimit, ThreadsPerChild och MaxRequestWorkers. Om det totala antalet möjliga anslutningar ökar måste nofile växa parallellt. Annars fylls köerna på trots att CPU och RAM fortfarande har utrymme över. Jag justerar också listen backlogs (t.ex. för NGINX: listen ... backlog=...) och kernel-somaxconn så att nya acceptanser inte tappas bort.

Databaser och cacheminnen: öppna filer i budgeten korrekt

Databaser och cacher har sina egna skruvar: Använd MySQL/MariaDB öppna_filer_begränsning och anslutningsparametrar drar PostgreSQL nytta av anslutningspoolning i förväg, medan Redis översätter antalet klienter direkt till öppna FD: er. Jag ser till att respektive tjänst stöter på en nofile som ligger över deras interna maxvärden. Annars kommer start- eller belastningstoppar att misslyckas även om applikationslagret har skalats.

Ett typiskt mönster: PHP-FPM ökar parallellismen, men DB-servern ligger kvar på gamla FD-gränser och anslutningstak. Jag mäter öppna handtag per komponent och lägger till buffertarna. Detta förhindrar att en tjänst nedströms försämrar den totala prestandan.

Behållare och orkestrering: Gränser i Docker/Kubernetes-sammanhang

Ulimits fungerar i containrar oavsett värdinloggningskontext. Jag ställer in dem uttryckligen vid uppstart eller i orkestreringen och följer även cgroups gränser (PID, minne). I Docker-miljön definierar jag nofile/nproc och eventuellt en PIDs-gräns. Kubernetes kapslar in detta via SecurityContext och RuntimeClass-specifika alternativ; beroende på miljön måste Ulimits ställas in via Container Runtime.

# Docker lokalt
docker run --ulimit nofile=131072:131072 \
           --ulimit nproc=8192:8192 \
           --pids-limit 20000 \
           --namn webapp -p 80:80 myimage:senaste

# Docker Compose (utdrag)
tjänster:
  app:
    image: myimage:senaste
    ulimits:
      nofile:
        mjuk: 65536
        hård: 131072
      nproc: 8192
    pids_begränsning: 20000

Jag verifierar alltid gränser i containern via /proc/self/limits och ser till att värdanpassningar som limits.conf inte automatiskt sprids till containerprocesser. Jag skapar transparens med tydliga, versionskontrollerade deploy-parametrar för varje tjänst.

Felsökning i praktiken: EMFILE, EAGAIN och långsamma spawns

För reproducerbara analyser använder jag strace och söker efter EMFILE („Too many open files“) eller EAGAIN („Resource temporarily unavailable“) för accept(), open(), pipe() eller clone(). Jag räknar regelbundet FDs per process och jämför dem med de inställda gränserna. Läckor i filhandtag (t.ex. bortglömda Close()-anrop) kan upptäckas snabbare på det här sättet.

# Bestäm öppna FD:er per process
ls -l /proc//fd | wc -l

# Systemövergripande användning med en överblick
cat /proc/sys/fs/file-nr

# trimma strace för FD-fel
strace -fp  -e trace=desc,process,nätverk 2>&1 | grep -E 'EMFILE|EAGAIN'

Startproblem som orsakas av för snäva nproc-gränser avslöjas av långsam start, „can't fork“-meddelanden eller ofullständiga worker pools. Jag korrelerar dessa händelser med spawn-strategier (pre-fork, dynamisk, on-demand) så att justeringarna inte bara lindrar symptomen utan också stödjer arkitekturen.

Automatisering, tester och rollback

Jag håller gränsändringar reproducerbara: Jag underhåller drop-ins för systemd, sysctl.d-filer och servicemallar deklarativt. Varje ändring får en biljett, uppmätta värden före/efter och en tydlig rollback. I staging simulerar jag användning med verktyg som wrk, vegeta eller k6 och är uppmärksam på P95/P99-latens, felfrekvenser och kötider. Endast tillförlitliga resultat motiverar en expansion till produktion.

# Skapa drop-in-byggnadsställningar för flera tjänster
for s in nginx php-fpm redis; do
  mkdir -p /etc/systemd/system/$s.service.d
  cat < /etc/systemd/system/$s.service.d/limits.conf
[Tjänst]
LimitNOFILE=65536
LimitNPROC=4096
UppgifterMax=8192
EOF
gjort
systemctl daemon-reload
systemctl starta om nginx php-fpm redis

För kampanjer höjer jag gränserna på ett kontrollerat sätt, noterar start- och sluttid och jämför med trafikkurvorna. Efter toppen återinför jag de mer konservativa värdena för att minimera attackytan och frigöra oanvända kärnresurser.

Risk för förvirring: Ulimits vs. watcher/kernel-parametrar

Inte alla „för många filer“-fel orsakas av nofile. Filsystemövervakare (inotify) har sina egna gränser (t.ex. max_user_watches), som snabbt nås med många små filer eller utvecklingsstackar. vm.max_map_count (t.ex. för sökmotorer) eller net.ip_local_port_range (efemära portar) kan också fungera som begränsande faktorer. Jag kontrollerar sådana parametrar separat så att jag inte vrider på fel knapp.

Dimensionera PHP-FPM korrekt: Processer, köer, gränser

Med PHP-FPM samordnar jag pm.max_children, pm.max_requests och ulimit-gränserna så att processstart, minne och Anslutningar förblir balanserad. När FPM når sin övre gräns hamnar förfrågningar i en kö; detta är avsiktligt, men är bara meningsfullt om webbservern hanterar timeouts och backoff på rätt sätt. Jag mäter den genomsnittliga exekveringstiden och använder detta för att härleda ett genomförbart processnummer som inte överbelastar CPU och RAM. Jag justerar också filbeskrivningsgränsen så att parallella uppströmsanslutningar och loggskrivare har tillräckligt med utrymme att manövrera. Om du vill gräva djupare hittar du praktiska justeringsskruvar för PHP-FPM-processer och bestämmer den bästa Balans.

Jag kontrollerar också hur många databasanslutningar per FPM-arbetare som är öppna samtidigt, så att anslutningspooler inte blir nålöra bli. Ett för stort antal arbetare ökar RAM-trycket och kontextbytena, ett för litet antal stagnerar genomströmningen. Det är därför jag skalar i etapper, observerar latens P50/P95 och fel och justerar i små steg. Först när kötider, CPU-belastning och felfrekvenser är i balans fixar jag värdena permanent. På så sätt blir stacken mer förutsägbar och förblir stabil under belastning. lyhörd.

Övervakning och kapacitetsplanering

Jag backar upp varje steg med mätdata, annars har ändringar av gränser bara en kände. Mätvärden som öppna filer per process, körande och väntande förfrågningar, CPU-sekunder per arbetare och RSS-minne hjälper mig att kategorisera dem. Loggar visar mig när de hårda gränserna träder i kraft och om tjänster vägrar anslutningar till följd av detta. Dashboards med P95/P99-latenstider avslöjar flaskhalsar som döljer genomsnittliga värden. Av allt detta kan jag härleda en praktisk processlimit för hosting som jämnar ut utnyttjandet och minskar köerna. förkortad.

Jag håller alltid reserverat headroom fritt så att korta toppar inte orsakar några störningar. producera. Om du är på väg mot månatliga toppar eller kampanjtoppar höjer jag gränserna en till två veckor i förväg och genomför verkliga trafiktester. Sedan återaktiverar jag snävare gränser för att minimera resurser och attackytor. Den här rytmen skyddar plattformen ekonomiskt och minskar samtidigt risken för störningar. Här lönar sig planering flera gånger om, eftersom proaktiva åtgärder kan minimera servicefönster och Drifttid säker

Inodes och antal filer: tysta gränser med stor effekt

Förutom nofile begränsar filsystemet antalet filer som kan Inodes och därmed det möjliga antalet filer, oavsett hur mycket minne som används. Webbprojekt med många små cachefiler eller sessionsfiler hamnar snabbt i kläm här. Jag kontrollerar df -i, rensar upp gamla artefakter, rotationsrester och temp-kataloger och justerar filsystemets struktur om det behövs. Genom att konsolidera CMS-cacher eller placera dem i minnet minskar belastningen på inoder och IO-utskrifter samtidigt. Jag inkluderar detaljer, bakgrundsinformation och strategier i min guide till Förståelse av inoder som har utvecklat ämnet för värdskapspraxis låser upp.

Om det är ont om inoder kan det vara bra med en högre gräns för filbeskrivare ingenting. Jag ser därför till att loggen roterar tydligt, begränsar antalet debuggar och flyttar sällan använda artefakter till arkivlagring. Build pipelines bör också städa upp artefakter så att distributioner inte gradvis äter upp inode-reserverna. En sådan hygien håller gränserna stabila på lång sikt och sparar mycket tid vid felsökning. En ren vy över inoderna förhindrar oväntade fel. Stilleståndstider.

Riktad korrigering av typiska felmeddelanden

Meddelandet „för många öppna filer“ innebär nästan alltid att det inte finns tillräckligt med filer. ingen fil. Jag höjer gränsen tillfälligt i skalet, bekräftar effekten och justerar sedan värdena i limits.conf och systemd. Om „resource temporarily unavailable“ visas vid spawning beror det ofta på nproc-gränsen, som jag ökar för att matcha worker-arkitekturen. Om PHP-skript verkar hänga sig kontrollerar jag också memory_limit, max_execution_time och de CPU-sekunder som värdkonfigurationen beviljar för CGI/FPM. Jag eliminerar flaskhalsar längs kedjan och förhindrar att en switch på ett ställe bara genererar nya Bromsar genereras vid en annan position.

Om dessa fel uppstår sporadiskt arbetar jag med metriska korrelationer för att fastställa tids- och belastningssituationen. fånga. Toppar i samtidiga anslutningar, ökade backend-fel eller långa DNS-uppslagningar ger bra indikationer. Jag kontrollerar sedan gränserna för de berörda tjänsterna separat för att identifiera effektiva värden. Om konfigurationen är korrekt men felen kvarstår letar jag efter läckor i filhandtag, defekta watchers eller onödiga öppna socklar. Steg-för-steg-begränsning sparar tid och minskar Risk nya misslyckanden.

En smart balans mellan prestanda och säkerhet

Jag höjer aldrig gränser utan gränser, eftersom alltför vida öppningar är öppna för angrepp. förstora. Brute force- eller DoS-scenarier drar nytta av gränser som är för höga om inga andra kontroller finns på plats. Det är därför jag kombinerar gränser med hastighetsbegränsning, backoff-strategier och tydliga timeouts i webbservern och uppströms. Jag sätter hårda övre gränser så att legitima toppar kan inträffa men att missbruk inte kan eskalera. På så sätt säkerställer jag tillgängligheten utan att äventyra Kontroll ...att förlora.

I vardagen lönar det sig med ett graderat koncept: lite utrymme för toppar, mätbar effekt och regelbunden Recensioner. Om du känner till driftsättningar, trafikkampanjer och säsongsbelastningar kan du planera gränser proaktivt. Jag dokumenterar varje ändring med datum, orsak och uppmätta värden så att senare analyser inte lämnas i mörkret. Den här katalogen påskyndar framtida beslut och förhindrar dubbelarbete. Prestanda och säkerhet gynnas eftersom besluten baseras på Uppgifter baserad.

Utvärdering av hostingpaket: vad ska jag tänka på?

Jag kontrollerar värderbjudanden inte bara för CPU och RAM, utan uttryckligen för Ulimits för processer, deskriptorer och CPU-sekunder. Specifika detaljer om nproc-, nofile- och, om tillämpligt, inode-kvoter hjälper mig att korrekt uppskatta kapaciteten. För butiker och API:er kräver jag transparenta åtaganden för PHP FPM-processer, CPU-budgetar och gränsökningar på begäran. VPS eller dedikerade miljöer ger mig suveränitet, men förnuftiga standardvärden för drift räknas också här. Tydliga siffror förhindrar besvikelser och håller migreringarna på rätt spår okomplicerad.

Planera Processgräns (nproc) Filer (nofile) RAM/Process CPU-tid Lämplighet
Nybörjare 32-64 4096-8192 256–512 MB 5-600 s Små anläggningar
Företag 64-128 16384-65536 512–1024 MB 600-3600 s Butiker, API:er
VPS/Dedikerad Konfigurerbar Konfigurerbar Enligt behov Enligt behov Hög belastning

Kortfattat sammanfattat

Jag mäter först det verkliga utnyttjandet, sedan lyfter jag Gränser i etapper och kontrollera effekten på latens, felfrekvens och genomströmning. De viktigaste växlarna är nofile för filer/sockets och nproc för processer/trådar, kompletterat med fsize, stack och cpu. Jag ställer in permanenta värden konsekvent i limits.conf och i systemd-enheter så att tjänsterna har identiska ramvillkor. För PHP-FPM synkroniserar jag noggrant processnummer, minne och köer med filbeskrivningsgränsen. Övervakning, inode-hygien och förnuftiga övre gränser håller värdkonfigurationer under belastning Pålitlig och lyhörd.

Aktuella artiklar