嗨我想用ZeroMQ使用呼吸机/工人/接收器模式发送大型数据包。Zeromq内存泄漏(pyzmq)
我尝试添加工人。每次,接收器进程内存使用量都会增加一点。然后它达到在大约6或7的工人一个临界点,其中呈指数突然存储器增加,直到它死亡与:
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug Assertion failed: (msg_->flags | ZMQ_MSG_MASK) == 0xff (zmq.cpp:211)
> Python(42410,0xaccb8a28) malloc: *** mmap(size=3559424) failed (error
> code=12)
下面是代码(仅示出工人/汇图案):
import sys
import resource
import zmq
import time
context = zmq.Context()
if sys.argv[1] == 'worker':
# Socket to send messages to
sender = context.socket(zmq.PUSH)
sender.connect("tcp://localhost:5558")
while True:
msg = 'x' * 3559333
time.sleep(.01)
sender.send(msg)
else:
# Socket to receive messages on
receiver = context.socket(zmq.PULL)
receiver.bind("tcp://*:5558")
while True:
msg = receiver.recv()
print msg[0:5], len(msg), resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
这仅仅是缺乏硬件资源吗?积压的数据?或者有没有办法避免这种情况?
我正在运行带有16GB内存的OSX Mountain Lion和带有zmq 2.2.0.1的Python 2.7。
感谢
感谢您的这一点。我尝试了nicing,它并没有帮助,但是它是一个缺乏网络。正如你所说,我可能会沉没在一个单独的盒子里。如有必要,我甚至可能会有多个接收器。 – user1556658
这确实表明,尽管我最好不要在多个盒子中传播这个。相对于网络传输限制,计算时间太少。我最好选择ec2上的20个计算单元箱中的一个,并在那里完成所有工作。我想知道这种情况发生的频率如何,在一个将hadoop作为所有这些任务的解决方案出售的世界里。 – user1556658
这当然比以上更多,但不会比分隔标签文本和计算和过滤更多。 – user1556658