FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Mycket flitig postare
|
Jag har haft frågan uppe förut men har inte löst den.
Jag har en rykande minnesåtgång på servern som kör mysql version 5.0.16 på Linux I top och ps ser jag massa mysql PROCESSER. Vad jag förstår är det inte trådar jag ser eftersom dom har egen pid!? Dvs jag ser dom i ps utan -m flaggan. I top står det att varje mysql process tar c:a 10% av minnet. Jag har alltid trott att det är trådar jag ser dvs att detta är den totala minnesåtgången för mysql MEN jag har skruvat ner minnesparametrarna i my.cnf lägre och lägre och ändå swappar servern. Det enda som körs på den är LAMP. Något är fel - kan det vara så illa att mysql verkligen kör varje "tråd" som en egen process !? Tycker att jag borde ha haft ännu större minnesproblem då - därför har jag antagit att detta inte var fallet - men nu börjar jag bli osäker.... 150 processer som tar 10% var av minnet enligt top - det blir rätt många procent totalt... ;-) Någon som kan hjälpa mig att bringa klarhet!? Kan man köra mysqld "forkande" isf trådad?? |
|||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Bara ett inlägg till!
|
Det du ser i ps, top etc. är processer och inte enskilda trådar. Nästan allt minne som varje mysqld-processer använder är samma som alla andra mysqld-processer använder (det vore helt orimligt om varje process skulle hålla en egen kopia av databasen i minnet). Exakt hur mycket minne som alla mysqld-processer tar upp tillsammans är apsvårt att se (googla lite på ämnet "memory usage" för att förstå problemen med hur ett OS ska mäta det). Räkna med att den totala minnesanvändningen för mysqld är samma som för en enskild mysqld-process. Varje mysqld-process drar ju lite eget minne också vilket börjar spela roll om du har hundratals igång samtidigt.
Lite OT: Du kan inte länka binärer 100% statiskt i linux så även om du dragit ner de förkompilerade binärerna så länkar de mot bland annat glibc osv vilket också räknas som minnesanvändning i linux trots att du kanske har 500 andra processer igång i datorn som delar på exakt samma minne. |
|||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Mycket flitig postare
|
OK, men är detta något som är ändrat till version 5? Vi har en gammal version på en annan server där kör mysqld som EN process med x antal trådar. Dvs en process i ps men många trådar om man kör ps -m.
Du säger att det är normalt att mysql version 5 kör med en PROCESS för varje "tråd" - och att detta inte ska leda till högre minnesutnyttjande - fattar jag dig rätt?! I så fall är mitt minnesproblem på något annat ställe... *EDIT stavfel |
|||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Bara ett inlägg till!
|
Visste inte att man kunde se antalet trådar en process kör med ps. Om du kör en glibc med NPTL borde mysqld endast få en rad i ps. Jag är inte så hemma på hur NPTL fungerar (och inte någon annan trådmodell heller för den delen) så jag kan inte utala mig så mycket om det. På datorn jag sitter på just nu kör jag endast med NPTL och då får mysqld bara en rad i ps. Apache däremot får en rad för varje process. Jag antar att det har med att jag kör prefork som MPM.
Jag har bara erfarenhet av mysql 4. |
|||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Mycket flitig postare
|
Hmm, Jag vet inget i detalj om hur trådning i sig hanteras i mysql. Jag vet inte ens vad NPTL betyder...
Någon som kör mysql 5 som bara kan berätta hur det ser ut hos er - eller någon som vet mer om detta?? Jag tycker det känns konstigt att det är 150 mysqld processer uppe och kör... Hur delar dom på minne om det är olika processer?? Det finns inget shared memomry segment allokerat vad jag kan se (med ipcs) |
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Klarade millennium-buggen
|
Jag har sett samma beteende som du ser nu Conth, det är lite olika hit och dit och ärligt talat så har jag inte orkat bemöda mig om att verifiera det.
kullervo har dock rätt när han säger att du inte kan lita på minnesanvändningen som anges i ps (med eller utan en tråd för varje anslutning) eftersom alla bibliotek som används av många processer delas i minnet. Den enklaste lösningen (som jag ser det) är att kolla om du har ledigt ram kvar.. om inte - köp mer ![]() |
||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Mycket flitig postare
|
Jag har redan köpt mer och ändå har jag konfigurerat mysql väldigt snålt. Har 3GB och drar runt 300 samtidiga användare (inloggade inom 5 minutersperiod). Trots detta swappar servern och har väldigt hög load. Känns som jag missar något...
|
|||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Bara ett inlägg till!
|
Citat:
|
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Mycket flitig postare
|
Tack för tipset - ska undersöka Apache lite mer.
Har inte optimerat det och det är en gammal version (Server version: Apache/1.3.34 ) Typiskt går det kanske 200 httpd processer i hög last. Hade varit kul om någon visste mer om frågan angående mysql dock. Verkar väldigt hemligt. Jag lyckas inte hitta något om detta!? Har dom ändrar från EN trådad process till forkade processer ?!? eller är förklaringen en annan till att det visas som processer (inte trådar) i top och ps fr.o.m version 5!? |
|||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Nykomling
|
Intressant diskussion!
Har själv sett samma sak med mysql från top och ps men inte undersökt det närmare då totala minnesanvändningen aldrig varit något problem. |
|||
![]() |
![]() |
Svara |
|
|