Debian 12 op een VPS met weinig RAM: Hoe MySQL OOM-crashes te verminderen

Je kunt het risico verkleinen dat de OOM-killer MySQL laat stoppen op een Debian 12 VPS met weinig RAM door de oorzaak te achterhalen, het geheugen over alle services te verdelen, de gelijktijdige toegang tot databases te beperken en swapgeheugen beschikbaar te stellen waar de VPS dit toelaat. Een kleinere InnoDB-bufferpool alleen is geen volledige oplossing. Noch swapgeheugen, noch een OOM-beveiligingsinstelling garandeert dat een te grote workload blijft draaien.

Deze handleiding is op 9 oktober 2026 samengesteld met behulp van Debian 12 “bookworm”, Linux 6.1 en de documentatie van Oracle MySQL 8.0/8.4. De onderstaande instellingen dienen als illustratief uitgangspunt en zijn geen benchmarkresultaten of een universele configuratie. Maak een back-up van de database en configuratie voordat u wijzigingen aanbrengt en plan herstarts van de database in wanneer downtime acceptabel is.

1. Identificeer de server voordat u de MySQL-instellingen kopieert.

Geverifieerd: Het default-mysql-server-pakket van Debian 12 is afhankelijk van MariaDB. Een VPS die wordt beschreven als draaiend op "MySQL" kan in werkelijkheid MariaDB draaien, terwijl een andere Oracle MySQL uit een aparte repository of container kan hebben.

mysql --version
systemctl status mysql mariadb

De eerste opdracht identificeert de client, niet per se de draaiende server. Maak verbinding met uw databasebeheerdersaccount en voer de volgende opdracht uit:

SELECT VERSION(), @@version_comment;

Gebruik uw bestaande authenticatiemethode; Debian MariaDB-installaties staan ​​mogelijk lokaal beheer toe met sudo mysql. Noteer de serverversie en de daadwerkelijke servicenaam. Latere serviceopdrachten gebruiken mysql.service; vervang mariadb.servicewaar nodig. Voeg geen Oracle-specifieke variabelen toe aan de MariaDB-configuratie.

Voorbeelden van terminalopdrachten om de databaseclientversie en de servicestatus van MySQL of MariaDB te controleren.
Controleer de client- en servicenamen en vraag vervolgens de actieve server op om het product en de versie te achterhalen.

2. Bevestig dat de afsluiting een OOM-gebeurtenis was.

Veelvoorkomend misverstand: Elke onverklaarbare herstart van de database is een OOM-fout (Out of Memory). Authenticatie-fouten, schijfuitputting, ongeldige configuratie, crashes en herstarts door de beheerder kunnen de service echter ook onderbreken.

sudo journalctl -k -b
sudo journalctl -u mysql.service --since today
sudo journalctl -u systemd-oomd --since today

Zoek rond het tijdstip van het incident naar kernelberichten die een geheugenprobleem en het beëindigde proces aangeven, en vergelijk deze berichten met het servicelogboek. Controleer ook het foutenlogboek van de database als uw pakket dit naar een bestand schrijft in plaats van naar het logboek. Als het incident vóór een herstart plaatsvond, controleer dan de vorige opstart, journalctl -k -b -1indien er bewaarde logboeken beschikbaar zijn. Ontbrekende historische logboeken zorgen ervoor dat de oorzaak onbevestigd blijft.

Een gebruikersruimtebeheerder kan ook workloads beëindigen. De handleiding van Debian voor systemd-oomd beschrijft hoe ingegrepen kan worden op basis van geheugendruk voordat een kernel-OOM-gebeurtenis optreedt. Controleer of het geïnstalleerd en actief is, in plaats van ervan uit te gaan dat elke Debian VPS het gebruikt.

Controleer ook de limieten van systemd:

systemctl show mysql.service \
  -p ControlGroup -p MemoryCurrent -p MemoryHigh \
  -p MemoryMax -p MemorySwapMax

Gebruik op een cgroup v2-systeem het gerapporteerde ControlGroup-pad om de waarden voor memory.events, memory.maxen memory.swap.maxonder te lezen /sys/fs/cgroup. Controleer ook de bovenliggende cgroups. De Linux cgroup v2-documentatie legt deze tellers en limieten uit. Een cgroup kan zijn toegestane geheugenlimiet overschrijden, zelfs als de host nog capaciteit heeft. Een oom_killteller registreert kills, maar moet worden geïnterpreteerd in combinatie met limieten en logboeken om de oorzaak vast te stellen.

