您好我正在尝试使用呼吸机/工作人员/接收器模式使用 ZeroMQ 发送大数据包。
我尝试添加工人。每次,sink 进程内存使用量都会增加一点。然后它在大约 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。
谢谢