Een legitieme file descriptorpiek stijgt met actieve verbindingen of open werk en daalt nadat dat werk is beëindigd. Een descriptorlek houdt bronnen open nadat de applicatie ze niet meer nodig heeft, waardoor de telling een stijgende basislijn ontwikkelt die uiteindelijk de limiet van het proces, de service, container of het systeem bereikt.
Het onderscheid is belangrijk omdat beide situaties dezelfde uiteindelijke fout kunnen veroorzaken. Het verhogen van de descriptorlimiet kan juiste capaciteitsplanning zijn voor een drukke reverse proxy, maar het vertraagt alleen de fout wanneer sockets, bestanden, pijpen of watchers nooit worden vrijgegeven.
Welk patroon definieert een legitieme descriptorpiek?
Een normale piek volgt de gelijktijdigheid van de werklast. legitieme pieken volgen de actieve werklast, en daalt vervolgens als verzoeken zijn voltooid, sockets sluiten, workers stoppen en tijdelijke bestanden worden vrijgegeven.
De basislijn voor en na het evenement blijft vergelijkbaar. Een backup-venster, mediastream-uitbarsting of veel gelijktijdige webclients kan een hoge telling veroorzaken zonder gebroken resourcebeheer aan te geven.
De piek moet ook correleren met voltooid werk. Als twee keer zoveel clients ongeveer twee keer zoveel actieve sockets creëren en de telling daarna terugkeert, toont het systeem een eindige capaciteitsvraag in plaats van een persistent verlies.
Welk patroon onthult een descriptorlek?
Een lek verandert de basislijn in plaats van alleen het maximum. lekken houden descriptors open nadat het werk is beëindigd, dus elke verzoekcyclus, reconnect, herlaad of mislukte operatie laat wat bronnen achter.
De telling kan langzaam genoeg groeien om onopgemerkt te blijven tijdens korte tests. Een service kan er uren of dagen gezond uitzien totdat de resterende descriptorruimte te klein wordt voor de volgende verbinding of het openen van een bestand.
Het opnieuw starten van het proces zet de telling terug omdat de kernel zijn descriptors sluit, maar dat herstel bewijst niet dat het onderliggende probleem is opgelost. Dezelfde helling verschijnt weer zodra de service weer werk begint te verwerken.
Waarom produceren sockets, bestanden en watchers verschillende grafieken?
Linux gebruikt descriptors voor verschillende I/O-bron types, en verschillende bron types creëren verschillende groeipatronen. Elk type heeft daarom een andere werkbelastingverklaring nodig.
Client-sockets zouden gelijktijdige sessies moeten volgen. Log- of mediabestanden zouden actieve handles moeten volgen. Pipes kunnen kindprocessen volgen, terwijl watcher-gerelateerde descriptors stabiel kunnen blijven, ook al groeit het aantal bewaakte paden via een aparte kernel-limiet.
Het classificeren van descriptors op doel is nuttiger dan het lezen van één totaal. Honderden verwachte sockets tijdens een verkeerspiek verschillen van gestaag groeiende verwijderde logbestanden of herhaalde verbindingen met één onbeschikbare afhankelijkheid.
Waarom vertraagt het verhogen van de limiet een lek in plaats van het te verhelpen?
De fout `Te veel open bestanden` treedt alleen op wanneer de groei een plafond bereikt. hogere limieten stellen het lek alleen uit.
Een hogere limiet verlengt de tijd tussen herstart en falen. Dat kan de dienst tijdens een korte observatieperiode gerepareerd doen lijken terwijl het lek meer kernelgeheugen en meer netwerk- of opslagstatus kan verbruiken.
Capaciteitsveranderingen zouden daarom moeten volgen op bewijs dat descriptors normaal worden vrijgegeven. Anders is het nieuwe plafond een grotere faalgrens in plaats van een stabiliteitsverbetering.
Welke metingen onderscheiden capaciteit van levenscyclusfalen?
De totale telling is slechts het eerste signaal. leeftijd en type descriptor onthullen de hoofdoorzaak. Volg telling, doeltype, open duur, aanmaaksnelheid, sluitingssnelheid, verkeer en voltooide verzoeken op dezelfde tijdlijn.
Bij een piek zou de descriptor telling moeten meebewegen met de gelijktijdigheid en uiteindelijk terugkeren. Bij een lek stijgen de open duur en de basislijn terwijl de hoeveelheid actieve nuttige arbeid niet evenredig toeneemt.
Vergelijk meerdere cycli in plaats van één momentopname. Een enkele hoge telling kan niet laten zien of het proces zich dicht bij de top van een normale golf bevindt of halverwege een aanhoudende opwaartse trend.
Wanneer is een hogere descriptorlimiet eigenlijk gerechtvaardigd?
hergebruik van verbindingen verlaagt de legitieme vraag naar descriptors. Verwijder voordat je limieten verhoogt vermijdbare verbindingwisselingen, beperk pools en bevestig dat bronnen sluiten wanneer het werk is voltooid.
Een hogere limiet is gerechtvaardigd wanneer geteste legitieme gelijktijdigheid de huidige effectieve servicelimiet nadert, descriptorenaantallen terugkeren naar de basislijn, en geheugen, socketbuffers, backend-pools en herstelgedrag de hogere vraag kunnen ondersteunen.
Stel waarschuwingen in onder het harde faalpunt en behoud administratieve speling. Het doel is niet om de limiet onbereikbaar te maken; het is om normale pieken binnen een gemeten werkbereik te houden en abnormale groei vroeg te detecteren.
| Waargenomen patroon | Waarschijnlijke betekenis | Volgende controle |
|---|---|---|
| Aantal stijgt en daalt met verkeer | Legitieme gelijktijdigheidspiek | Capaciteitstest de servicelimiet |
| Basislijn stijgt na elke cyclus | Descriptorlek | Classificeer niet-gesloten bronnen op type en leeftijd |
| Herstart reset het aantal, daarna keert de helling terug | Levenscyclusdefect blijft bestaan | Volg open- en sluitpaden |
| Shelllimiet verschilt van het punt van servicefalen | Mismatch tussen systemd- of containerlimiet | Inspecteer de limieten van het lopende proces |
Veelgestelde vragen
Kan een bestanddescriptorlek optreden bij laag CPU-gebruik?
Ja. Een proces kan sockets of bestanden vasthouden terwijl het wacht en bijna geen CPU verbruiken totdat een nieuwe toewijzing faalt.
Bewijst TIME_WAIT een descriptorlek?
Nee. TIME_WAIT is een TCP-kernelstatus nadat een socket is gesloten. Een descriptorlek betekent dat de applicatie nog steeds een open descriptor vasthoudt.
Waarom lijkt het herstarten van de service het probleem op te lossen?
Procesafsluiting sluit zijn descriptors en herstelt de speling. Als de applicatielevenscyclus gebroken blijft, begint het aantal weer te groeien.
Moeten waarschuwingen een vast descriptorenaantal gebruiken?
Gebruik zowel het percentage van de effectieve limiet als het groeigedrag. Een stabiel hoog aantal kan normaal zijn, terwijl een lager maar gestaag stijgend aantal gevaarlijk kan zijn.
Laatste conclusie
Legitieme descriptorpieken volgen actief werk en keren terug naar een stabiele basislijn. Lekken behouden bronnen nadat het werk is beëindigd, waardoor een stijgende ondergrens ontstaat die uiteindelijk een eindige limiet overschrijdt. Diagnoseer de curve, het type bron en de leeftijd van de descriptor voordat je limieten verhoogt, want extra speling ondersteunt echte capaciteit alleen wanneer de levenscyclus al correct is.
Tech & AI HUB
Meer om te lezen

Runtime-status versus persistente status in Home Assistant: wat moet een herstart overleven?
Home Assistant bewaart niet elke actuele waarde; configuratie, registers, geselecteerde herstelde statussen, geschiedenis en implementatiegegevens spelen verschillende rollen bij het herstarten.

Hoe verifieert Home Assistant lokale en externe sessies?
Lokale en externe Home Assistant-sessies gebruiken hetzelfde identiteitsmodel aan de serverzijde; externe toegang verandert de route en de TLS-grens, niet de kern van de...

Waarom kunnen geschiedenisquery's van Home Assistant trager worden naarmate de Recorder-gegevens groeien?
Groei van de recorder kan de kosten van geschiedenisquery's verhogen wanneer het aangevraagde bereik meer rijen omvat, cachemissers toenemen of opslag- en indexbewerkingen trager...

