Der Inhalt ist wie der Titel. In Rails, wenn ein Mysql2-Verbindungsfehler angezeigt wird Wenn Sie den Dateideskriptor abnormal verwenden, kann dies zusammenhängen.
Bei einem bestimmten Service (Rails, Puma)
Mysql2::Error::ConnectionError
Ist so oft vorgekommen, dass der Dienst nicht genutzt werden kann.
Wenn Sie dem Protokoll im Detail folgen, gibt es andere
Errno::EMFILE (Too many open files @ rb_sysopen ...(Abkürzung)
Es scheint, dass auch ein solcher Fehler auftritt.
des Weiteren,,,
#Überprüfen Sie die Obergrenze des Dateideskriptors
ulimit -n
#Überprüfen Sie den Dateideskriptor des Puma-Prozesses
for i in $(ps aux | grep "[p]uma" | awk '{print $2}'); do sudo ls /proc/$i/fd | wc -l; done
Wenn Sie die Anzahl der geöffneten Dateien des Prozesses mit dem obigen Befehl überprüfen Anscheinend war der Dateideskriptor voll.
Eigentlich in dem Juwel namens ** Mechanize **, das ich in der Anwendung verwendet habe, anstatt die Datei zu öffnen Es scheint, dass beim Erfassen von Daten von außen eine Verbindung hergestellt wurde. (Es scheint ein Juwel zu sein, das zum Schaben verwendet wird.)
Der Dateideskriptor scheint sowohl ** Verbindungen als auch Dateien ** zu zählen Das Problem trat auf, weil eine große Anzahl von Verbindungen kontinuierlich erstellt wurde, ohne gelöscht zu werden. (Vielleicht hängt MySQL auch mit der Verbindung zusammen? Bitte kommentieren Sie von einer detaillierten Person.)
Das Problem ist einfach, dass die Verbindung offen bleibt. Ich muss es schließen.
Die Verbindung von Mechanize scheint geschlossen zu sein, wenn Sie die folgende Methode aufrufen Ich werde es aufrufen, wenn die letzte Verarbeitung der verwendeten Verbindung abgeschlossen ist.
Mechanize.shutdown
Danach löschen wir die vorhandene Verbindung, indem wir den Server neu starten.
Recommended Posts