关于程序员:OOM问题解决实践

37次阅读

共计 2327 个字符,预计需要花费 6 分钟才能阅读完成。

一、我的项目背景

咱们的我的项目是一款致力于解决大学课堂教学效率低下、老师学生课堂教学互动性不强这一事实问题而设计的独立的课堂教学辅助零碎。零碎主体分为两个互相关联的软件。E 课的 pc 端的用户是大学授课老师,E 课 APP 是服务学生的 Android 端软件。“E 课”软件 PC 端的用户是大学授课老师,基于授课须要,老师须要考查学生缺勤状况,理解学生课堂实时学习状况,展现相干教学资料。“E 课”APP 的用户是学生,学生在适合的工夫应用手机软件与老师进行交互,进步课堂效率与课堂互动性。
“E 课”是一项独立的软件,而且全部内容自含。在“E 课”智能手机应用程序中,老师可通过集体邮箱和明码登录零碎,学生可通过自己学号和加明码登录零碎。显示页面所须要的数据全副从数据库中读取,以 APP 界面或者网页的模式列在页面上供使用者浏览。“E 课”可实现课表查问、扫描二维码即时签到、课程检测、“我要当学霸”、在线课程核心等次要性能以及绩点查问、问题查问等辅助性能,实现以新媒体辅助教学的形式进步课堂效率。
零碎架构图如下:

学生用户端次要性能有:退出课程、签到、课堂检测、文件下载、课堂笔记、集体签到记录等外围性能,还有大学新闻布告展现推送、学生课表主动导入及展现、个人信息、问题查问等辅助性能。PC 端性能总览图如下:

二、所遇到的挑战

本我的项目在测试及小范畴用户应用的过程中,发现了会存在 OOM 的问题。OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,即会抛出 java.lang.OutOfMemoryError 的异样。看下对于的官网阐明:Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. 意思就是说,当 JVM 因为没有足够的内存来为对象调配空间并且垃圾回收器也曾经没有空间可回收时,就会抛出这个 error(注:非 exception,因为这个问题曾经重大到不足以被利用解决)。

三、解决问题的步骤

首先,咱们先进行问题的排查,因为产生 OOM 的可能性和起因有很多。但无外乎底层起因就两点,一种是调配得少:比方虚拟机自身可应用的内存(个别通过启动时的 VM 参数指定)太少;另一种是利用用的太多,并且用完没开释,节约了。此时就会造成内存泄露或者内存溢出。(内存泄露:申请应用完的内存没有开释,导致虚拟机不能再次应用该内存,此时这段内存就泄露了,因为申请者不必了,而又不能被虚拟机调配给他人用。内存溢出:申请的内存超出了 JVM 能提供的内存大小,此时称之为溢出。)
罕用的工具有罕用的工具有:

1)mat: eclipse memory analyzer, 基于 eclipse RCP 的内存剖析工具。详细信息参见:http://www.eclipse.org/mat/,举荐应用。2)jhat:JDK 自带的 java heap analyze tool,能够将堆中的对象以 html 的模式显示进去,包含对象的数量,大小等等,并反对对象查询语言 OQL,剖析相干的利用后,能够通过 http://localhost:7000 来拜访剖析后果。不举荐应用,因为在理论的排查过程中,个别是先在生产环境 dump 出文件来,而后拉到本人的开发机器上剖析,所以,不如采纳高级的剖析工具比方后面的 mat 来的高效。
进行了几轮的测试与排查,首先发现是 -Xmx 参数过低,调高之后便解决了局部问题;后发现数据库查问逻辑有些问题,一次性查问了数据库全副后果,而没有做后果数限度,所以当测试的数据库信息量过大的时候,也会呈现 OOM 的问题,于是咱们尝试从逻辑层面优化了数据库查问机制,从而又更高层面地缩小了 OOM 问题的产生。
因为发现了软件潜藏的可能性问题,增强了咱们的监控保护意识,毕竟测试只能解决局部和大量非常明显的问题,然而在实际上线过程中,忽然暴发进去的问题可能会是毁灭性的,于是咱们决定要欠缺监控体系。只有这样,能力更好的服务于用户,尽快发现问题,并解决例如适配性、用户体验、流量应用、稳定性等问题。咱们调研了几个罕用的用户反馈平台 1) 美洽,基于 HTML5 开发,只需在 IOS/Android 反对 H5 的浏览器中关上即可,无需装置任何软件程序,代码植入,一步到位,简化沟通流程。
2) Udesk:反对 Android、IOS 以及 APIcloud 三大平台,能够对用户反馈的数据做统计分析,并展现后果。
3) Freshdesk,致力于中小企业网站在线客服技术支持的网站,提供中小企业网站的在线服务质量和用户体验度。在调研过程中,咱们偶尔接触到了友盟 + 利用性能监控平台 U-APM,U-APM 利用性能监控平台提供实时、牢靠、全面的利用解体、ANR、自定义异样等捕捉能力,反对多场景、多通道智能告警监控,高效还原解体用户的拜访门路和业务现场,缩短故障排查工夫。其提供从发现问题 — 还原问题 — 解决问题 —- 验收的残缺闭环。完满合乎咱们的需要和预期。

四、我的项目总结

咱们的我的项目最终定位在“适配一般大学课堂教学的教学辅助软件”,旨在进步大学课堂效率和教学互动性,在性能层面上尽量做到简洁,在开发层面尽量做到对立标准。PC 端和 Android 端均合乎了 MVC 软件设计模式,具备了较好的可移植性,模块之间高度解耦,可适应各种类型的再开发。但在 APP 测试期间呈现了 OOM 的问题,于是咱们通过调高 -Xmx 参数,并批改了数据库查问逻辑,优化代码构造,同时欠缺监控体系的办法解决优化了这个问题,并且欠缺了监控体系对后续将来可能会产生的问题提供了双重保障。

正文完
 0