最近在做一个任务,需要清理一下在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();