Storm和Kafka:越来越多的打开文件描述符

时间:2014-11-21 13:03:33

标签: java exception apache-kafka apache-storm

我目前在使用Kafka和Storm时遇到了问题。 直到几天前,我使用的是Windows计算机,但现在已经开始使用mac。

我的Kafka队列充满了约。 4,800万条消息。

现在发生了什么,大约是4600处理过的消息我得到了10240个打开的文件描述符,我没有删除它。

当我达到10240个打开的文件描述符时,Storm会尝试打开一个zookeeper文件并失败并显示:

java.io.FileNotFoundException: /var/folders/2p/3xcy9hp10gd852_06v0dzg440000gn/T/c5a2bffa-ff9a-4093-9002-79cee98385dc/workers/5a809959-53b7-48f4-848e-ed585007d9ed/heartbeats/1416569332681 (Too many open files)
    at java.io.FileOutputStream.open(Native Method) ~[na:1.8.0_25]
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213) ~[na:1.8.0_25]
    at org.apache.commons.io.FileUtils.openOutputStream(FileUtils.java:367) ~[commons-io-2.4.jar:2.4]
    at org.apache.commons.io.FileUtils.writeByteArrayToFile(FileUtils.java:2094) ~[commons-io-2.4.jar:2.4]
    at org.apache.commons.io.FileUtils.writeByteArrayToFile(FileUtils.java:2078) ~[commons-io-2.4.jar:2.4]
    at backtype.storm.utils.LocalState.persist(LocalState.java:86) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
    at backtype.storm.utils.LocalState.put(LocalState.java:66) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
    at backtype.storm.daemon.worker$do_heartbeat.invoke(worker.clj:68) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
    at backtype.storm.daemon.worker$fn__4527$exec_fn__1096__auto____4528$heartbeat_fn__4529.invoke(worker.clj:357) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
    at backtype.storm.timer$schedule_recurring$this__1639.invoke(timer.clj:99) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
    at backtype.storm.timer$mk_timer$fn__1622$fn__1623.invoke(timer.clj:50) ~[storm-core-0.9.2-incubating.jar:0.9.2-incubating]
    at backtype.storm.timer$mk_timer$fn__1622.invoke(timer.clj:42) [storm-core-0.9.2-incubating.jar:0.9.2-incubating]
    at clojure.lang.AFn.run(AFn.java:24) [clojure-1.5.1.jar:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25]

在做了一些谷歌搜索后,我发现增加了最大文件限制,我按如下方式增加了它们(launchctl):

launchctl limit
    cpu         unlimited      unlimited     
    filesize    unlimited      unlimited     
    data        unlimited      unlimited     
    stack       8388608        67104768      
    core        0              unlimited     
    rss         unlimited      unlimited     
    memlock     unlimited      unlimited     
    maxproc     1064           1064          
    maxfiles    1638400        2048000  




ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 4096
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1064
virtual memory          (kbytes, -v) unlimited

仍然没有好处,它一直在崩溃。正如我已经提到的,Kafka Spout的发射量似乎超出了我的拓扑结构所能承认的范围。

有任何提示吗?

谢谢!

PS:我正在使用Storm 0.9.2-incubatin,核心和kafka。

1 个答案:

答案 0 :(得分:1)

在fiddlign周围我发现错误的Http-Client使用是导致此错误的原因。 我正在使用风暴的钩子功能,有时连接正在等待响应,但是当服务器没有时,它会因为每个http连接的插座数量增加而空闲。