Laten we aannemen dat uw systeem momenteel op Unix is gebaseerd (zoals aangegeven in uw probleemstelling). Als dit correct is, volgt hier de reeks problemen waar u mogelijk tegenaan loopt:
-
Je hebt geen geheugen beschikbaar voor MySQL.
Dit is het meest waarschijnlijke probleem waarmee u wordt geconfronteerd. Elke verbinding in de verbindingspool van MySQL vereist geheugen om te functioneren, en als deze bron is uitgeput, kunnen er geen verdere verbindingen worden gemaakt. Natuurlijk kunnen de geheugenvoetafdrukken en maximale pakketgroottes van verschillende bewerkingen worden afgestemd in uw equivalent van
my.cnf
als u ontdekt dat dit een probleem is.Hier is een extra thread die je daarbij kan helpen , maar u kunt ook overwegen om eenvoudigere profileringstools te gebruiken, zoals
top
om een goede schatting te krijgen van wat er aan de hand is. -
Je hebt geen bestandsdescriptors beschikbaar voor uw MySQL-gebruikersaccount.
Een ander veelvoorkomend probleem:als u verzoeken probeert te behandelen waarvoor bestands-IO boven de 1.024-grens (standaard) nodig is, zult u gevallen tegenkomen waarin de bewerking gewoon mislukt. Dit komt omdat de meeste systemen een zachte en harde limiet specificeren voor het aantal open bestandsdescriptors dat elke gebruiker tegelijk beschikbaar kan hebben, en het overschrijden van deze drempel kan problemen veroorzaken.
Dit zal meestal een reeks overduidelijk voor de hand liggende tekens hebben die tot uiting komen in uw logbestanden. Controleer
/var/log/messages
en uw vergelijkbare mappen (bijvoorbeeld/var/log/mysql
om te zien of je iets interessants kunt vinden. -
Je bent een livelock of deadlock tegengekomen scenario waarin je discussie niet voldoet.
Als gevolg van uitputting van geheugen en bestandsdescriptoren, kunnen threads een time-out krijgen als u de rekenbelasting hebt overschreden die uw systeem aankan. Het zal deze foutmelding niet geven, maar dit is iets om in de toekomst op te letten.
-
Uw systeem heeft bijna geen PID's meer beschikbaar voor
fork
.Een ander veelvoorkomend scenario:
fork
heeft slechts zo veel PID's beschikbaar voor gebruik op een bepaald moment. Als uw systeem gewoon overforked is , zal het niet meer in staat zijn om verzoeken te behandelen.De eenvoudigste controle hiervoor is om te zien of andere services verbinding kunnen maken met de machine. Bijvoorbeeld, proberen SSH in de box te krijgen en ontdekken dat dat niet kan, is een grote aanwijzing.
-
Een upstream-proxy of verbindingsbeheerder heeft geen bronnen meer en heeft geen serviceverzoeken meer.
Als u een servicelaag hebt tussen uw client en MySQL, moet u deze inspecteren om te zien of deze is gecrasht, vastgelopen of anderszins onstabiel is geworden. Het bovenstaande advies is van toepassing.
-
Uw poortmapper heeft zichzelf uitgeput na 65.536 verbindingen .
Onwaarschijnlijk, maar nogmaals, een mogelijk geval van uitputting. Het controleren van de triviale serviceverbinding zoals hierboven is, ehm, ook de beste aanloophaven hier.
In het kort:dit is een scenario voor uitputting van bronnen, inclusief het feit dat de server gewoon "down" is. U zult uw systeem verder moeten profileren om te zien waarvoor u blokkeert. Het enige foutbericht dat ons in dit geval geeft, is het feit dat de bron niet beschikbaar is voor de client -- we zouden meer informatie over de server moeten zien om een meer adequate remedie te bepalen.