bug修复之OOM记录过程

我爱海鲸 2025-05-30 15:46:31 暂无标签

简介oom、内存持续增长的问题

最近在做一个任务,需要清理一下在redis中存在的永不过期的key,思路是这样的,通过特定的字符串前缀+* 获取这个类型的key值,然后解析出key中的时间戳,

将这个时间戳和当前时间对比看是否超过了24小时,如果超过了就进行清理。

在开发完成后,部署到了task模块上,然后观察一段时间后发现task模块crash了,莫名的进行重启,在k8s的boardcard上看到是内存的异常增高,然后就想着是不是oom的问题,

但是在查看日志的时候发现每次重启日志都会被清除,原因是日志信息没有被进行持久化。

在deployment中修改resource下的memory:

          resources:
            limits:
              cpu: '1'
              memory: 1Gi
            requests:
              cpu: 500m
              memory: 512Mi

          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
            - name: data-vol
              mountPath: task
              subPath: task
            - name: data-vol
              mountPath: /logs
              subPath: task/logs

在设置了内存分别设置了1g、2g、3g后发现还是会出现内存异常增高的情况。

最后通过日志去排查到的问题是,线程池没有关闭的问题,由于又是定时任务,每10秒执行一次,资源又没有进行释放,最后导致oom。

ExecutorService executor = Executors.newFixedThreadPool(10);
....
// 线程池没有释放
executor.shutdown();

你好:我的2025