Out of memory (MySQL)
Casus: Zomer 2020
Dit probleem plaagde mij in de zomer van 2020 op een nieuw-gelanceerde joekel van een WordPress-site.
Het probleem
Let op: Ik weet niet zeker of dit echt gerelateerd is aan MySQL, al lijkt het er wel op:
Out of memory: Kill process 23472 (mysqld) score 124 or sacrifice child
Casus: Feb. 2022
Het probleem
Dit betreft een nieuwe sever met veel sites maar weinig verkeer. Server-specs: c4 / 4 cores / 8.192 MB / Ubuntu 20.04 LTS
Brainstorm
- Verifiëer dat er een swapfile is [1]
- Verdubbelen van het geheugen, van 16 GB naar 32 GB. Dat kost maar liefst € 145/mnd - Kijken of dat niet gemakkelijker kan!
- Mogelijke oorzaak: WordPress is niet gedimensioneerd op sites met zulke grote taxonomieën (kenmerken/categorieën). Misschien bestaan hier plugins voor, of kan ik dat zelf aanpassen
- Mogelijk is MySQL niet correct geconfigureerd voor zulke grote hoeveelheden data
- Dmesg (systeemlog) vermeldt firewall-meldingen. Is daar iets aan de hand?
- De VPS heeft vier CPU's, en hij zit nu qua gebruik op 3 van die CPU's, met twee sites, die welliswaar groot zijn, maar niet al te druk bezocht worden.
Oplossing
Severcapaciteit verdubbeld. Dat was sowieso nodig. De noodzaak voor een echte diagnose + oplossing is daarmee iets vooruitgeschoven.
Casus: Zomer 2022
Het probleem is terug, nu wanneer ik in WP-CLI-scripts veel taken probeer te paralleliseren. Blijkbaar is dit de eerste beperkende factor. Waarschijnlijk zijn er meer scenario's te bedenken waarin dit probleem optreedt. En ook rondom deze WP-CLI-scripts, zou ik het prettig vinden als deze foutmelding verdwijnt.
Probleem
Foutmeldingen Bash tijdens executie script (deze foutmelding verschijnt ca. 20 keer):
Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /var/www/example.com/wp-includes/wp-db.php on line 1753 Error: Error establishing a database connection.
Voorbeeld: foutmeldingen in log (dmesg):
[70498.466971] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/mariadb.service,task=mysqld,pid=146641,uid=112 [70498.467151] Out of memory: Killed process 146641 (mysqld) total-vm:4898800kB, anon-rss:2445688kB, file-rss:0kB, shmem-rss:0kB, UID:112 pgtables:5624kB oom_score_adj:0 [70498.647046] oom_reaper: reaped process 146641 (mysqld), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
Aanvullende gegevens
- Dit is dezelfde server als in de casus uit feb. 2022
- Specs: 8 Cores, 16 threads, 16GB geheugen
- Deze post geeft suggesties om geheugengebruik te beperken. Ik realiseer me, dat dat eigenlijk niet is wat ik wil → Ik moet de servercapaciteit juist verhogen. Ik weet alleen niet zeker of dit met de hoeveelheid geheugen te maken heeft. Dezelfde post zegt, dat 4GB vrij klein is voor een webserver. Ik heb 16GB, voor een server met 20 lichtbezochte sites, maar wel scripts waarin er 16 of 32 site-gerelateerde processen parallel worden geëxecuteerd
- Het zou handig zijn, als ik een testcase heb, zodat ik het verschil kan zien na verdubbelen van het geheugen.
Testcase
Project TourDE100 (juni 2022): Regenerate images op een WordPress-site, in 32 parallele processen (tijd om deze code een keer te refactoren). Daarna alle inhoud Bash-venster kopiëren en plakken, en tellen hoe vaak er een OOM-probleem omtreedt:
echo " Regenerate thumbnails..." cd $path # seq 0 1000 | xargs wp media regenerate --only-missing --yes & # 1 seq 1001 2000 | xargs wp media regenerate --only-missing --yes & seq 2001 3000 | xargs wp media regenerate --only-missing --yes & seq 3001 4000 | xargs wp media regenerate --only-missing --yes & seq 4001 5000 | xargs wp media regenerate --only-missing --yes & seq 5001 6000 | xargs wp media regenerate --only-missing --yes & seq 6001 7000 | xargs wp media regenerate --only-missing --yes & seq 7001 8000 | xargs wp media regenerate --only-missing --yes & seq 8001 9000 | xargs wp media regenerate --only-missing --yes & seq 9001 10000 | xargs wp media regenerate --only-missing --yes & seq 10001 11000 | xargs wp media regenerate --only-missing --yes & seq 11001 12000 | xargs wp media regenerate --only-missing --yes & seq 12001 13000 | xargs wp media regenerate --only-missing --yes & seq 13001 14000 | xargs wp media regenerate --only-missing --yes & seq 14001 15000 | xargs wp media regenerate --only-missing --yes & seq 15001 16000 | xargs wp media regenerate --only-missing --yes & # 16 seq 16001 17000 | xargs wp media regenerate --only-missing --yes & seq 17001 18000 | xargs wp media regenerate --only-missing --yes & seq 18001 19000 | xargs wp media regenerate --only-missing --yes & seq 19001 20000 | xargs wp media regenerate --only-missing --yes & seq 20001 21000 | xargs wp media regenerate --only-missing --yes & seq 21001 22000 | xargs wp media regenerate --only-missing --yes & seq 22001 23000 | xargs wp media regenerate --only-missing --yes & seq 23001 24000 | xargs wp media regenerate --only-missing --yes & seq 24001 25000 | xargs wp media regenerate --only-missing --yes & seq 25001 26000 | xargs wp media regenerate --only-missing --yes & seq 26001 27000 | xargs wp media regenerate --only-missing --yes & seq 27001 28000 | xargs wp media regenerate --only-missing --yes & seq 28001 29000 | xargs wp media regenerate --only-missing --yes & seq 29001 30000 | xargs wp media regenerate --only-missing --yes & seq 30001 31000 | xargs wp media regenerate --only-missing --yes & seq 31001 32000 | xargs wp media regenerate --only-missing --yes & # 32 wait
Dit is een vrij arbitraire aangelegenheid, maar misschien zegt het iets over de situatie op deze server op dit moment. Resultaten:
- Toen er daadwerkelijk afbeeldingen opnieuw aangemaakt moesten worden: Ca. 20 OOM-problemen
- Geen foutmeldingen - Er hoefde ook niets te gebeuren
- Geen foutmeldingen - Er hoefde ook niets te gebeuren
Dit werkt dus niet.
Acties
Geheugen verdubbeld van 16GB naar 32GB. Kost maar liefst € 120/mnd.