我有一个golang程序连接到其他服务(和本地consul代理程序),并且在与consul代理进行交谈时失败,出现以下错误:当有大量文件句柄可用时,执行程序用尽文件句柄
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
这仍远低于限值。系统中的其他程序都很好,我可以使用CURL服务,我可以CURL这位总领事代理,创建文件和所有内容,但golang程序仍然失败。
关于如何调试的任何想法?我应该在哪里看?
只是两个想法: 答)不清楚错误发生在哪一方(可能是golang客户端是责备,但服务器发生错误), B.我不排除错误发生的可能性错误处理和真正的问题可以远离文件句柄。 嗯。不是很乐观。 祝你好运! – Ingaz