Voorbeelden van terminalopdrachten voor het inspecteren van kernel- en databaseservicelogboeken.
Controleer de logboeken van het incident voordat u een databaseonderbreking toeschrijft aan een geheugenprobleem (OOM).

3. Meet de volledige VPS, niet alleen de bufferpool.

free -h
ps -eo pid,comm,rss --sort=-rss
vmstat 1

Verzamel observaties tijdens normaal verkeer en de taken die verband houden met storingen. freeFocus daarbij op het beschikbare geheugen, niet alleen op de kolom 'vrij'. De handleiding van Debian beschrijft beschikbaar geheugen als een schatting van wat kan worden gebruikt zonder swapping. RSS-waarden in de proceslijst zijn in KiB; het optellen ervan kan leiden tot dubbeltelling van gedeeld geheugen.

Geverifieerd: MySQL wijst geheugen toe buiten de bufferpool van InnoDB, inclusief geheugen voor verbindingen en query's. De MySQL-referentie voor geheugengebruik documenteert deze componenten. Beschouw een formule gebaseerd op geconfigureerde buffers als een planningsschatting, niet als een precieze bovengrens.

Actie: Reserveer capaciteit voor de kernel, webworkers, monitoring, back-ups en tijdelijke databasetaken. Het bekende advies om het meeste RAM-geheugen aan InnoDB toe te wijzen is zonder aanpassing niet geschikt voor een gedeelde VPS. Als PHP-workers of een buildtaak de beschikbare ruimte opslokken, optimaliseer of verplaats die workload dan in plaats van MySQL herhaaldelijk te verkleinen.

Voorbeelden van terminalopdrachten voor het monitoren van beschikbaar geheugen, proces-RSS en vmstat.
Meet alle concurrerende processen en de geheugendruk tijdens representatieve activiteit.

4. Voeg swapgeheugen toe als buffer, niet als vervanging voor RAM.

Contextafhankelijk: Swap kan een deel van de tijdelijke druk op anoniem geheugen opvangen, maar langdurig swappen kan query's te traag maken. Een containergebaseerde VPS kan swap beperken, en een service MemorySwapMaxkan het gebruik ervan zelfs blokkeren als de host wel swap ondersteunt.

swapon --show
free -h
df -h /
findmnt -no FSTYPE /

Als er geen swap-bestand aanwezig is, de provider dit toestaat en er voldoende schijfruimte beschikbaar is, kunt u met de volgende stappen een swap-bestand van 1 GiB aanmaken op een geschikt lokaal bestandssysteem, zoals ext4. Voer deze stappen niet uit als /swapfile al bestaat. Controleer eerst de specifieke vereisten van het bestandssysteem; Btrfs vereist een geschikte swap-file-configuratie zonder copy-on-write.

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon --show

/etc/fstabVoeg deze vermelding pas eenmalig toe aan : nadat de activering is gelukt .

/swapfile none swap sw 0 0

De Debian swapon-handleiding beschrijft de beperkingen voor swapbestanden. Als de activering door de VPS-omgeving wordt geweigerd, vraag dan de provider naar de ondersteunde swapgrootte of verhoog het geheugen van het abonnement; ga niet door met een mislukte installatie.

Kopieer de tweak "swappiness op nul zetten" niet als bescherming tegen geheugenproblemen. De kernel-VM-documentatie definieert swappiness als een voorkeur voor de kosten van geheugenherstel. Het creëert geen geheugen en legt geen geheugenlimiet op voor de database. Laat het in eerste instantie ongewijzigd en meet het gedrag.

Voorbeelden van terminalopdrachten om de actieve swap, de schijfruimte en het type rootbestandssysteem te controleren.
Controleer de swap- en bestandssysteemcondities voordat u besluit of een swapbestand geschikt is.

5. Stel een bescheiden basislijn voor de database vast.

Ter illustratie, neem een ​​VPS van 1 GiB met een kleine InnoDB-workload en een paar applicatieworkers. De volgende waarden zijn een mogelijke indicatie, maar geen bewijs dat deze workload geschikt is:

[mysqld]
innodb_buffer_pool_size=128M
max_connections=20
tmp_table_size=16M
max_heap_table_size=16M

