问题描述:某机器煲机爱奇艺视频2、3h后,会出现爱奇艺崩溃,或者退出视频播放界面,或者提示爱奇艺已停止运行。
同类现象还有系统静置4—5h,会出现闪屏现象,屏幕亮灭亮灭显示。
问题Debug:
- 客户提供的Log中出问题时刷“app died, no saved state”,应该是爱奇艺被kill掉后,导致的崩溃现象。
长时间静置闪屏,也是同样刷同样的打印
- 基于上面Log,在播放爱奇艺时 free -m,显示只有10M多内存,所以第一时间想到内存不够,优化内存,由于长时间煲机导致运行内存不够爱奇艺挥霍的,所以导致崩溃,沿着内存优化的路子试了很多,奈何该型号机器实在无法优化太多,只能改MMAP将一些不常用的模块内存看到系统限定最小值,煲机爱奇艺仍然NG
- 后面用测试脚本实时监测内存使用情况
echo "===================polling watch========================"
while [ 1 ]; do
echo "===================meminfo========================"
echo "LMK: minfree:"
cat /sys/module/lowmemorykiller/parameters/minfree
echo "LMK: adj:"
cat /sys/module/lowmemorykiller/parameters/adj
procrank
busybox free
cat /proc/meminfo
echo "mali memory_usage:"
cat /sys/kernel/debug/mali/memory_usage
echo "ump memory_usage:"
cat /sys/kernel/debug/ump/memory_usage
sleep 5
done
- 运行脚本事实监控内存变化发现xxxServer 进程 在煲机时段中持续增加,从最开始的十几M到后面疯长到快300M,而且最开始煲机过程中未出现lowmemorykiller,一段时间后才狂刷lowmemorykiller,所以导致爱奇艺崩溃和画面狂闪的根本原因应该是xxxServer 进程 内存泄漏导致后面运行内存严重不够导致的问题
问题解决:定位到xxxxServer持续变大后,仔细查Code发现是自己在这个线程中使用完dictionary后没有free导致的,so低级的错误啊,查了老半天
PS:查看进程内存使用情况 procrank