标签搜索

目 录CONTENT

文章目录

折腾笔记 - 关于博客频繁出现堆内存不足的问题处理过程整理

沙漠渔
2024-01-24 16:48:15 / 0 评论 / 0 点赞 / 64 阅读 / 1,826 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-01-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

由于博客加入了网络数据聚合功能,数据剧增突然导致博客访问巨慢,然后就各种排查问题。。。

前言

自1月20日前后增加了网络数据聚合功能,数据量剧增,突然发现系统宕机,CPU也动不动就100%,导致博客无法访问,程序日志频繁出现如下提示:

 SQL Error: 0, SQLState: S1000
Java heap space
HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2ff5403b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
SQL Error: 0, SQLState: 08003
HikariPool-1 - Connection is not available, request timed out after 56220ms.
No operations allowed after connection closed.
HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@25681ba9 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
SQL Error: 0, SQLState: 08003
HikariPool-1 - Connection is not available, request timed out after 61780ms.
No operations allowed after connection closed.

排查过程

确定JVM启动参数

于是查看了一下启动参数,jvm配置最大堆内存大小只给了512M内存,难道是太小了?然后就尝试增大这个配置,结果无一例外,修改了很多次配置都不管用。
原启动参数如下:

-server -Xms256m -Xmx512m

然后各种调整Xmx参数,服务器配置内存只有4G,最大给到过2048m,已经不能再多了啊。。。然后还把其他多个应用给关掉了,结果还是不行。

最后尽力了的配置如下:

-server -Xms256m -Xmx2048m -Xmn256m -Xss256k -XX:+HeapDumpOnOutOfMemoryError

就看着内存一路飙升,就不怎么GC的,另外CPU和系统负载动不动就在90%以上,网页访问时间也离奇得出现20多秒才能打开的情况。
通过上面这一通排查,确认了应该不是jvm配置问题。

排查程序

由于近期程序修改了比较多,不排除可能会出现程序异常霸占CPU的情况,然后走读最近修改记录,发现并没有,唯一有点问题的就是在从内存数据库中获取到内容之后存在更新数据库的操作,难道是这里会因为速度缓慢导致内存无法及时释放的情况?
尝试修改一下,修改成了异步处理数据库,发现毫无作用。然后优化了一下程序处理逻辑,排除了程序异常导致的问题。

排查leveldb

然后怀疑会不会是leveldb长期驻留内存导致?问了一下度娘谷歌,结果都是反馈leveldb比redis好的地方,占用内存小等特点,然后想着会不会是在里面堆放了太多东西导致的?就尝试把leveldb内的数据清空,重启系统,结果还是不行,运行了有2个小时之后,内存还是出现一路飙升,直接崩溃了的情况。这里也就排除了leveldb的问题。

排查程序内数据处理过程

通过打印程序运行耗时,发现后台数据基本都是在毫秒级的,不至于前端页面展示时能延长到十秒级别的啊,并且发现调整为异步请求并没有什么效果,可以排除首页数据准备的耗时问题。

最终确认原因

这部分内容比较多,后面再更新了

总结

通过这次的服务器调优,真切的感受到了数据处理逻辑的重要性,尽量将复杂的数据处理交由数据库来处理,直接呈现结果,减少交互的数据量。

0
广告 广告

评论区