Erhöhen Sie die Verbindungszeit (2) in RestClient / Net :: HTTP auf AWS Linux

8

Ich verwende rest-client , um an einen sehr langsamen Webdienst zu senden. Ich setze timeout auf 600 Sekunden und ich habe bestätigt, dass es an Net :: HTTPs @read_timeout und @open_timeout weitergegeben wird.

Nach etwa zwei Minuten erhalte ich jedoch einen Low-Level-Timeout-Fehler, Errno::ETIMEDOUT: Connection timed out - connect(2) :

Der relevante Teil des Backtrace ist

%Vor%

Es sieht so aus, als ob die Codezeile, die den Fehler verursacht,

ist %Vor%

Es sieht so aus, als ob der zugrundeliegende connect(2) Systemaufruf eine Zeitüberschreitung von ungefähr zwei Minuten hat und die an Net :: HTTP übergebenen Timeout-Parameter diese nur verkürzen, nicht verlängern können. Gibt es eine Möglichkeit, die Socket-Parameter zu ändern, um ein längeres Timeout festzulegen?

Bearbeitet zum Hinzufügen: Dies scheint nur ein Problem auf unseren AWS Linux-Servern zu sein - auf meinem MacOS-Entwicklungscomputer funktioniert das Zehn-Minuten-Timeout. Ich nehme an, dass das default connect() timeout auf MacOS / BSD länger ist, aber ich weiß es nicht wirklich.

    
David Moles 15.11.2016, 00:54
quelle

2 Antworten

4

Als Erstes könntest du einfach die tcp_syn_retries -Konfiguration aktualisieren, die das Update enthält /proc/sys/net/ipv4/tcp_syn_retries Datei. Referenz hier .

Wenn das nicht funktioniert, müssen Sie die Optionen SO_KEEPALIVE oder TCP_USER_TIMEOUT aktivieren. Aber wahrscheinlich gibt es keine Schnittstelle dafür in rest-client .

Vielleicht müssen Sie also eine Verzweigung machen oder die % co_de erstellen % und Socket allein.

Mike Perham hat darüber in seinem Blog geschrieben.

>     
André Guimarães Sakata 18.11.2016, 23:52
quelle
1

Vielleicht wirst du aus den Sockeln raus. Die Sockets benötigen einige Zeit, bevor sie wieder verfügbar sind. Wenn Sie sich in kurzer Zeit für viele Verbindungen öffnen, kann dies das Problem sein.

Überprüfen Sie ulimit -n , um die maximale Anzahl der geöffneten Dateideskriptoren zu überprüfen. Denken Sie daran, dass ein Socket eine Datei ist, die Sie ändern müssen, um mehr Sockets zu öffnen. Um die maximale Anzahl der geöffneten Dateien zu ändern, verwenden Sie sudo ulimit -n 1000000 .

Weitere Informationen finden Sie in >.

    
Andrés 24.11.2016 14:54
quelle

Tags und Links