2017-10-28 13 views
0

他のサービス(および地域の領事エージェント)に接続するgolangプログラムがあり、次のエラーで失敗します。多くのファイルハンドルがある場合、ファイルハンドルが不足しています。

Put http://localhost:9501/v1/kv/health_checks/item: dial tcp: lookup localhost: too many open files 

これはすべて問題ありません。システムとプログラムのオープンファイルの数を確認できます。

ulimit -a 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 7871 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 16384 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 7871 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

そしてlsof

lsof | wc -l 
5343 

これは仕方限界以下ではまだです。システムの他のプログラムはすべていいです、私はサービスを呼び出すことができます、私はこの領事代理人を呼び出すことができます、ファイルやすべてを作成するが、golangプログラムは失敗し続けます。

これをどのようにデバッグすることができますか?どこを見ているのですか?

+1

わずか2思考: A)私がエラーである可能性を除外しない側のエラーoccures(golangクライアントのせいですが、エラーがサーバー上occuresことは可能かもしれない)、 B.れている明確ではありませんエラー処理と実際の問題は、ファイルハンドルから遠く離れている可能性があります。 Hm。あまり楽観的ではありません。 幸運を祈る! – Ingaz

答えて

4

Any ideas on how I could debug this? Where should I be looking at?

実行中にSIGQUITを送信します。これは、すべての実行中のルーチンのバックトレースを行います。あなたはおそらくそこにあなたの犯人を見つけるでしょう。

私のお金は、http.ResponseのBodyをClose()することを忘れることになります。これは、私が最も頻繁に行うことです。

0

異なるエンドポイント/サービス(つまり、クローラを実行している場合)に接続する場合は、アイドル状態の接続を検討してください。closing

関連する問題