我正在使用es模块与elasticsearch服务器进行通信。
当我进行大量插入时,在大约10000次查询后出现错误:
Trace: { [Error: connect EADDRNOTAVAIL]
code: 'EADDRNOTAVAIL',
errno: 'EADDRNOTAVAIL',
syscall: 'connect' }
OS X 10.9.3
❯ elasticsearch -v
Version: 1.2.0, Build: c82387f/2014-05-22T12:49:13Z, JVM: 1.7.0_45
❯ node -v
v0.10.26
根据亚历克斯的建议:
❯ ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-v: address space (kbytes) unlimited
-l: locked-in-memory size (kbytes) unlimited
-u: processes 709
-n: file descriptors 256
❯ sudo sysctl -w kern.maxfilesperproc=20000
Password:
kern.maxfilesperproc: 10240 -> 20000
但同样的结果:在大约10000次操作之后,它失败并出现相同的错误。
我在脚本执行期间运行命令netstat -an | grep -e tcp -e udp | wc -l
,持续约30秒:
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
109
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
110
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
110
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
110
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
114
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
114
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
112
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
114
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
114
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
114
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
113
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
111
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
112
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
112
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
112
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
112
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
110
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
112
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
112
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
112
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
110
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
112
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
110
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
110
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
108
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
108
[user@mac] ~
❯ netstat -an | grep -e tcp -e udp | wc -l
108
[user@mac] ~
❯
答案 0 :(得分:0)
我认为node.js插入请求是以异步模式处理的,因此它会创建更多连接,elasticsearch可以处理。你可以使用一些延迟或连接池(不确定它是如何在node.js中完成的)?
更新
同时使用ulimit -a来检查最大打开处理程序数,并找到一种方法来增加它Maximum number of open filehandles per process on OSX (and how to increase)
答案 1 :(得分:0)
如果从脚本和某些数据源运行这些插入,我建议不要为每个条目执行插入操作。相反,我建议您使用批量上传API。您正在使用的节点库支持此功能,并记录在案here。