Bekijk Volledige Versie : Too many connections
Ik krijg de laatste tijd regelmatig de melding: Too many connections op de mysql en is serverwijd mijn sql niet meer te bereiken.
Nu weet ik dat ik de connactions aantal omhoog kan gooien in my.cnf, maar wil eigenlijk weten waar die connections vandaan komen waardoor het komt dat er teveel connections open blijven staan. Ik heb het vermoeden dat er ergens in een script de connections niet verbroken worden.
Hartelijk dank
Het eerste wat je kunt doen is op het moment dat dit probleem optreedt inloggen op de MySQL-server als root (dat zou dan nog moeten werken) en een 'SHOW PROCESSLIST' of 'SHOW FULL PROCESSLIST' ingeven. Je ziet dan in ieder geval wat er op dat moment precies gebeurt. Je kunt eventueel met 'KILL' bepaalde threads stoppen.
Als dit vaak voorkomt dan wil je dit geautomatiseerd monitoren; je kunt daar zelf iets voor scripten of een kant-en-klare oplossing gebruiken.
Okee dat ga ik doen dan wanneer t weer gebeurt. In je DA bij process monitor staat t volgende:
mysqld (pid 10168 10169 10170 10171 10172 10173 10175 10176 10177 10178 10895 11078 11087 12431 12636 12664 12921 13206 )
Zijn dit niet t aantal connecties die er zijn? Wanneer sql vastloop staat dit namelijk helemaal vol.
Hoeveel connections mag MySQL maximaal hebben? Staat in je my.cnf.
staat nog geen max_connections. Weet niet wat Mysql dan standaard doet?
Maar? over mijn bovenstaande vraag? Zijn die pid's niet de connecties die nog open staan?
Default is het 151 max connections. (Eigenlijk 150, maar die 1 is gereserveerd voor een user met SUPER privilege...)
okee ga ik dat aanpassen zodra ik erachter ben waar het probleem vandaan komt. Kan lijkt mij wel doodleuk t aantal connacties omhoog gooien, maar dan weet je nog niet waar het vandaan komt lijkt me.
Maar als da_admin zie je alle processen? of kan je ook nog als root inloggen?
Maar iemand nog een antwoord op me andere vragen?
De pid's zijn de identificatie nummers van de processen. Een proces op zich kan/heeft meerdere connecties.
Ik zou het aantal connecties niet zozeer omhoog gooien. Het is waarschijnlijk een user met een slecht geprogrammeerde site. Ik zou eerder een limiet per user opwerpen. Dat kan dmv max_user_connections. Wat je ervan moet maken is een beetje de vraag. Is het budget hosting? Dan zou ik 10 zeggen. Is het iets meer commercieel dan zou ik het hoger zetten.
Maak een klein scriptje met deze inhoud:
#!/bin/bash
/bin/date >> /var/log/mysql_processlist
/usr/local/bin/mysqladmin processlist >> /var/log/mysql_processlist
Zet dat in je crontab voor elke (1,2,3 kies iets) minuut.
Zorg er wel voor dat je het [client] gedeelte van .my.cnf ingevuld heb.
Dit is een erg basaal script, er zijn veel uitgebreidere mogelijkheden maar misschien is dit al genoeg.
Het probleem is gevonden. Een gastenboek van een joomla installatie.
Dank voor de hulp
EliteSwitch
08/12/12, 14:24
Hoe heb je het nu precies opgelost? Was het een bug of?
Toen SQL vast stond heb ik ingelogd met het root password op phpmyadmin.
Daar gekeken wat de lopende processen waren. Hieruit zag ik dat het gebeurde op een joomla installatie van mijn broer. Er stond een berg spam in zijn gastenboek. Gelijk Joomla er af gegooid. Hij gebruikte t toch niet meer.
Lijkt me geen oplossing voor het probleem. Je hebt nu alleen de trigger weggehaalt. Als je meer klanten krijgt zou ik toch een vaste oplossing bedenken.
Je kunt in MySQL een aantal limits opgeven per user, bijvoorbeeld het maximum aantal connecties, queries per uur, et cetera.
Moet eerlijk toegeven dat ik het zelf zelden tot nooit heb hoeven gebruiken, maar de functionaliteit is er in ieder geval wel.
Lijkt me geen oplossing voor het probleem.
Joomla verwijderen is toch altijd de oplossing?
@SF-Jeroen
Dat snap ik ja, maar verder heb ik geen problemen en heb nu wel t probleem gevonden doordat ik niet zomaar de max_connections naar 500 gegooid heb, want dan had ik t probleem misschien nog niet gevonden.
Maar mocht t weer gebeuren, wat stel jij voor als vaste oplossing?
@RackWerk
Heb je ergens een voorbeeld hoe ik dat in kan stellen?
Dat is een beetje afhankelijk van welke phpmyadmin versie / mysql versie, maar met de laatste versies gaat dat in phpmyadmin als volgt;
1. Log in op phpmhyadmin
2. Klik op het tabblad 'Rechten'
3. Ga naar de betreffende user welke je wilt limiteren en klik op 'wijzig rechten'
4. Scroll naar beneden, daar zie je de volgende opties:
MAX QUERIES PER HOUR
MAX UPDATES PER HOUR
MAX CONNECTIONS PER HOUR
MAX USER_CONNECTIONS
Als daar 0 staat, zit er geen limiet op voor deze user. Hier kun je dus vrij eenvoudig limieten instellen.
Voor een handleiding voor hoe je dat op de CLI in MySQL doet kun je het beste even kijken op:
http://dev.mysql.com/doc/refman/5.0/en/user-resources.html
Suc6.
Ik zou even het slow query log aanzetten van MySQL... Kan je zien welke queries erg lang duren:
https://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html