## 背景
go编写的应用程序(juicefs)在k8s(docker)中运行,时不时出现 OOM Killed。
## 分析
发现某些应用使用juicefs会导致内存使用飙升;
k8s的pod给的内存资源:request 2G,limit 5G;
到内存使用到达5G的时候,就会出现OOM;
## 解决
使用 go 1.19 重新编译(juicefs),并且在进程启动的pod中设置环境变量 GOMEMLIMIT
GOMEMLIMIT=2048MiB
将内存限制在2G,解决OOM Kill的问题;
## 参考
go1.19 内存优化的具体技术细节参考如下:
Go 1.19中值得关注的几个变化: Go 1.19中值得关注的几个变化 | Tony Bai
## TODO
排查内存占用过高的原因
## 注
对于juicefs而言(静态pv挂载方式),则是修改secret
kxyb -n juicefs-system create secret generic juicefs-secret-zmc-test \
--from-literal=name="zmc-test" \
--from-literal=metaurl="tikv://node1.juicefs-tikv.sys.xxx.com:2379,node2.juicefs-tikv.sys.xxx.com:2379/zmc-test" \
--from-literal=storage="OSS" \
--from-literal=bucket="http://juicefs.shanghai.oss.aliyun.xxxx.com" \
--from-literal=access-key="xxxxx" \
--from-literal=secret-key="xxxxx" \
--from-literal=appid="100012345" \
--from-literal=token="xxxx" \
--from-literal=envs="{GOMEMLIMIT: 2048MiB}"