我有一个流浪者创建的虚拟机运行股票ubuntutrusty64,有一个主机CPU分配给它。 在这个虚拟机中,我有一个运行stock Python 3.4.3的Docker映像:
FROM python:3.4.3-slim
ENTRYPOINT ["/usr/local/bin/python"]
当我执行任意Python脚本时:
^{pr2}$像这样:
sudo docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py
一切都很好,集装箱运行,只是坐在那里做很少的事。如果我在Python脚本中添加print语句,它将按预期发送到stdout。在
我也在那个虚拟机中安装了syslog ng,我的目的是使用我的容器化Python作为syslog ng目的地:
source s_foo {
unix-stream("/dev/log");
};
destination d_foo {
program("'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py'");
};
log {
source(s_foo);
destination(d_foo);
};
但是当我重新加载配置时,syslog ng消耗了虚拟机大约20%的CPU和主机的100%的CPU,而且容器永远不会被创建(运行sudo docker ps -a
不会生成容器)。运行sudo syslog-ng-ctl stats
告诉我它正在尝试执行程序:
dst.program;d_foo#0;'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py';a;dropped;0
dst.program;d_foo#0;'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py';a;processed;2
dst.program;d_foo#0;'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py';a;stored;0
我的感觉是,因为syslog ng占用了20%的CPU,而主机的CPU却占了100%,这是一个I/O绑定,VM在努力跟上。为此,我尝试在Python脚本中使用和刷新stdin和stdout,但据我所知,因为它甚至没有创建容器,所以还没有达到脚本的程度。在
所以我的下一个想法是肯定有一些docker的-a
,-d
,-i
,和{
我错过了什么?在
如果您在前台启动syslog ng(syslog ng binary-Fedv),您会看到syslog ng在一个循环中启动和停止程序目标,这将导致100%的CPU旋转。 但在本地调查问题后,您应该将程序目标用作(不带'): 程序(“sudo docker run-i-v/scripts:/scripts python test/scripts/测试.py“)
比尔, 米切克
相关问题 更多 >
编程相关推荐