Naar de inhoud
Floris Knol
NLEN

Een bewaking die alleen kan stoppen, maakt van een korte storm een lange stilstand

Een potloodtekening van een kleine robot die een zware kar met een stopknop bevriest, terwijl een klok op de achtergrond ver is doorgelopen en niemand de knop weer indrukt.

Mijn agents draaien dag en nacht op een eigen server. Een storm van een paar minuten kostte me ruim twee uur stilstand. Niet door de storm, maar door de bewaking.

Wat een forkstorm is

Elk programma doet zijn werk via processen. Een forkstorm is een server die zo snel nieuwe processen start en weer stopt, dat hij nergens anders meer aan toekomt. Geheugen en rekenkracht lijken vrij, en toch is alles traag.

Normaal start mijn server ongeveer 70 processen per seconde. In een storm zag ik er meer dan 900, en bij een eerdere storm meer dan 1.200. Bij mensen komt dit zelden voor. Bij agents wel: een agent die een toets draait, doet dat met tientallen kleine opdrachten tegelijk, en 's nachts werken er meerdere agents naast elkaar zonder dat ze van elkaar weten.

Wat er misging

Ik heb een bewaking die dit ziet, de veroorzaker aanwijst en die bevriest. Dat deed hij ook. Maar bevriezen is een ingreep die iemand ook weer ongedaan moet maken. Het was avond, er keek niemand, en het hart van het werk bleef bevroren. Elke agent stond stil. De storm zelf duurde minuten. De stilstand duurde ruim twee uur.

Een bewaking die alleen kan stoppen, verandert een korte storm in een lange stilstand.

Wat ik veranderde

  • Na vijf rustige minuten ontdooit de bewaking zelf.
  • Het hart van het werk blijft nooit langer dan tien minuten bevroren, ook niet als de storm doorgaat.
  • Komt de storm snel terug bij dezelfde veroorzaker, dan stop ik alleen die, niet het hart.

Ik test dit echt: de toets start zelf een fork-lus, eist dat die bevroren wordt en daarna weer aan gaat.

Waarom geen harde grens

De simpelste oplossing is een plafond op het aantal processen per seconde. Dat heb ik bewust niet gedaan. De toetsen die ik elk half uur draai, halen soms ruim 3.000 per seconde, en dat is bedoeld werk. Een harde grens knijpt dat af, of is zo ruim dat hij een echte storm niet vangt. Ik wil de server maximaal benutten.

Wat wel werkt: onderscheid maken tussen bedoeld zwaar werk en onbedoeld zwaar werk, en elke ingreep omkeerbaar en tijdelijk maken.

Wat je hieruit meeneemt

  1. Meet het ritme van je server, niet alleen de belasting. Eén regel per minuut is genoeg.
  2. Laat een agent zijn werk bundelen: niet één proces per stukje werk, en niet alles tegelijk.
  3. Een bewaking die kan stoppen, moet ook kunnen herstarten.
  4. Geef elke ingreep een tijdslimiet. "Tot een mens kijkt" is geen limiet.

Dit is hetzelfde patroon als in Het autonome AI-bedrijf: een rol met een bevoegdheid, een beschermende maat en een mens als laatste stap. Een mens die niet altijd kijkt, vraagt om een systeem dat zichzelf weer loslaat.

Alle stukken

Zie ook