一:skywalking日志监控发现问题
因为处理时间过了一个月再回头写文章,所以只能凭记忆大概写写
当时是每天巡查过程中在jvm日志中发现,服务器内存爆了。接口响应非常慢,经常超时报错。因为是新项目上线,很难通过对比代码更新来缩小问题范围,排查难度较大。
初步判断
那根据以往经验,结合项目本身,将目标先放在Mongodb连接管理,http请求管理,文件读写管理,闭包变量管理上。
- 将生产环境的5个服务器节点减少到4个,足够支撑日常业务,另一个作为准测试服务器
- 将Mongodb连接全部添加关闭代码,http请求完释放,确认所有文件的读写关闭,闭关变量没有造成互相引用并正确释放
- 新包打上准测试,并进行压力测试,问题依然存在。
初步调试失败,进行深入问题排查
服务器
- top打印cpu占用情况,查到某个进程占用cpu高TheadId
- top -H -p XXXX,查看当前进程的线程cpu占用情况
- printf “%x \n” XXXX(线程id), 例如得到MMMM
- jstack -l XXXX >> jstack.txt拿到内存日志
- jstat -gc XXXX 5000 查看内存GC情况
- jmap -dump:file=A.hprof TheadId(进程id),将内存dump出来
- MemoryAnalyzer内存分析工具分析dump出来的日志
- 根据内存占用最多的实例发现是引入了公司的basic基础包,AliOssUtil类
- 代码排查发现OSSClient没有关闭
- .添加内存释放代码,重新上线,压测通过,问题解决
171万+

被折叠的 条评论
为什么被折叠?



