最近压力比较大,不咋能睡着。
生活
- 又完成了一件事儿:买戒指。队友做攻略比较足,周天下午连逛了 9 家店,最后顺利买下。哎,看了那么那么多,最后还是买了返璞归真的素圈。
- 买了一大束花,哦单位应该是 “袋”。本来看着提袋款的花的数量比较多,应该比较大比较好看,但是没想到它有个 30*30*30 的袋子。有了袋子呢,就不方便抱着花拍照了。在想着怎么能给改成捧花花束。希望能成功吧。
学习和折腾
- 这周被工作快摧残蔫儿了,略过
工作
- 就,完全没想到,实现一个很小很小的需求,竟然遇到这么多问题。需求是在代码里面加个能用配置文件指定的阈值,根据阈值过滤文字。之前之所以没加这个阈值是因为发现即使把阈值放得很低,也会导致 fscore 降低,但现在出现了一些 badcase,就只好再给加上了。
- 需求明确后,开始写代码。写完后自测,crash,再改,继续 crash。整个程序都是一层套一层的匿名函数,报 panic 的时候可用信息非常少,只有框架的调用栈,完全没有我自己写的带谬的调用栈。小问题,没有什么是单步 debug 解决不了的。
- 要单步调试,就需要配置各种环境。之前本来有配好的环境(就一个 go 版本的 opencv),但前一阵子工程同学加了些功能,导致需要依赖更多东西。拿到依赖列表我傻了:公司操作系统被三体人锁死在了 Debian9,有七八个库不能通过 apt 安装,需要自己从源码编译(如果升级到 Debian10,那么就只有两个库需要编译了)。而且,老版本嘛,所以各种工具链也都非常老,用新版本工具编译不会出问题的代码,在这里疯狂报错。
- 折腾了一整个下午配置环境,无果。最终只能将线上编译镜像拉下来,起个 docker 编译,然后再在这个 docker 里面运行。由于 vscode 等 ide 连不进来,加上自己也不会用 gdb,所以如果出错了呢,就只能 print 大法好,一句一句加 print。
- 手动在控制台里面找服务一切正常,但在代码里找服务就各种找不到。
- 好容易熬过编译、自测、发版,两个整天过去了……心痛
- 在第一个 IDC 上线了之后,还需要在第二个 IDC 上线。由于合并其他改动一起上线,所以上线前需要再自测一下,避免事故。改好配置,在测试服务上起实例,服务状态一直是 “等待服务启动”,进容器发现服务一直在崩溃。再三检查服务配置没问题、代码版本也对着,又把改动的地方挨个捋了一遍也确定没问题,但上线就是崩溃。甚至把新加的代码完全屏蔽掉,还是崩溃。回滚代码、回滚配置,都无效。
- 这时候工程同学说,可能是编译 opencv 的时候用了 with_ipp 参数造成的。ipp 是 Intel 独有的,在 Intel 的 CPU 上可以起加速作用,但是 AMD 处理器并没有这个优化,所以代码一旦跑在 AMD 处理器的实例上就崩溃了。咨询了 oncall“如何指定 CPU 型号”,告知说机器是 k8s 自动统一分配的,用户不能自己指定。
- 那为了做验证,只能不停迁移机器。在迁移了十几次后(半下午过去了),容器终于被调度到了一个 Intel 的 CPU 的机器上。测试无误,上线。
- 之前是两个集群共享缓存。现在由于集群功能不一样了,所以不能共用缓存了。那就得再改缓存的配置。由于缓存兜住了接近 70% 的请求,一下子将缓存搞掉框定会导致服务被打满,所以只能渐进式地改缓存。改配置后不能自大生效,需要重启机器,又出现了前面的调度到 AMD CPU 实例上导致崩溃的问题。而且由于是渐进式,一个实例没起来,后续流程将被阻塞,所以一直需要人工介入干预。
- 就,一个这么小的小需求,花了整整三天。太难受了。
发表回复