PDA

Bekijk Volledige Versie : Too many connections



wijkkie
02/12/12, 16:52
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

NederHost
02/12/12, 17:03
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.

wijkkie
02/12/12, 18:55
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.

SF-Jeroen
02/12/12, 19:13
Hoeveel connections mag MySQL maximaal hebben? Staat in je my.cnf.

wijkkie
02/12/12, 19:39
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?

RackWerk
02/12/12, 19:46
Default is het 151 max connections. (Eigenlijk 150, maar die 1 is gereserveerd voor een user met SUPER privilege...)

wijkkie
02/12/12, 21:00
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?

Arieh
02/12/12, 21:32
De pid's zijn de identificatie nummers van de processen. Een proces op zich kan/heeft meerdere connecties.

SF-Jeroen
02/12/12, 22:11
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.

vDong
02/12/12, 22:48
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.

wijkkie
07/12/12, 20:04
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?

wijkkie
09/12/12, 13:51
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.

SF-Jeroen
09/12/12, 18:00
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.

RackWerk
09/12/12, 22:40
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.

ju5t
10/12/12, 10:50
Lijkt me geen oplossing voor het probleem.

Joomla verwijderen is toch altijd de oplossing?

wijkkie
10/12/12, 18:39
@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?

RackWerk
10/12/12, 20:09
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.

Netbulae
11/12/12, 12:00
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