Ich erhalte zufällig den folgenden Fehler von den PHP-Backend-Jobs und den PHP-Webseiten-Logs. Habe einen App-Server, auf dem PHP-Backend-Jobs und PHP-Webserver laufen. Beide stellen eine Verbindung zum selben Datenbankserver her. Verwenden von PHP mysqli objektorientierte Bibliothek für die Verbindung mit der Datenbank. Setzen Sie in my.cnf maximale Verbindungen auf 750. Nicht sehen, dass viele Verbindungen erreicht werden.
PHP Warnung: mysqli :: mysqli (): (HY000 / 2003): Verbindung zum MySQL Server unter '77 .777.120.81 '(99) in /usr/local/dev/classes/Admin.php online nicht möglich 15
Verbindung zu MySQL konnte nicht hergestellt werden: Verbindung zu MySQL Server unter '77 .777.120.81 '(99)
nicht möglich
Wie in diesem Percona Datenbank Performance Blog Artikel, Ihr Problem ist, dass Ihre Anwendung keine andere Verbindung zum MySQL-Server öffnen kann. Sie haben keine lokalen TCP-Ports mehr. Als Lösung würde ich vorschlagen, TCP-Parametereinstellungen zu Tweak
Es ist möglich, den Kernel zu zwingen, eine im Zustand TIME_WAIT hängende Verbindung wiederzuverwenden, indem man / proc / sys / net / ipv4 / tcp_tw_reuse auf 1 setzt. In der Praxis sieht man, dass die geschlossenen Verbindungen in TIME_WAIT hängen bleiben bis sie entweder ablaufen oder eine neue Verbindung angefordert wird. Im letzteren Fall wird die Verbindung "wiederbelebt".
Wenn Sie / proc / sys / net / ipv4 / tcp_tw_recycle aktivieren, werden geschlossene Verbindungen nicht mehr unter TIME_WAIT angezeigt - sie verschwinden vollständig aus dem netstat. Sobald Sie jedoch eine neue Verbindung (innerhalb der 60-Sekunden-Marke) öffnen, wird eine davon wiederverwendet. Aber jeder, der über diese Alternative schreibt, rät davon ab, sie zu benutzen. Fazit: Es ist besser, eine Verbindung wiederzuverwenden als sie zu recyceln.
Dieser Parameter bestimmt, wie viele Verbindungen gleichzeitig im TIME_WAIT-Zustand verbleiben können: der Kernel wird Töte einfach Verbindungen, die in einem solchen Zustand über dieser Nummer hängen. In einem Szenario, in dem der Server einen TCP-Portbereich mit nur 6 Ports hat, wenn
/proc/sys/net/ipv4/tcp_max_tw_buckets
auf 5 gesetzt ist, dann 6 gleichzeitige Verbindungen mit MySQL öffnen und dann alle 6 sofort schließen, werden nur 5 von ihnen hängen im Zustand TIME_WAIT - wie beitcp_tw_recycle
würde einer von ihnen einfach ausnetstat
output verschwinden. Diese Situation ermöglicht es, sofort eine neue Verbindung zu öffnen, ohne auf eine Minute * warten zu müssen.
- Wenn es um die Verbindung zu Datenbankservern geht, haben viele Anwendungen eine neue Verbindung nur für eine einzelne Anfrage geöffnet und sie direkt nach der Verarbeitung der Anfrage geschlossen. Obwohl die Verbindung vom Client (Anwendung) geschlossen wird, wird der lokale Port, den er verwendet hat, nicht sofort vom Betriebssystem freigegeben, um von einer anderen Verbindung wiederverwendet zu werden: Er wird für (normalerweise) 60 Sekunden in einem TIME_WAIT-Zustand bleiben - dieser Wert kann nicht sein leicht geändert, da es im Kernel fest codiert ist.
Eine zweite Verbindung kann jedoch erst geöffnet werden, wenn eine der anderen fünf Verbindungen in TIME_WAIT abläuft, und den lokalen Port freigeben, den sie verwendet hat. Das Geheimnis besteht also darin, einen Kompromiss zwischen der Anzahl der verfügbaren Netzwerkports und der Anzahl der Verbindungen zu finden, die im TIME_WAIT-Status verbleiben dürfen. Der Standardwert dieser Einstellung ist 65536, dh das System lässt standardmäßig zu, dass alle möglichen Verbindungen beim Schließen den Zustand TIME_WAIT überschreiten.
Update 1 :
tcp_tw_reuse
sieht besser aus. Hier wird beschrieben warum:
tcp_tw_reuse vs tcp_tw_recycle: Which zu verwenden (oder beides)?
Ursprüngliche Antwort :
mysql error (99) bedeutet, dass Ihnen die tcp-Ports ausgehen.
Das Aktivieren von tcp recycle sollte es beheben.
%Vor%Referenz verweisen
Ich kann mich von der lokalen Shell aus verbinden, also dachte ich zuerst, wenn etwas mit dem letzten Upgrade von Zend Framework nicht stimmt, aber nach einiger Zeit habe ich herausgefunden, dass die Antwort sehr einfach ist - SELinux blockierte entfernte Verbindungen von PHP-Skripten, die von Apache Web ausgeführt wurden Server. Der Fehlercode (13) am Ende der Fehlermeldung bedeutet "Erlaubnis verweigert", das ist also der Hinweis, ob Sie ein ähnliches Problem haben oder nicht.
Wie auch immer, loggen Sie sich als root ein und machen Sie
%Vor%, damit es funktioniert.
Denken Sie natürlich zweimal darüber nach, dass Sie den Webserver etwas unsicherer machen. Tun Sie das also nicht, es sei denn, Sie sind sicher, dass Sie ihn brauchen.
Tags und Links php mysql mysqli mysqladmin