[LINUX] [Rails] Mechanize verbraucht viele Dateideskriptoren

Der Inhalt ist wie der Titel. In Rails, wenn ein Mysql2-Verbindungsfehler angezeigt wird Wenn Sie den Dateideskriptor abnormal verwenden, kann dies zusammenhängen.

Hintergrund

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.

Ursache

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

Korrespondenz

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

[Rails] Mechanize verbraucht viele Dateideskriptoren
Verbinde viel Python oder und und
Holen Sie sich viele Twitter-Tweets auf einmal
Python, das viele Excel zu einem Excel zusammenführt
Python + Selen zu GW viele Mail-Anzeigen
Geben Sie das Ausgabeergebnis von sklearn.metrics.classification_report als CSV-Datei aus