个人做商贸网站,如何查询一个网站的空间服务商,api接口大全,丁香花在线视频观看免费文章目录 问题描述原因分析分析1分析2验证猜想 结论和经验 问题描述
运维新增对某服务的监控后发现#xff1a;内存不断上涨的现象。进一步确认#xff0c;是因为有多个导出日志操作导致的内存上涨问题。
进一步的测试得出的结果是#xff1a;容器刚启动是占用内存约为50M… 文章目录 问题描述原因分析分析1分析2验证猜想 结论和经验 问题描述
运维新增对某服务的监控后发现内存不断上涨的现象。进一步确认是因为有多个导出日志操作导致的内存上涨问题。
进一步的测试得出的结果是容器刚启动是占用内存约为50M左右在多次地导出日志操作后内存能涨到2G以上。
问题为什么日志导出会导致容器的内存不断上涨
原因分析
分析1
在宿主机器中使用docker stats 查看服务内存占用内存792MB
在docker 容器中通过ps aux命令查看容器中使用的总内存29MB147MB139MB315MB左右 使用kill命令杀死服务的workerman子进程父进程不跑业务并且在容器中杀不死可以看到
workerman子进程重新拉起后内存24MB21MB45MB重新拉起后的进程内存占用减少239MBdoker stats 内存在kill后的内存减少了229MB
猜测容器中只有wokerman的子进程会在执行导出后占用内存并且使用ps命令也没有看到其他进程。怀疑容器本身存在缓存并且docker stat命令查看的内存值应该包含这部分缓存的内存。
分析2
使用docker stat查看容器的内存使用为666MB 在容器中使用htop命令查看容器中各个进程的总内存约为27MB118MB85MB 230MB左右包含部分的代码缓存等 在 /sys/fs/cgroup/memory/docker//memory.stat 中查看内存情况
验证猜想
为了验证确实是 cache占用的内存我们手动清理cache缓存验证一下如下
运行以下命令可以清理 PageCache
sudo sh -c “echo 1 /proc/sys/vm/drop_caches” 这将清空 PageCache 中的缓存数据但不会影响正在使用的程序数据。 可以看到docker stats 的内存也从 666.MB降到了182MB和 /sys/fs/cgroup/memory/docker//memory.stat 中查看内存情况基本一致。
结论和经验
结论不是代码中的内存泄露是cache缓存占用的内存。
经验
ps aux 查看的RSS只包含了物理内存不包含 buffer/cache 内存使用docker stats 命令查看到的内存数据不是实际上的物理内存而是包含了cache部分使用该数据用于监控不一定准确。从 /sys/fs/cgroup/memory/docker/container-id/memory.stat 可以看到docker容器实际的内存使用情况很有用如有必要可以使用 sudo sh -c echo 1 /proc/sys/vm/drop_caches 释放cache内存