MIUI 最近任务显示的剩余内存与实际不符

2019-06-29 13:52:57 +08:00
 blindmt

自从 QQ 换用 TIM 之后频繁感觉 TIM 被杀进程。但每次打开最近任务显示内存剩余都在 3G 左右,很奇怪,起初以为是 MIUI 没有像微信和 QQ 那样专门做进程优先级保护的原因,今天无聊打开了 CPU-Z 发现这么一个坑爹的东西。

机器:小米 9 8G+128G

在最近任务里可以看到剩余内存是 3G,但是在 CPU-Z 和 AIDA64 中显示就只有 1500+M。 更夸张的是,adb 连上 shell 之后发现 top 命令里实际的显示只有约 300M。

最近任务 https://i.loli.net/2019/06/29/5d16fb135fc2e82993.jpg

adb shell top https://i.loli.net/2019/06/29/5d16f843eef9083180.png

所以即便是所谓本地化优秀的国产 UI,也只是在保护了特定(常用)的(毒瘤)进程的基础上,在伪造一个流畅的国产安卓吗?

9649 次点击
所在节点    Android
35 条回复
aheadlead
2019-06-29 21:05:01 +08:00
@iwtbauh linux 确实没法精准的统计内存,不过这个和这个主题无关。

有些 linux 认为是已用的内存,在 android 看起来却是可以释放的,这个确实有统计口径的问题。
oneonesv
2019-06-29 21:08:09 +08:00
@iwtbauh
其他乱七八糟的不知道在说啥
我水平不行 那你讲讲 调用 alloc_pages 分配的内存怎么在 /proc/meminfo 给我统计出来?
iwtbauh
2019-06-30 01:13:33 +08:00
@oneonesv #22

你在搞笑吗,你写个模块,调用 alloc_pages,你看看 /proc/meminfo 里的 memfree 会不会减少。怎么就“/proc/meminfo 不包含所有内存”了。要是连内存都没法准确统计了,那这个系统你觉得还能用吗。你要是觉得能用,可能需要重修一下计算机组成原理。

还是那句话,你给的那个文章不仅质量堪忧,关键和本帖无半点关系。就像在拿一个看似有关实际上无关的论据强行洗地。虽然我到目前还没有认为 MIUI 有问题,但我可能已经对 xiaomi 有些延误了。


@aheadlead #21

你怎么定义“精准统计内存”
A18524478970
2019-06-30 02:10:17 +08:00
重新仔细阅读了一下楼主的疑问,第一,3gb 内存实际可用的物理内存是 2.7g ,第二,小米 miui10 最近任务并没有显示剩余内存,显示的是已用的和总内存,而总内存是 2.7g 并不算 3g,第三,用 top 查看的内存是包括 cache 的,cache 不算正在使用的内存,是可以立即释放回收的内存,所以 miui 的内存统计没错,回答完毕
aheadlead
2019-06-30 08:17:17 +08:00
@iwtbauh 有些可用内存并统计在 MemFree 里。从原理上 linux 的统计是没错的。但是这些内存从上层角度看确实是可以随时释放的。具体你自己去看 AOSP 吧,代码都在那。
aheadlead
2019-06-30 08:17:46 +08:00
有些可用内存并没有统计在 MemFree 中。从原理上 linux 的统计是没错的。

但是这些内存从上层角度看是可以随时释放的。具体你自己去看 AOSP 吧,代码都在那。
aheadlead
2019-06-30 08:19:06 +08:00
我说的这些内存不仅仅是 @A18524478970 说的那些。PageCache 之类的内核自己有统计的。
iwtbauh
2019-06-30 19:26:24 +08:00
@aheadlead #25

我就是这个意思。

#17 我有说:“我从来没说过 MIUI 造假,因为软件是分层的,底层看不到上层的结构和细节是正常的。内核层次上看不到 Android 服务层的内存管理很正常。”

我喷的不是这个问题。
20015jjw
2019-07-01 01:42:11 +08:00
然而我一个 4g 内存 px 用户从来就没感觉到内存不够..
keymao
2019-07-01 09:57:14 +08:00
流畅度与三个因素有密切关联,CPU 中的大核及其最高频率,系统动画的细节,闪存的瞬时随机读取速度。苹果为什么你们会感觉流畅? 因为它的 A 系列 都是粗壮的大核,而且 iOS 动画细节做得比较完善,同时定制的 nvme 闪存瞬时读取速度无出其右,安卓整个阵营都没能打的,当然这是成本堆出来的。
那么,问题来了,安卓阵营里面有没有这类机器呢?答案是有的。从安卓阵营里找,首先要么是 8 系 U 大核都很壮,要么 7 系 U 大核和小核比较均衡(大核相对更状),然后闪存至少 ufs2.0 起步(至少,现在很多都是 2.1,如果你买了 emmc 的然后来喊卡,安卓真的不背锅),最后就是关键得了,国内主流的 UI 比如 miui flyme emui coloros funtouch 基本优化的都算不错了,毕竟这是门面,所以基本上流畅度和前面两个关系比较密切。 最后,还有一个容易忽略的因素就是 处理器的调度策略,比如小米 嘿嘿,小米为了他那个小电池续航能高点,通常是发布的时候调度很积极,更新几个版本后,为了续航就把调度调回去了,所以你会感觉比较卡。 常 规 操 作, 发布之时什么满血版,牛批极了,畅爽, 被喷续航差了之后就给你把调度改回去了。
userdhf
2019-07-01 10:50:32 +08:00
换华为吧。
我替所有楼下喊出了这句话。
kuichieh
2019-07-01 17:50:48 +08:00
Android 系统存在“已缓存的进程”这么个东西,这部分内存在 MIUI 看来是可用内存,在 meminfo 看来是已用内存,不包括在 MemAvailable 内。
brMu
2020-06-29 16:53:31 +08:00
看上面一堆人分析这不准那不准,有个屁用,还 top 命令不准确,你让搞 Linux Unix 运维的人还怎么活?难道自己去开发个 top 不成?

关键问题是为什么开机久了卡,杀进程?是 MIUI 二次开发的原因还是 Android 的原因?

我之前的小米 8 就是这样,现在又回翻到这了,难道真的是系统组件内存泄漏的原因?
brMu
2020-06-29 17:00:44 +08:00
CentOS, Redhat, Solaris, AIX, Debian, Armbian, Raspberry Pi, 这些全玩过,top 命令的内存从来没遇到过不准的,CPU 倒是遇到过不准,勒索病毒导致的,所以 top 命令至少在 99%的情况下是没有问题的,然而在有些人心中可能是 99%不准,你懂个毛!
brMu
2020-06-29 17:07:10 +08:00
从楼主的分析来看,top 命令里的剩余 270M 应该是最准的,不然不可能杀进程杀的那么频繁,最近任务里内存肯定是胡扯的,不知道从哪取来的数,cpu-z 里可能是统计错了,有可能是把 free 和 cache 加起来了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/578527

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX