我正在尝试调试与beantalkd失去的连接。我希望Pheanstalk进程应该死掉并受到监督以重新启动工作人员,或者Pheanstalk库重新连接丢失/悬挂的袜子。似乎是这样的,我有一些僵尸程序工人以某种方式失去了与beantalk守护程序的连接。
体系结构的高级视图:
工人是用PHP编写的,并且使用Pheanstalk。
beanstalkd进程使用带有exec f79679c48b19 ash -c netstat -p
命令的docker schickling / beanstalkd运行,因为ECS在卷准备就绪之前未足够快地公开卷,这将导致容器根本无法启动
标准的AWS Network Load Balancer在beantalkd容器和工作器之间,将流量从端口11300传递到运行beantalkd的docker容器。
到目前为止,我已经完成调试:
大约一个小时后(我还没有确定确切的时间),我在beantalkd容器上看到已建立的TCP连接开始丢弃docker /usr/bin/beanstalkd: prot.c:710 in check_err: write(): Connection reset by peer
。
我看到这样的间歇性日志发送到cloudwatch:
When I strace the process I get something like:
sudo strace -p2768
strace: Process 2768 attached
restart_syscall(<... resuming interrupted poll ...>) = 0
poll([{fd=7, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
poll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, 1000) = 0 (Timeout)
poll([{fd=7, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
poll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, 1000
然后在工作端,我看到这些进程仍然存在,并且套接字打开了各自的文件描述符。但是却没有得到工作-那些只是堆积在豆荚的容器上。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimaryDark">@color/color_primary</item>
<item name="colorAccent">@color/color_accent</item>
<item name="android:textColor">@color/white</item>
</style>
我还可以做些什么来进一步调试此问题,以找出问题所在: