Bekijk Volledige Versie : FreeBSD, PAE, SMP, MySQL, hw.realmem vraagje
systemdeveloper
25/06/08, 22:21
Ik zit met iets that puzzles me...
Ik heb net een paar leuke servers binnen gekregen met een zooi power en mijn klant is super tevreden daarover. Alles draait als een trein en iedereen gelukkig.
Maar nu monitoren wij onze servers ook wel goed en ik zag wat meldingen van temp tables die op disk werden aangemaakt.... nou, dat was 95%, dus er moest iets mis zijn en ik speuren..
MySql gebruikt 512 mb geheugen. Maximaal... op 4GB bak..
Ok, ik denk, da's een setting en ik speur my.cnf, /boot/loader.conf, etc af, maar zie niks geks. dmesg toont ook geen problem, de PAE kernel herkent gewoon 4gb. Realmem geeft 4GB aan, of om en nabij... anyway... alles lijkt ok.
Tot ik een sysctl -a hw doe en dan opeens het volgende zie...
hw.physmem: 4286046208
hw.usermem: 4084682752
hw.realmem: 536870912
Ok, dat realmem staat opeens op 512MB :(
Wtf is dit nu weer ? Iemand een idee?
GlennMatthys
25/06/08, 22:36
MySQL heeft wel een aantal geheugen instellingen, en standaard zijn die heel conservatief (geoptimaliseerd voor systemen met 128 MB geheugen ofzo).
Waarom heb je niet de 64 bits versie van FreeBSD geinstalleerd? Dan heb je geen PAE nodig.
Dat hw.realmem op de verkeerde waarde staat lijkt mij eerder een overflow, 32 bit integer gebruikt terwijl PAE een 36 bit waarde is. Kijk eens na hoeveel swap er gebruikt wordt: als het systeem aan het swappen is dan is hij inderdaad te weinig werkgeheugen aan het gebruiken.
heb je wel een goede tmp_table_size gedefinieerd staan? default staat die erg laag ingesteld, dacht ik. (eventueel ook meteen max_heap_table_size mee oprekken)
ons eigen mysql cluster geeft dezelfde melding, alleen geen problemen. (tmp_table_size staat hier op 256MB
systemdeveloper
25/06/08, 22:45
MySQL heeft wel een aantal geheugen instellingen, en standaard zijn die heel conservatief (geoptimaliseerd voor systemen met 128 MB geheugen ofzo).
Waarom heb je niet de 64 bits versie van FreeBSD geinstalleerd? Dan heb je geen PAE nodig.
Ik had eerst de amd64 erop maar daarop was DA niet op een redelijk standaard manier aan de praat te krijgen, dus dat heb ik toen even laten schieten. Misschien toevallig een rotte cvs gehad, maar heb toen toch maar voor de probleemloze i386 gekozen. Alleen heb ik daarna een PAE kernel geknutseld die het blijkbaar allemaal toch verpest :S
Nu heb ik nog een andere PAE kernel bak die hetzelfde realmem probleem heeft. Same story dus.
De mysql opties ken ik wel, die moeten geen probleem opleveren denk ik.
Je zou ook eens kunnen kijken naar de volgende kernel opties.
kern.ipc.maxsockets="5000"
kern.ipc.nmbclusters="65536"
kern.maxproc="2048"
kern.maxfiles="16384"
kern.maxfilesperproc="16384"
Zie verder ook de mysql documentatie voor BSD: http://dev.mysql.com/doc/refman/5.1/en/freebsd.html
FreeBSD limits the size of a process to 512MB, even if you have much more RAM available on the system. So you may get an error such as this:
Out of memory (Needed 16391 bytes)
In current versions of FreeBSD (at least 4.x and greater), you may increase this limit by adding the following entries to the /boot/loader.conf file and rebooting the machine (these are not settings that can be changed at run time with the sysctl command):
kern.maxdsiz="1073741824" # 1GB
kern.dfldsiz="1073741824" # 1GB
kern.maxssiz="134217728" # 128MB
For older versions of FreeBSD, you must recompile your kernel to change the maximum data segment size for a process. In this case, you should look at the MAXDSIZ option in the LINT config file for more information.
systemdeveloper
25/06/08, 22:54
heb je wel een goede tmp_table_size gedefinieerd staan? default staat die erg laag ingesteld, dacht ik. (eventueel ook meteen max_heap_table_size mee oprekken)
ons eigen mysql cluster geeft dezelfde melding, alleen geen problemen. (tmp_table_size staat hier op 256MB
@GlennMatthys: die realmem zou van een overflow van de 32bit sysctl kunnen komen inderdaad, maar dan blijf ik nog zitten met die 95% tables die op disk worden aangemaakt.
tmp_table_size staat nu op 700 mb of zo. (Beetje overdone idd, maar is meer als testje om te kijken of het effect heeft op de tem disk tables)
Ik ga morgen maar eens met een normale kernel booten en eens kijken wat dat geeft.
Je zou ook eens kunnen kijken naar de volgende kernel opties.
kern.ipc.maxsockets="5000"
kern.ipc.nmbclusters="65536"
kern.maxproc="2048"
kern.maxfiles="16384"
kern.maxfilesperproc="16384"
Zie verder ook de mysql documentatie voor BSD: http://dev.mysql.com/doc/refman/5.1/en/freebsd.html
Je zou de limitatie van het geheugen door FreeBSD moeten kunnen zien met limits -U mysqluser
Geeft bij ons in ieder geval infinity aan.
De andere waardes die Deimos noemt zouden andere problemen vanuit mysql moeten opleveren.
systemdeveloper
25/06/08, 23:38
Je zou de limitatie van het geheugen door FreeBSD moeten kunnen zien met limits -U mysqluser
Geeft bij ons in ieder geval infinity aan.
De andere waardes die Deimos noemt zouden andere problemen vanuit mysql moeten opleveren.
Als het allemaal zo eenvoudig was :)
Ik heb al alles nagespeurd en ik heb genoeg ervaring met freebsd en mysql om toch op zijn minst een idee te hebben waar ik nog kan zoeken.
# limits -U mysql
Resource limits for class default:
cputime infinity secs
filesize infinity kB
datasize infinity kB
stacksize infinity kB
coredumpsize infinity kB
memoryuse infinity kB
memorylocked infinity kB
maxprocesses infinity
openfiles infinity
sbsize infinity bytes
vmemoryuse infinity kB
# limit
cputime unlimited
filesize unlimited
datasize 1192603 kbytes
stacksize 131072 kbytes
coredumpsize unlimited
memoryuse unlimited
vmemoryuse unlimited
descriptors 11095
memorylocked unlimited
maxproc 5547
sbsize unlimited
# limits
Resource limits (current):
cputime infinity secs
filesize infinity kB
datasize 1192603 kB
stacksize 131072 kB
coredumpsize infinity kB
memoryuse infinity kB
memorylocked infinity kB
maxprocesses 5547
openfiles 11095
sbsize infinity bytes
vmemoryuse infinity kB
Lijkt me niet verkeerd? Datasize is wat verhoogd tov de standaard maar verder niks spannends toch ?
zie er niet echt een probleem in. ook geen "rare" meldingen in mysql logs?
systemdeveloper
27/06/08, 11:59
Ok, booten met super super goede settings lostte het niet op. Niet met de PAE kernel althans. Vervolgens weer een normale SMP kernel erop gegooid en voila werkend.
Zal wel eens een keer gaan uitpuzzelen wat de verschillen zijn...
Bedankt voor de tips in elke geval!!