托管者的困扰

Author: 何先生, Created: 2018-03-10 13:22:12, Updated:

我的Windows上跑的托管者每隔一段时间就会自己崩溃掉,使得托管者离线。问题来了,正常来说托管者崩溃重启一下就行了,但是烦人的windows托管者每次运行之后产生一个新的SID,而原来的机器人没有原来的SID在线又不能停止去更新参数更换托管者,必须要删除,原来机器人有很多的参数,机器人本地也用_G()记录了很多的数据,删除重新创建必然会有很多的问题。请小小梦看看怎么解决,要么让托管者更稳定不要老是崩溃,要么不要老是变动SID,要么你可以让机器人可以停止来更新数据。


More

何先生 只要是更换托管者机器人的数据库不会丢就好办了,日志还不重要。不过最好就重新运行托管者那个SID不变是最好的,这样就不用那么麻烦操作,有时候在外面没有电话要操作太多的东西真的是不方便。丢失了托管者之后机器人的状态看起来还是正常的,这样经常会漏重启一两个机器人造成策略没有有效运行。

何先生 谢谢小小梦,我用的是桌面版的托管者,没有办法截图,我觉得可能是和服务器的运行环境有关,我在日本有一个云服务器,跑的策略是一样的就没有崩过,而在美国机房的就崩了两次了,都是阿里云的服务器

小小梦 好的 这个问题 我记录, 您这边方便的话 加我一下 : 359706687 , 然后 把崩溃的 windows 托管者 截图( 如果是 命令行的版本)。 崩溃的 策略代码 可以发我一下么, 方便判断下 是那些问题导致的。 如果 托管者 出现问题 关闭了, 只用在控制中心 删除托管者, 然后在 再重新运行托管者, 重新运行机器人(不用新建) 就可以了, 机器人的数据库 不变, 日志 还是都有的, 除非是 您在您电脑上 删除了托管者目录下所有文件, 重新下载了一个托管者程序,那样 之前的机器人的数据库 就没有了,机器人会重新创建数据库。 所以如果您打算更换托管者程序,在更换前 需要 备份一下 Logs 文件夹下的 db3 机器人数据库, 文件名就是对应的机器人ID , 备份后 删除。 这个机器人在新的托管者 上运行后,把原来的DB3数据库文件替换掉新创建的 ,就可以恢复之前的日志了。

小小梦 看不到 日志了,直接就过滤了。

何先生 那会不会在机器人下面的日志栏看到错误日志呢

何先生 这个也不错噢,谢谢

小小梦 昨天专门咨询了下,您可以使用 SetErrorFilter 这个 函数, 在API 文档: https://www.botvs.com/api#SetErrorFilter , 您可以看下, 被此函数 过滤的 错误日志类型 不会写入数据库。 就不会导致 机器人 数据库文件 膨胀了。

何先生 你说的原因应该是根本原因,日志不是我的策略写出来的,而是这段时间访问交易所报错所输出的错误,托管者写进去的,那这样我只能在现在暂时用LogReset(5000) 对付一下了。

小小梦 有些日志 不是 您主动输出的 , 比如 您获取 行情 ,如果超时 报错 , 也会 产生一条 报错日志的。

何先生 强烈建议你把日志表和状态栏表、配置键值对表等分开数据库存储,这样即可以提高数据库的访问效率,也可以加强配置文件的安全性。配置信息是每次运行策略都是要去读写的,但是日志内容是可要可不要的,像我们现在其实键值对表没有多大的数据,但是因为日志这么大导致读写很慢,怪不得我会感觉到这几天你们网站慢了,我打开机器人都要很久,就是因为日志内容导致数据库有问题而使得读取状态信息也有问题。

何先生 我是根本没有输出日志,只是输出了LogProfit和LogStatus,日志只是在执行了buy和sell的时候有正常情况下没有,而且跑了半个月来都没有多少次buy和sell

小小梦 您可以这样处理, 在程序里面 每间隔 一定时间周期,就调用 LogReset(5000) 或者 参数设置 10000 , 定期 清除一些 日志 这样就可以保持 DB数据库文件 不至于膨胀过大。

小小梦 您是用 SetErrorFilter 过滤了日志 显示, 还是 用 LogReset 清除了日志。

小小梦 最近很多 交易所 都被墙了 , 如果用国内的托管者访问 可能会有大量 超时 报错信息 ,导致 频繁 写入 数据库, 时间一长 ,日志 数据 量可能很惊人。

何先生 日志和本地存储的键值对都是存放在DB3文件当中去的吗,这样日志文件爆掉了硬盘都就没得搞了,又不能删除DB3,又不能把DB3导出到新库,一方面是硬盘已经爆了,另一方面导出了还是这么大的内容

何先生 我这个机器人本来已经去除了所有日志了,正常运行过程当中除了修改状态栏基本没有日志输出,为什么还搞出这么大的日志文件呢

何先生 吓死人了,原来日志有27个G,爆了硬盘,数据库文件有问题了

小小梦 > 【知识点补充】:在使用循环操作过程中,可以看到在数据库文件目录下生成了XXX.db3-journal的临时文件,且大小随时在变动。(关于journal文件的描述参见博文)journal是SQLite用于回滚操作的暂存文档,当数据库写入失败时,通过journal文档可以复原到未更改之前的数据,通过观察本机目录下的journal文件发现,其大小在随时变动因此可以猜测,代码中循环的每一步都在进行数据库打开、写入操作,因此导致耗时超出容忍极限。 这个 不能删除 。

小小梦 是不是 有其他 软件 打开 数据文件了,您可以尝试 重启下 托管者所在 系统。看能否解决。

何先生 我发现里面Log目录的机器人目录里面除了.db3文件还有一个.db3-journal文件,我把它移到外面去之后可以运行机器人了,但是托管者程序却不停地报以下的错,[Log] database disk image is malformed

何先生 再次运行命令行的版本,提示数据库在锁状状态,无法成功运行[Log] database is locked 2018/03/26 10:17:12

何先生 加你了,没通过