ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# :-: mate-indicators内核占用过高问题分析报告 | 适用范围 | 适用版本 | 人员 | 发布时间 | 文档版本 |备注 | | --- | --- | --- | --- | --- |--- | | 服务器操作系统 | V10-SP1、V10-SP2 | 王国武 |2022.3.4| V1.0|发布| | 服务器操作系统 | V10-SP1、V10-SP2 | 张志勇 |2022.3.4| V1.1|模板调整| ### 经测试,该方案有效可行 ***** ### 1.问题现象描述 桌面组件mate-indicators在长时间使用后发现有占用内存过高的情况,尤其是在某些用户场景,如频繁打开日历或不停点击日历等操作,会造成mate-indicators占用内存的迅速增长,且在长时间不操作的情况下,占用的内存不释放。 ### 2.影响版本及触发条件 影响版本 V10-SP1-0711及以后版本 V10-SP2-0524版本 触发条件: 频繁打开日历或不停点击日历图形工具等操作 ### 3.问题分析 从现象来看,mate-indicators在运行中未及时回收内存,长时间运行时,就出现了内存占用过高的现象。杀掉mate-indicators进程,重启后,发现占用内存显著降低,确定问题为内存泄漏。 为确定内存泄漏点,需要通过以下方法进一步分析。 重新启动mate-indicators进程,通过cat /proc/PID/smaps命令导出数据。根据问题出现的频率,在一天后再次导出该数据,对比两组数据,查找内存增长的地方,使用gdb将内存dump出来,通过hexdump或strings工具查看。 ![](https://img.kancloud.cn/35/8f/358f46d224b34061280cf52addd3d40c_576x776.png) 进一步对比代码,定位问题出在indicator-calendar.cpp中的static gboolean update_time(IndicatorCalendar *d)此函数内。 ![](https://img.kancloud.cn/e3/fd/e3fd07c5a52ccccf0d5c27f7924c07d5_576x353.png) 此函数归属于日历与时间组件,主要负责桌面右下角的时间。跟踪代码发现,在此函数结束时,有多个资源未释放。 对未释放资源进行分析,主要由部分字符串和1个GSettings指针等占用组成。在短时间内现象并不明显,只有在长时间运行或者mate-indicators被频繁调用时,会出现明显的内存泄漏现象。 ### 4.问题影响 长时间运行后,mate-indicators占用的内存会多达几个G ### 5.问题修复 及时释放未释放的资源,同时优化日历组件的内存占用,在日历不显示时,销毁相应的日历组件,快速释放内存。 ### 6.解决方案 升级mate-indicators至mate-indicators-20150918kord0ukui58-10.p07.ky10及以后版本。