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

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

  •  
  •   blindmt · 110 天前 · 3054 次点击
    这是一个创建于 110 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    32 回复  |  直到 2019-07-01 17:50:48 +08:00
        1
    Stevenv   110 天前 via Android
    你去开发者模式看正在运行的服务
        2
    blindmt   110 天前
    @Stevenv 没找到,可能 MIUI 阉割了这个
        3
    easylee   110 天前   ♥ 1
    对于最后的猜想,我也有持相同的意见。
    而且一直想吐槽`安卓`明显的动画不流畅。

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

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

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

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

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

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

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

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

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


    @aheadlead #21

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

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

    我就是这个意思。

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

    我喷的不是这个问题。
        29
    20015jjw   109 天前 via Android
    然而我一个 4g 内存 px 用户从来就没感觉到内存不够..
        30
    keymao   108 天前
    流畅度与三个因素有密切关联,CPU 中的大核及其最高频率,系统动画的细节,闪存的瞬时随机读取速度。苹果为什么你们会感觉流畅? 因为它的 A 系列 都是粗壮的大核,而且 iOS 动画细节做得比较完善,同时定制的 nvme 闪存瞬时读取速度无出其右,安卓整个阵营都没能打的,当然这是成本堆出来的。
    那么,问题来了,安卓阵营里面有没有这类机器呢?答案是有的。从安卓阵营里找,首先要么是 8 系 U 大核都很壮,要么 7 系 U 大核和小核比较均衡(大核相对更状),然后闪存至少 ufs2.0 起步(至少,现在很多都是 2.1,如果你买了 emmc 的然后来喊卡,安卓真的不背锅),最后就是关键得了,国内主流的 UI 比如 miui flyme emui coloros funtouch 基本优化的都算不错了,毕竟这是门面,所以基本上流畅度和前面两个关系比较密切。 最后,还有一个容易忽略的因素就是 处理器的调度策略,比如小米 嘿嘿,小米为了他那个小电池续航能高点,通常是发布的时候调度很积极,更新几个版本后,为了续航就把调度调回去了,所以你会感觉比较卡。 常 规 操 作, 发布之时什么满血版,牛批极了,畅爽, 被喷续航差了之后就给你把调度改回去了。
        31
    userdhf   108 天前
    换华为吧。
    我替所有楼下喊出了这句话。
        32
    kuichieh   108 天前
    Android 系统存在“已缓存的进程”这么个东西,这部分内存在 MIUI 看来是可用内存,在 meminfo 看来是已用内存,不包括在 MemAvailable 内。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3555 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 38ms · UTC 01:05 · PVG 09:05 · LAX 18:05 · JFK 21:05
    ♥ Do have faith in what you're doing.