En legitim filbeskrivartopp ökar med aktiva anslutningar eller öppet arbete och sjunker efter att arbetet avslutats. En deskriptorläcka håller resurser öppna efter att applikationen inte längre behöver dem, så räkningen utvecklar en stigande baslinje som till slut når process-, tjänst-, container- eller systemgränsen.
Skillnaden är viktig eftersom båda tillstånden kan ge samma slutliga fel. Att höja deskriptorsgränsen kan vara korrekt kapacitetsplanering för en upptagen omvänd proxy, men det fördröjer bara fel när sockets, filer, rör eller watchers aldrig frigörs.
Vilket mönster definierar en legitim deskriptortopp?
En normal topp följer arbetsbelastningens samtidighet. legitima toppar följer aktiv arbetsbelastning, och sjunker sedan när förfrågningar avslutas, sockets stängs, arbetare avslutar och temporära filer frigörs.
Baslinjen före och efter händelsen förblir liknande. Ett backupfönster, ett medieströmsutbrott eller många samtidiga webbklienter kan ge en hög räkning utan att indikera bristfällig resurs-hantering.
Toppen bör också korrelera med avslutat arbete. Om dubbelt så många klienter skapar ungefär dubbelt så många aktiva sockets och räkningen återgår efteråt, visar systemet en begränsad kapacitetsbelastning snarare än en bestående förlust.
Vilket mönster avslöjar en deskriptorläcka?
En läcka ändrar baslinjen istället för bara maxvärdet. läckor håller deskriptorer öppna efter att arbetet är klart, så varje förfrågningscykel, återanslutning, omladdning eller misslyckad operation lämnar kvar resurser.
Räkningen kan växa så långsamt att det döljs under korta tester. En tjänst kan se frisk ut i timmar eller dagar tills den återstående deskriptorramen blir för liten för nästa anslutning eller filöppning.
Att starta om processen återställer räkningen eftersom kärnan stänger sina deskriptorer, men den återhämtningen bevisar inte att det underliggande problemet är löst. Samma lutning återkommer efter att tjänsten börjar hantera arbete igen.
Varför ger sockets, filer och watchers olika kurvor?
Linux använder deskriptorer för flera typer av I/O-resurser, och olika resurstyper skapar olika tillväxtmönster. Varje typ behöver därför en egen förklaring av arbetsbelastningen.
Klientsockets bör följa samtidiga sessioner. Logg- eller mediefiler bör följa aktiva handtag. Pipes kan följa barnprocesser, medan watcher-relaterade deskriptorer kan förbli stabila även om antalet bevakade sökvägar växer genom en separat kärngräns.
Att klassificera deskriptorer efter mål är mer användbart än att läsa ett enda totalt värde. Hundratals förväntade sockets under en trafikspik skiljer sig från stadigt växande borttagna loggfiler eller upprepade anslutningar till en otillgänglig beroende.
Varför fördröjer en höjning av gränsen en läcka istället för att åtgärda den?
Felet `Too many open files` uppstår endast när tillväxten når en gräns. högre gränser skjuter bara upp läckans uttömning.
En högre gräns förlänger tiden mellan omstart och fel. Det kan få tjänsten att verka reparerad under ett kort observationsfönster samtidigt som läckan tillåts konsumera mer kärnminne och mer nätverks- eller lagringstillstånd.
Kapacitetsförändringar bör därför följa bevis på att deskriptorer frigörs normalt. Annars är den nya gränsen ett större felområde snarare än en stabilitetsförbättring.
Vilka mätningar skiljer kapacitet från livscykelfel?
Det totala antalet är bara den första signalen. deskriptorns ålder och typ avslöjar grundorsaken. Följ antal, måltyp, öppettid, skapandehastighet, stängningshastighet, trafik och slutförda förfrågningar på samma tidslinje.
För en topp bör antalet deskriptorer följa samtidigheten och så småningom återgå. Vid en läcka ökar öppettiden och baslinjen medan mängden aktivt användbart arbete inte ökar proportionellt.
Jämför flera cykler istället för en enda ögonblicksbild. Ett enskilt högt antal kan inte visa om processen är nära toppen av en normal våg eller mitt i en ihållande uppåtgående trend.
När är en högre descriptor-gräns faktiskt motiverad?
återanvändning av anslutningar minskar legitim descriptor-efterfrågan. Innan gränser höjs, ta bort undvikbar anslutningsomsättning, begränsa pooler och bekräfta att resurser stängs när arbetet är klart.
En större gräns är motiverad när testad legitim samtidighet närmar sig den nuvarande effektiva tjänstegränsen, descriptor-antal återgår till baslinjen och minne, socketbuffertar, backend-pooler och återhämtningsbeteende kan stödja den högre efterfrågan.
Sätt varningar under den hårda felpunkten och bevara administrativ marginal. Målet är inte att göra gränsen oåtkomlig; det är att hålla normala toppar inom ett mätt driftintervall samtidigt som onormal tillväxt upptäcks tidigt.
| Observerat mönster | Trolig betydelse | Nästa kontroll |
|---|---|---|
| Antalet stiger och sjunker med trafiken | Legitim samtidighetstopp | Kapacitetstesta tjänstens gräns |
| Baslinjen stiger efter varje cykel | Descriptor-läcka | Klassificera oavslutade resurser efter typ och ålder |
| Omstart återställer antalet, sedan återvänder lutningen | Livscykelfel kvarstår | Spåra öppnings- och stängningsvägar |
| Shell-gräns skiljer sig från tjänstens felpunkt | systemd- eller containergräns mismatch | Inspektera de körande processernas gränser |
Vanliga frågor
Kan en fil-descriptor-läcka uppstå vid låg CPU-användning?
Ja. En process kan behålla sockets eller filer medan den väntar och förbruka nästan ingen CPU tills en ny allokering misslyckas.
Bevisar TIME_WAIT en descriptor-läcka?
Nej. TIME_WAIT är TCP-kernelns tillstånd efter att en socket stängts. En descriptor-läcka betyder att applikationen fortfarande håller en öppen descriptor.
Varför verkar det som att omstart av tjänsten löser problemet?
Processavslutning stänger sina descriptors och återställer marginalen. Om applikationens livscykel förblir bruten börjar antalet växa igen.
Bör varningar använda ett fast descriptor-antal?
Använd både procentandel av den effektiva gränsen och tillväxtbeteendet. Ett stabilt högt antal kan vara normalt, medan ett lägre men stadigt stigande antal kan vara farligt.
Slutlig slutsats
Legitima descriptor-toppar följer aktivt arbete och återgår till en stabil baslinje. Läckor behåller resurser efter att arbetet avslutats, vilket skapar en stigande golvnivå som så småningom överskrider en ändlig gräns. Diagnostisera kurvan, resurstypen och descriptor-åldern innan du höjer gränserna, eftersom extra marginal endast stöder verklig kapacitet när livscykeln redan är korrekt.
Teknik- och AI-hubb
Mer att läsa

Tillstånd under körning kontra beständigt tillstånd i Home Assistant: Vad måste överleva en omstart?
Home Assistant sparar inte varje aktuellt värde permanent; konfiguration, register, utvalda återställda tillstånd, historik och distributionsdata har olika roller vid omstart.

Hur autentiserar Home Assistant lokala och fjärranslutna sessioner?
Lokala och fjärranslutna Home Assistant-sessioner använder samma identitetsmodell på serversidan; fjärråtkomst ändrar routningen och TLS-gränsen, men inte det grundläggande tokenflödet.

Varför kan historikfrågor i Home Assistant bli långsammare när Recorder-data växer?
Ökad loggstorlek kan höja kostnaden för historikfrågor när det begärda intervallet omfattar fler rader, cachemissar ökar eller arbete med lagring och index blir långsammare.

