blindmt
V2EX  ›  Android

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

  •  
  •   blindmt · Jun 29, 2019 · 17823 views
    This topic created in 2519 days ago, the information mentioned may be changed or developed.

    自从 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 replies    2020-06-29 17:07:10 +08:00
    infreboot
        1
    infreboot  
       Jun 29, 2019 via Android
    你去开发者模式看正在运行的服务
    blindmt
        2
    blindmt  
    OP
       Jun 29, 2019
    @Stevenv 没找到,可能 MIUI 阉割了这个
    easylee
        3
    easylee  
       Jun 29, 2019   ❤️ 1
    对于最后的猜想,我也有持相同的意见。
    而且一直想吐槽`安卓`明显的动画不流畅。

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

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

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

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

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

    top 和 free 的内存统计数据来自 /proc/meminfo
    willie1991
        12
    willie1991  
       Jun 29, 2019
    以 speed 模式优化全部应用后你会发现内存多了好多。。我没弄之前 8 个的内存只剩下 1g 的样子,优化完之后,开机很久照样还有接近 3g 内存
    oneonesv
        13
    oneonesv  
       Jun 29, 2019
    @iwtbauh 我是说这几种方式统计方式都不一样,/proc/meminfo 也不包含所有内存,linux 也没法精确统计
    MIUI 多半用了数字好看的统计方式,但也不能说他作假
    chiu
        14
    chiu  
       Jun 29, 2019 via Android
    电池使用记录和一个 app 后台记录的也不符
    A18524478970
        15
    A18524478970  
       Jun 29, 2019 via Android
    显示的只是正在使用的缓存而已,不要大惊小怪,作假是基本没可能的
    Chairs0
        16
    Chairs0  
       Jun 29, 2019 via Android
    miui 有 zram,是时刻在转换
    iwtbauh
        17
    iwtbauh  
       Jun 29, 2019 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  
       Jun 29, 2019
    @iwtbauh 总结:主要是你不会,不是系统不行,哈哈
    kx5d62Jn1J9MjoXP
        19
    kx5d62Jn1J9MjoXP  
       Jun 29, 2019 via Android
    不用纠结了,MIUI 是我用过的性能最垃圾的安卓 ROM
    iwtbauh
        20
    iwtbauh  
       Jun 29, 2019 via Android
    @a22124497 #18 并非这个意思。
    aheadlead
        21
    aheadlead  
       Jun 29, 2019 via iPhone
    @iwtbauh linux 确实没法精准的统计内存,不过这个和这个主题无关。

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

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

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


    @aheadlead #21

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

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

    我就是这个意思。

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

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

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

    我之前的小米 8 就是这样,现在又回翻到这了,难道真的是系统组件内存泄漏的原因?
    brMu
        34
    brMu  
       Jun 29, 2020
    CentOS, Redhat, Solaris, AIX, Debian, Armbian, Raspberry Pi, 这些全玩过,top 命令的内存从来没遇到过不准的,CPU 倒是遇到过不准,勒索病毒导致的,所以 top 命令至少在 99%的情况下是没有问题的,然而在有些人心中可能是 99%不准,你懂个毛!
    brMu
        35
    brMu  
       Jun 29, 2020
    从楼主的分析来看,top 命令里的剩余 270M 应该是最准的,不然不可能杀进程杀的那么频繁,最近任务里内存肯定是胡扯的,不知道从哪取来的数,cpu-z 里可能是统计错了,有可能是把 free 和 cache 加起来了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4147 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 10:12 · PVG 18:12 · LAX 03:12 · JFK 06:12
    ♥ Do have faith in what you're doing.