Out of memory (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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:

  1. Toen er daadwerkelijk afbeeldingen opnieuw aangemaakt moesten worden: Ca. 20 OOM-problemen
  2. Geen foutmeldingen - Er hoefde ook niets te gebeuren
  3. Geen foutmeldingen - Er hoefde ook niets te gebeuren

Dit werkt dus niet.

Acties

Geheugen verdubbeld van 16GB naar 32GB. Kost maar liefst € 120/mnd.

Bronnen