Plaats serveropties in een configuratiebestand dat daadwerkelijk door uw installatie wordt meegeleverd. Een Oracle MySQL-pakket kan bijvoorbeeld een bestand bevatten /etc/mysql/mysql.conf.d/; Debian MariaDB gebruikt doorgaans /etc/mysql/mariadb.conf.d/een ander bestand. Controleer de bestaande include-instructies en maak een back-up. De documentatie van MySQL over optiebestanden legt serveroptiegroepen en bestandsverwerking uit.

Een bufferpool van 128 MiB beperkt de cache, niet het totale databasegeheugen. Een verbindingslimiet van 20 kan te restrictief zijn als meerdere applicatie-instanties elk een pool beheren. Omgekeerd kunnen 20 gelijktijdige, zware query's de VPS alsnog overbelasten. Houd het totale aantal applicaties in de pool onder de beoogde serverlimiet, met voldoende ruimte voor beheerdersrechten, en houd geweigerde verbindingen in de gaten.

De bovenstaande algemene variabelen staan ​​ook vermeld in de referentie voor systeemvariabelen van MariaDB , maar het gedrag van tijdelijke tabellen verschilt per product en versie. Vermijd het vergroten van de globale sorteer-, join- of leesbuffers als algemene prestatieverbetering op een machine met beperkte resources.

De terminal toont een voorbeeld van een mysqld-configuratie met een bufferpool van 128 MB en een limiet van 20 verbindingen.
Deze instellingen voor kleine servers zijn een uitgangspunt voor evaluatie, geen maximum voor het totale databasegeheugen.

6. Beheer tijdelijke tabellen en gelijktijdige toegang tegelijkertijd

Veelvoorkomend misverstand: De instelling tmp_table_size=16Mbeperkt al het querygeheugen tot 16 MiB. Dat is niet het geval. Meerdere sessies, meerdere tijdelijke tabellen en andere geheugentoewijzingen voor de uitvoering kunnen naast elkaar bestaan.

Voor Oracle MySQL 8.4 is een extra illustratief uitgangspunt:

temptable_max_ram=64M
temptable_max_mmap=0

Voeg deze instellingen pas toe aan de bestaande [mysqld]groep nadat u de productondersteuning hebt bevestigd. Ze bepalen de drempelwaarde voor gedeeld RAM-geheugen van de TempTable-engine en het gebruik van geheugen-gemapte tijdelijke bestanden. Ze beperken niet het gehele mysqld-proces of alle thread-lokale toewijzingen. Lagere drempelwaarden kunnen meer werk naar de schijf verplaatsen.

De documentatie van MySQL 8.4 over tijdelijke tabellen legt deze limieten uit. MySQL 8.0 heeft versieafhankelijk gedrag: temptable_max_mmaphet werd geïntroduceerd in 8.0.23 en tmp_table_sizewerd een individuele limiet voor tijdelijke tabellen in 8.0.28. Raadpleeg de MySQL 8.0-referentie voordat u dezelfde instellingen toepast. Kopieer deze Oracle-specifieke opties niet naar MariaDB.

Actie: Beperk overlappende rapportquery's, achtergrondprocessen en back-up- of importtaken. Controleer queryplannen en indexen wanneer een bepaalde bewerking de belasting verhoogt. Het verplaatsen van grote taken naar een ander moment dan de piekbelasting kan helpen; als de normale gelijktijdige vraag de capaciteit nog steeds overschrijdt, is extra RAM-geheugen of het scheiden van de database de juiste volgende stap.

Terminal met voorbeeldinstellingen voor Oracle MySQL TempTable: 64 MB RAM en uitgeschakelde geheugentoewijzing.
Pas deze TempTable-instellingen alleen toe op een ondersteunde Oracle MySQL-versie en volg daarbij de versiespecifieke instructies.

7. Valideer de wijzigingen en herstart bewust.

Controleer de configuratie voor Oracle MySQL-versies die deze optie ondersteunen voordat u de applicatie opnieuw opstart:

sudo mysqld --validate-config

Gebruik hetzelfde pad naar het defaults-bestand en dezelfde opstartargumenten als de service als deze geen gebruikmaakt van standaardconfiguratiedetectie. De MySQL-validatiereferentie vermeldt dat validatie niet elk subsysteem initialiseert. Het slagen voor de validatie is geen test voor de werkbelastingcapaciteit. Ga er niet vanuit dat MariaDB deze Oracle-optie ondersteunt.

