V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
blindmt
V2EX  ›  Android

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

  •  
  •   blindmt · 2019-06-29 13:52:57 +08:00 · 8695 次点击
    这是一个创建于 1734 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自从 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,也只是在保护了特定(常用)的(毒瘤)进程的基础上,在伪造一个流畅的国产安卓吗?

    35 条回复    2020-06-29 17:07:10 +08:00
    Stevenv
        1
    Stevenv  
       2019-06-29 14:08:13 +08:00 via Android
    你去开发者模式看正在运行的服务
    blindmt
        2
    blindmt  
    OP
       2019-06-29 14:11:43 +08:00
    @Stevenv 没找到,可能 MIUI 阉割了这个
    easylee
        3
    easylee  
       2019-06-29 14:17:54 +08:00   ❤️ 1
    对于最后的猜想,我也有持相同的意见。
    而且一直想吐槽`安卓`明显的动画不流畅。

    16 年上半年乐 mex2,ram 空闲 3g,但是一直杀后台,还动不动开应用就黑屏,记这么清楚不是因为只遇见过这一款手机,也不是因为 17 年乐视手机业务就黄了,而是特么当时将近 3k 买的乐视 max2,流畅度竟然比不上不到 2k 的 3g 运存的小米 5.....
    love
        4
    love  
       2019-06-29 14:28:56 +08:00
    miui 动不动就杀进程从小米 2 就开始了

    当年我米 2 用 MIUI 简直要崩,老是程序重新加载,换了原生系统后完全就没这问题了
    aheadlead
        5
    aheadlead  
       2019-06-29 14:36:17 +08:00 via iPhone
    这几个途径看到的可用内存统计口径都不一样。只是取决于你更相信哪个罢了…
    iwtbauh
        6
    iwtbauh  
       2019-06-29 14:37:22 +08:00 via Android
    Android 确实非常吃内存,Google 系的软件都这个吊样。

    不过使用率这么夸张,我感觉可能是某个系统程序内存泄漏了,关机,移除电池,等待 10 分钟后插入电池,然后开机,观察内存使用率。
    iwtbauh
        7
    iwtbauh  
       2019-06-29 14:41:49 +08:00 via Android
    还有,装个 termux 调用 free -m 命令比较好,adb 也非常吃内存(反正我是服了一个和主机通信的软件能随便吃几百 mib )
    oneonesv
        8
    oneonesv  
       2019-06-29 14:44:38 +08:00   ❤️ 2
    top 这个命令统计的内存可不是 ‘准确’ 的
    MIUI 显示的不一定是不准确的

    https://blog.csdn.net/cmdssd1/article/details/51841255
    oneonesv
        9
    oneonesv  
       2019-06-29 14:46:41 +08:00   ❤️ 1
    先搞明白再说
    不要搞大新闻
    qiaoguoqiang
        10
    qiaoguoqiang  
       2019-06-29 14:46:42 +08:00   ❤️ 1
    显示的不一定是真实的,都是厂商为了凸显自己的手机剩余内存高随便显示的,声称 8+128,会真的有 8G 吗?
    iwtbauh
        11
    iwtbauh  
       2019-06-29 15:01:04 +08:00 via Android
    @oneonesv #8

    这篇文章根本和这个帖子没关系。文章强调内存占用不是进程占用之和,再就是需要去掉缓存和缓冲的大小。但 1 ) lz 也没有算进程的占用之和,2 )你可以看看图,cached 和 buffers 都很低,used 减去这两项后依旧非常恐怖。

    top 和 free 的内存统计数据来自 /proc/meminfo
    willie1991
        12
    willie1991  
       2019-06-29 15:08:14 +08:00
    以 speed 模式优化全部应用后你会发现内存多了好多。。我没弄之前 8 个的内存只剩下 1g 的样子,优化完之后,开机很久照样还有接近 3g 内存
    oneonesv
        13
    oneonesv  
       2019-06-29 15:33:56 +08:00
    @iwtbauh 我是说这几种方式统计方式都不一样,/proc/meminfo 也不包含所有内存,linux 也没法精确统计
    MIUI 多半用了数字好看的统计方式,但也不能说他作假
    chiu
        14
    chiu  
       2019-06-29 15:36:01 +08:00 via Android
    电池使用记录和一个 app 后台记录的也不符
    A18524478970
        15
    A18524478970  
       2019-06-29 15:48:25 +08:00 via Android
    显示的只是正在使用的缓存而已,不要大惊小怪,作假是基本没可能的
    Chairs0
        16
    Chairs0  
       2019-06-29 19:37:23 +08:00 via Android
    miui 有 zram,是时刻在转换
    iwtbauh
        17
    iwtbauh  
       2019-06-29 19:57:47 +08:00 via Android
    @oneonesv #15

    惊了,原来 /proc/meminfo 只能显示系统的一部分内存呀,黑客设计一个不能完全显示内存的接口,我不知道那个 Linux 黑客有这么糟糕的品位。哇,原来 Linux 自己都不能精确统计内存,按你的意思,也就是说假定存在内存页 P,则 Linux 不能确定它是否可用。那系统应该很快就不稳定甚至无法工作了呀,最好也是严重内存泄漏了呀。但实际上 Linux 跑的很稳,7*24 工作不在话下。

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

    但是你给的那个链接完全和这个帖子没有半点关系。你贴的那个文章说了半天废话那些东西在手册里都有写。什么叫“不包含所有内存”啊。不看手册怪软件喽。谁不知道 avail mem = free mem + buff/cache 啊。谁不知道 virt 和 res 啊。还有到你的#13 竟然成了 Linux 不能精确统计内存了……
    a22124497
        18
    a22124497  
       2019-06-29 20:07:44 +08:00
    @iwtbauh 总结:主要是你不会,不是系统不行,哈哈
    ssynhtn
        19
    ssynhtn  
       2019-06-29 20:31:27 +08:00 via Android
    不用纠结了,MIUI 是我用过的性能最垃圾的安卓 ROM
    iwtbauh
        20
    iwtbauh  
       2019-06-29 20:45:49 +08:00 via Android
    @a22124497 #18 并非这个意思。
    aheadlead
        21
    aheadlead  
       2019-06-29 21:05:01 +08:00 via iPhone
    @iwtbauh linux 确实没法精准的统计内存,不过这个和这个主题无关。

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

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

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


    @aheadlead #21

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

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

    我就是这个意思。

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

    我喷的不是这个问题。
    20015jjw
        29
    20015jjw  
       2019-07-01 01:42:11 +08:00 via Android
    然而我一个 4g 内存 px 用户从来就没感觉到内存不够..
    keymao
        30
    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
        31
    userdhf  
       2019-07-01 10:50:32 +08:00
    换华为吧。
    我替所有楼下喊出了这句话。
    kuichieh
        32
    kuichieh  
       2019-07-01 17:50:48 +08:00
    Android 系统存在“已缓存的进程”这么个东西,这部分内存在 MIUI 看来是可用内存,在 meminfo 看来是已用内存,不包括在 MemAvailable 内。
    brMu
        33
    brMu  
       2020-06-29 16:53:31 +08:00
    看上面一堆人分析这不准那不准,有个屁用,还 top 命令不准确,你让搞 Linux Unix 运维的人还怎么活?难道自己去开发个 top 不成?

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

    我之前的小米 8 就是这样,现在又回翻到这了,难道真的是系统组件内存泄漏的原因?
    brMu
        34
    brMu  
       2020-06-29 17:00:44 +08:00
    CentOS, Redhat, Solaris, AIX, Debian, Armbian, Raspberry Pi, 这些全玩过,top 命令的内存从来没遇到过不准的,CPU 倒是遇到过不准,勒索病毒导致的,所以 top 命令至少在 99%的情况下是没有问题的,然而在有些人心中可能是 99%不准,你懂个毛!
    brMu
        35
    brMu  
       2020-06-29 17:07:10 +08:00
    从楼主的分析来看,top 命令里的剩余 270M 应该是最准的,不然不可能杀进程杀的那么频繁,最近任务里内存肯定是胡扯的,不知道从哪取来的数,cpu-z 里可能是统计错了,有可能是把 free 和 cache 加起来了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   989 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:09 · PVG 04:09 · LAX 13:09 · JFK 16:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.