mysqli php zufälliger Verbindungsfehler

8

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
    
Arav 11.11.2016, 01:50
quelle

3 Antworten

6

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

  • tcp_tw_reuse (Boolean; Standard: deaktiviert; seit Linux 2.4.19 / 2.6)           Erlaube es, TIME_WAIT-Sockets für neue Verbindungen wiederzuverwenden, wenn dies der Fall ist           ist vom Protokollstandpunkt aus sicher. Es sollte nicht geändert werden           ohne Beratung / Anfrage von technischen Experten.
      

    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".

  • tcp_tw_recycle (Boolean; Standard: deaktiviert; seit Linux 2.4)           Aktivieren Sie das schnelle Recycling von TIME_WAIT Sockets. Aktivieren Sie dies           Option wird nicht empfohlen, da dies Probleme verursacht, wenn           Arbeiten mit NAT (Network Address Translation).
      

    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.

  • tcp_max_tw_buckets (integer; Standard: siehe unten; seit Linux 2.4)           Die maximal zulässige Anzahl von Sockets im TIME_WAIT-Status           das System. Diese Grenze existiert nur, um eine einfache Verweigerung zu verhindern.           Of-Service-Angriffe. Der Standardwert von NR_FILE * 2 ist           eingestellt, abhängig vom Speicher im System. Wenn das ist           Nummer ist überschritten, die Steckdose ist geschlossen und eine Warnung ist           gedruckt.
      

    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 bei tcp_tw_recycle würde einer von ihnen einfach aus netstat 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.

PS: Es gibt mehr mögliche Lösungen für Ihr Problem, lesen Sie den vollständigen Artikel für eine detaillierte Beschreibung des Problems.     
Peter Darmis 16.11.2016, 19:11
quelle
1

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%

Danksagungen .

    
Jordan Enev 15.11.2016 00:08
quelle
-2

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.

    
krishna 21.11.2016 06:50
quelle

Tags und Links