20130212


发布于

|

分类

最近压力比较大,不咋能睡着。

生活

  1. 又完成了一件事儿:买戒指。队友做攻略比较足,周天下午连逛了9家店,最后顺利买下。哎,看了那么那么多,最后还是买了返璞归真的素圈。
  2. 买了一大束花,哦单位应该是“袋”。本来看着提袋款的花的数量比较多,应该比较大比较好看,但是没想到它有个30*30*30的袋子。有了袋子呢,就不方便抱着花拍照了。在想着怎么能给改成捧花花束。希望能成功吧。

学习和折腾

  • 这周被工作快摧残蔫儿了,略过

工作

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


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注