OOM
太多份相同的对象导致的 OOM坑
原因∶不管是程序的实现不合理,还是因为各种框架对数据的重复处理、加工和转换,相同的数据在内存中不一定只占用一份空间
解决∶针对内存量使用超大的业务逻辑,比如缓存逻辑、文件上传下载和导出逻辑,我们在做容量评估时,可能还需要实际做一下 Dump,而不是简单地假设数据只有一份
WeakHashMap 出现 OOM
原因∶WeakHashMap 的 Key 虽然是弱引用,但是其Value持有Key 中对象的强引用会导致Key 无法回收,无限往WeakHashMap 加入数据同样会 OOM
解决∶使用 Spring 提供的 ConcurrentReferenceHashMap,或使用WeakReference来包装Value
7年前的代码奉上,给大家看看,如何使用弱引用。
Tomcat 参数不合理导致的 OOM 血案
原因∶ 设置不合理的 server.max-http- header -size=10M, 每个请求需要占用 20M 内存,并发大的时候导致 OOM
解决∶要根据实际需求来修改参数配置, 可以考虑预留 2 到5 倍的量。容量类的参数背后往往代表了资源,设置超大的参数就有可能会占用不必要的资源,在并发量大的时候因为资源大量分配导致 OOM
关注转发,分享更多填坑知识。