Start de daadwerkelijke service opnieuw op binnen het geplande tijdsvenster, inspecteer vervolgens de opstartprocedure en vraag de effectieve waarden op:

sudo systemctl restart mysql.service
systemctl status mysql.service
sudo journalctl -u mysql.service --since today
SHOW GLOBAL VARIABLES WHERE Variable_name IN
('innodb_buffer_pool_size','max_connections','tmp_table_size',
 'max_heap_table_size','temptable_max_ram','temptable_max_mmap');
SHOW GLOBAL STATUS WHERE Variable_name IN
('Threads_connected','Threads_running','Max_used_connections');

Niet-ondersteunde variabelen worden niet in de resultaten weergegeven. Controleer de beoogde instellingen in plaats van aan te nemen dat het nieuwe bestand voorrang heeft. Als het opstarten mislukt vanwege uw wijziging, herstel dan de opgeslagen configuratie of verwijder alleen de nieuwe overschrijving en start het systeem opnieuw. Bewaar de foutdetails voor diagnose.

Terminal met voorbeelden van Oracle MySQL-validatie, het herstarten van de service en het uitvoeren van de servicestatusopdracht.
Controleer de ondersteunde Oracle MySQL-configuratie vóór een geplande herstart; een succesvolle opstart bewijst niet dat er voldoende RAM-geheugen beschikbaar is.

8. Definieer succes onder representatieve belasting

free -h
vmstat 1
cat /proc/pressure/memory

Vergelijk hetzelfde verkeer en dezelfde geplande taken vóór en na de wijzigingen. Houd nieuwe OOM-gebeurtenissen, databaseherstarts, beschikbaar geheugen, verbindingsweigeringen, swapactiviteit en querylatentie bij. In het geval van Debian vmstatverdient aanhoudend swappen/swappen nader onderzoek. De Debian vmstat-handleiding legt uit dat het eerste rapport de activiteit sinds het opstarten middelt; gebruik de daaropvolgende rapporten voor de actuele activiteit.

De kernel-PSI-referentie beschrijft drukvertragingsmetingen. Een toenemende geheugenvertragingstijd kan problemen aan het licht brengen, zelfs vóór een volgende crash. Een systeem dat tien minuten inactief blijft, garandeert niet dat de volgende back-up of verkeerspiek veilig zal zijn.

Terminal met voorbeelden van de commando's available-memory, vmstat en memory-pressure.
Monitor het geheugen, de swapactiviteit en de belasting, samen met de querylatentie na wijzigingen.

Misvattingen die het probleem kunnen verergeren

ClaimWat je in plaats daarvan kunt doen
Bescherm mysqld tegen OOM (Out of Memory) en het tekort verdwijnt.Verminder de vraag of vergroot de capaciteit; door de selectie van het slachtoffer te wijzigen, kan de storing naar een ander proces worden verplaatst.
Stel een kleine MemoryMax in zodat MySQL past.Controleer eerst de bestaande limieten en pas de werkbelasting aan; een strikte limiet kan een OOM-fout (Out of Memory) in de service veroorzaken.
De database start automatisch opnieuw op en is stabiel.Gebruik het herstartgedrag voor herstel, terwijl u meet of de oorspronkelijke druk behouden blijft.
Schakel de duurzaamheidsinstellingen uit om RAM-geheugen te besparen.Houd de vereisten voor herstel en duurzaamheid gescheiden van de geheugenoptimalisatie.

De handleiding voor resourcebeheer van systemd in Debian legt uit dat MemoryMaxje binnen een unit de afhandeling van geheugenproblemen kunt activeren. Verwijder niet zomaar provider- of containerlimieten. De applicatie heeft een geheugenbudget nodig dat binnen die limieten past, of de limieten vereisen een geautoriseerde capaciteitswijziging.

Er bestaat geen bewezen minimale VPS-grootte die garandeert dat deze specifieke workload kan draaien. Als een nuttige doorvoer continue swapping vereist, als geplande taken nog steeds processen blokkeren, of als kleinere caches de latentie onacceptabel maken, beschouw configuratie dan niet langer als een vervanging voor capaciteit. Upgrade het RAM-geheugen, verminder de gelijktijdige applicatie-uitvoering of verplaats de database naar een aparte server.

Laat een reactie achter

