4/4 Update
观察了好久,现在遇到的奇怪问题都可以重启了。
比如下图黄色所示。似乎是v3版本的 Kick Optimization 特有的,而且仅在 10700f 的机器上出现,另外一台 13400f 似乎没有。
经过观察,有四个环境,可能会有其中某个环境机器人会因为踢球前的 Positioning 卡好久,和之前 C++ 的优化打开环境噪声时的表现一样,然后Game Time就会跑过十分钟从而中止,但是因为我设置的超时信号,所以在时间横坐标图可以看到一段不那么连贯的折线。
目前也不清楚从何下手,暂时搁置了这个问题。
应该和之前 “server开久会出问题” 没有关系,说起这个,之前的定时重启wrapper的重启函数其实并没有真正调用)也算是小BUG,修好后截至目前没有再观测到其他运行失败的现象。
wrapper 代码如下
Restart Wrapper
1 | from datetime import datetime, timedelta |
Safe Wrapper
没想好它的名字,随便取一个
1 | import time |
背景
优化老莫名奇妙挂掉,前几次以为是小崽子们同一个端口开了server,warning之后又炸了,于是想到前辈们口口相传的server开久会出问题的传说,加了个定时重启wrapper,结果还炸!
复现一次大概要3M steps,继续等了两天。
从数据面板上看就是reward突然掉下去,RoboViz看是一片黑,就像是端口被抢占了。
python调试
学了一下 Python 的调试,gdb那边因为用的conda,python3-dgb这个包装的时候版本不对,懒得折腾,找了另一个项目:pystack。
pystack
PyStack is a tool that uses forbidden magic to let you inspect the stack frames of a running Python process or a Python core dump, helping you quickly and easily learn what it’s doing (or what it was doing when it crashed) without having to interpret nasty CPython internals.
apt 安装一些依赖
1 | sudo apt install libdw-dev libelf-dev pkg-config |
1 | git clone [email protected]:bloomberg/pystack.git pystack |
attach
没用到什么高级的方法,只是为了打印卡住时的堆栈,删掉了库函数的调用栈
1 | ~/pystack (main) » pystack remote 449389 |
可以看出是在reset时,agent往server发beam消息卡住了。但是socket没报错关闭,程序也就没有结束,很诡异
1 | ~ » netstat netstat -a | grep '410[0-4]' |
看一下其他三个 train_env 和一个 eval_env,都卡在了和父进程的通信这,是等<449389>返回信息?
1 | ~/pystack (main) » pystack remote 449390 |
再看一眼main.py(只保留了learn()线程的堆栈信息)
1 | ~/pystack (main) » pystack remote 449276 |
应该就是某个环境挂了同步等待。
暂时不明白什么原因,也没设置server log,最直接的处理办法就是超时重启了(
先写一个wrapper,用 alarm 计时,超时重启server,希望有用。
有效了再更新。