侧边栏壁纸
  • 累计撰写 47 篇文章
  • 累计收到 0 条评论

项目内存增大解决方案之日志优化

2022-12-16 / 0 评论 / 174 阅读
温馨提示:
本文最后更新于 2022-12-16,已超过半年没有更新,若内容或图片失效,请留言反馈。

本文主要实践在 PHP (Swoole 环境)Golang 项目中的 K8S 生产环境解决方案

内存现象

在部署到 K8S 生产环境 后用 grafana 监控工具发现项目内存很高, 明明业务服务量不算大, 却占用了大量内存。于是排查容器内存情况发现, Buffer Cache 无法释放, 一直在增长。查看代码层也并没有静态变量等现象, 于是我想到每次请求进来都会打印日志, 会不会是不间断地写文件导致文件没法关闭, 内存一直在缓冲区越来越大。为了验证我的猜测, 我尝试把请求日志暂时性关闭, 观察了一天时间发现我的猜测是正确的!内存对比也相对明显(频繁写日志会也明显), 并且容器的总内存也通过自动伸缩机制 降低了2-3个倍数 (因为内存占比是根据总内存大小计算的, 所以内存占比仅仅是反映当前总内存的占用率)!!!

下面是关闭请求日志前后的内存对比:

解决方案

知道了问题就好办了, 解决方案就是: 将日志直接输出到控制台, 运维采集控制台日志到 ELK

下面是最终的内存对比:

还在担心服务内存太高 连业务代码都要写的非常小心么?
还在担心写多几行复杂业务 系统炸掉么?
还在担心不敢多打印几个日志?

从此不需要再有此顾虑了!!!

评论一下?

OωO
取消