问题描述
我最近开发了一个C++ 多线程程序,测试没有问题,封装docker测试也没有问题,然后提交给客户了,然后在他那边测试有问题,不定时、不定位置异常中断,以前一直认为只要封装了docker就万事大吉,测试提交肯定没有问题,突然冒出这个问题,有点慌,不知道代码上再要怎么改。然后不断重跑测试,测试中发现一个异常情况,就是每次中断都有一个不起眼的Killed提示,如下图
问题分析
开始我以为是代码中进行了逻辑控制,搜索Killed没有找到,然后借助AI进行排查这个问题,AI回答如下:
解决方案(docker desktop 版本)
当然现在知道问题原因了,可以搜索各种帖子来解决这个问题。我这里是用Windows 版本的docker desktop ,直接加载镜像运行容器的,所以与Linux版本的操作有所不同,特此记录
1、开启docker监控
在控制台执行docker stats,进行运行容器资源进行监控
docker stats
监控界面不断刷新,可以看到内存、CPU占用等等信息
通过上图一看内存只有2G,所以肯定需要加大内存
2、增加内存
网上很多,通过在命令中增加 -m指定内存容量
docker run -itd -m 8g -v D:/:/D d7e770648fa4 /bin/bash
但是上面这个方法对于docker desktop失效,因为docker desktop最大权限来自于软件界面上的操作,所以正确打开姿势如下:
2.1 打开设置界面
2.2 、打开Resources设置
果然,就是这里设置了内存限制2G,还有交换内存1G
往后面调整好,点击Apply按钮即可(注意:这里要注意自己电脑实际内存多少,要少于自己电脑本身内存,否则后面电脑特别卡,应用成功后这部分内存直接划分到应用了,宿主电脑用不了)
docker desktop 测试监控技巧
1、选择自己运行的容器
2、鼠标左键点进去,弹出如界面,选择stats按钮,在这里监控程序跑的一举一动
就此!!!