Debian 12 op een VPS met weinig RAM: Hoe MySQL OOM-crashes te verminderen

Debian 12 op een VPS met weinig RAM: Hoe MySQL OOM-crashes te verminderen

Diagnoseer MySQL OOM-kills op Debian 12, controleer de geheugenlimieten van de VPS, configureer swap en optimaliseer het databasegeheugen en de gelijktijdigheid, zonder een universele oplossing te beloven.

Hoe bouw je een Debian-desktop als een op OSTree gebaseerd, onveranderlijk systeem?

Hoe bouw je een Debian-desktop als een op OSTree gebaseerd, onveranderlijk systeem?

Leer hoe je een op Debian gebaseerde OSTree-desktop in een virtuele machine kunt maken en testen, inclusief het voorbereiden van de systeemstructuur, het integreren met het opstartproces, het controleren van de implementatie en het terugdraaien van wijzigingen.

How to Mount a Remote SSHFS Directory Automatically at Boot in Debian

How to Mount a Remote SSHFS Directory Automatically at Boot in Debian

Configure an SSHFS boot mount in Debian with SSH keys, fstab, and systemd automount. Includes reboot checks, permissions, timeouts, and troubleshooting.

Onderhoudschecklist oktober 2026 voor Amsterdam en Noord-Holland: regen, wind, dak, goten en binnenklimaat

Onderhoudschecklist oktober 2026 voor Amsterdam en Noord-Holland: regen, wind, dak, goten en binnenklimaat

Praktische onderhoudschecklist voor oktober 2026 in Amsterdam en Noord-Holland: dak en goten, wind- en regenvoorbereiding, verwarming, ventilatie, vocht en huurders-/eigenaarstaken.

Wat kun je in Amsterdam planten in oktober 2026? Zaaien, uitplanten en een weekplanning voor Noord-Holland

Wat kun je in Amsterdam planten in oktober 2026? Zaaien, uitplanten en een weekplanning voor Noord-Holland

Praktische oktober-gids voor Amsterdam en Noord-Holland: wat direct zaaien, binnen voorzaaien, uitplanten en poten, met KNMI-klimaatnormalen, actuele verwachting en weekchecklist.

Podcasttrends die je in 2026 moet kennen: een stappenplan voor beginners

Podcasttrends die je in 2026 moet kennen: een stappenplan voor beginners

Ben je nieuw in de podcastwereld? Ontdek de trends van 2026 op het gebied van video, vindbaarheid, transcripties, AI, analyses, monetisatie en een praktisch lanceringsplan.

Masterclass Gebruikersgegenereerde Content: Bouw Gebruikersgegenereerde Content die Vertrouwen Wint en Actie Stimuleert.

Masterclass Gebruikersgegenereerde Content: Bouw Gebruikersgegenereerde Content die Vertrouwen Wint en Actie Stimuleert.

Een praktische masterclass over UGC (User Generated Content) voor het vinden, verkrijgen van toestemming, briefen, publiceren en meten van content van klanten en makers, zonder de authenticiteit te verliezen.

Waarom community building de nieuwe marketing is — en wanneer niet —

Waarom community building de nieuwe marketing is — en wanneer niet —

Het opbouwen van een community kan het vertrouwen, de klantloyaliteit, de feedback en de betrokkenheid vergroten, maar het is geen vervanging voor elk marketingkanaal. Weeg de voor- en nadelen af ​​en kies het juiste model.

Het navigeren door veranderingen in sociale media-algoritmes in 2026: wat is bevestigd, wat is contextueel en wat is nog onbekend?

Het navigeren door veranderingen in sociale media-algoritmes in 2026: wat is bevestigd, wat is contextueel en wat is nog onbekend?

Ontdek wat de belangrijkste sociale platforms daadwerkelijk hebben bevestigd over veranderingen in de rankings in 2026, wat afhangt van de context en hoe je je kunt aanpassen zonder mythes na te jagen.

Authentieke storytelling in merkmarketing: hoe je vertrouwen opbouwt zonder dat het gekunsteld klinkt.

Authentieke storytelling in merkmarketing: hoe je vertrouwen opbouwt zonder dat het gekunsteld klinkt.

Leer hoe je merkverhalen geloofwaardig, menselijk en specifiek kunt maken – met behulp van bewijs, echte spanning, ethische klantverhalen en een praktische authenticiteitscheck.