自从 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,也只是在保护了特定(常用)的(毒瘤)进程的基础上,在伪造一个流畅的国产安卓吗?
1
Stevenv 2019-06-29 14:08:13 +08:00 via Android
你去开发者模式看正在运行的服务
|
3
easylee 2019-06-29 14:17:54 +08:00 1
对于最后的猜想,我也有持相同的意见。
而且一直想吐槽`安卓`明显的动画不流畅。 16 年上半年乐 mex2,ram 空闲 3g,但是一直杀后台,还动不动开应用就黑屏,记这么清楚不是因为只遇见过这一款手机,也不是因为 17 年乐视手机业务就黄了,而是特么当时将近 3k 买的乐视 max2,流畅度竟然比不上不到 2k 的 3g 运存的小米 5..... |
4
love 2019-06-29 14:28:56 +08:00
miui 动不动就杀进程从小米 2 就开始了
当年我米 2 用 MIUI 简直要崩,老是程序重新加载,换了原生系统后完全就没这问题了 |
5
aheadlead 2019-06-29 14:36:17 +08:00 via iPhone
这几个途径看到的可用内存统计口径都不一样。只是取决于你更相信哪个罢了…
|
6
iwtbauh 2019-06-29 14:37:22 +08:00 via Android
Android 确实非常吃内存,Google 系的软件都这个吊样。
不过使用率这么夸张,我感觉可能是某个系统程序内存泄漏了,关机,移除电池,等待 10 分钟后插入电池,然后开机,观察内存使用率。 |
7
iwtbauh 2019-06-29 14:41:49 +08:00 via Android
还有,装个 termux 调用 free -m 命令比较好,adb 也非常吃内存(反正我是服了一个和主机通信的软件能随便吃几百 mib )
|
8
oneonesv 2019-06-29 14:44:38 +08:00 2
|
9
oneonesv 2019-06-29 14:46:41 +08:00 1
先搞明白再说
不要搞大新闻 |
10
qiaoguoqiang 2019-06-29 14:46:42 +08:00 1
显示的不一定是真实的,都是厂商为了凸显自己的手机剩余内存高随便显示的,声称 8+128,会真的有 8G 吗?
|
11
iwtbauh 2019-06-29 15:01:04 +08:00 via Android
@oneonesv #8
这篇文章根本和这个帖子没关系。文章强调内存占用不是进程占用之和,再就是需要去掉缓存和缓冲的大小。但 1 ) lz 也没有算进程的占用之和,2 )你可以看看图,cached 和 buffers 都很低,used 减去这两项后依旧非常恐怖。 top 和 free 的内存统计数据来自 /proc/meminfo |
12
willie1991 2019-06-29 15:08:14 +08:00
以 speed 模式优化全部应用后你会发现内存多了好多。。我没弄之前 8 个的内存只剩下 1g 的样子,优化完之后,开机很久照样还有接近 3g 内存
|
13
oneonesv 2019-06-29 15:33:56 +08:00
@iwtbauh 我是说这几种方式统计方式都不一样,/proc/meminfo 也不包含所有内存,linux 也没法精确统计
MIUI 多半用了数字好看的统计方式,但也不能说他作假 |
14
chiu 2019-06-29 15:36:01 +08:00 via Android
电池使用记录和一个 app 后台记录的也不符
|
15
A18524478970 2019-06-29 15:48:25 +08:00 via Android
显示的只是正在使用的缓存而已,不要大惊小怪,作假是基本没可能的
|
16
Chairs0 2019-06-29 19:37:23 +08:00 via Android
miui 有 zram,是时刻在转换
|
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 不能精确统计内存了…… |
19
kx5d62Jn1J9MjoXP 2019-06-29 20:31:27 +08:00 via Android
不用纠结了,MIUI 是我用过的性能最垃圾的安卓 ROM
|
21
aheadlead 2019-06-29 21:05:01 +08:00 via iPhone
|
22
oneonesv 2019-06-29 21:08:09 +08:00
|
23
iwtbauh 2019-06-30 01:13:33 +08:00 via Android
|
24
A18524478970 2019-06-30 02:10:17 +08:00 via Android 1
重新仔细阅读了一下楼主的疑问,第一,3gb 内存实际可用的物理内存是 2.7g ,第二,小米 miui10 最近任务并没有显示剩余内存,显示的是已用的和总内存,而总内存是 2.7g 并不算 3g,第三,用 top 查看的内存是包括 cache 的,cache 不算正在使用的内存,是可以立即释放回收的内存,所以 miui 的内存统计没错,回答完毕
|
25
aheadlead 2019-06-30 08:17:17 +08:00
@iwtbauh 有些可用内存并统计在 MemFree 里。从原理上 linux 的统计是没错的。但是这些内存从上层角度看确实是可以随时释放的。具体你自己去看 AOSP 吧,代码都在那。
|
26
aheadlead 2019-06-30 08:17:46 +08:00
有些可用内存并没有统计在 MemFree 中。从原理上 linux 的统计是没错的。
但是这些内存从上层角度看是可以随时释放的。具体你自己去看 AOSP 吧,代码都在那。 |
27
aheadlead 2019-06-30 08:19:06 +08:00
我说的这些内存不仅仅是 @A18524478970 说的那些。PageCache 之类的内核自己有统计的。
|
28
iwtbauh 2019-06-30 19:26:24 +08:00 via Android
@aheadlead #25
我就是这个意思。 #17 我有说:“我从来没说过 MIUI 造假,因为软件是分层的,底层看不到上层的结构和细节是正常的。内核层次上看不到 Android 服务层的内存管理很正常。” 我喷的不是这个问题。 |
29
20015jjw 2019-07-01 01:42:11 +08:00 via Android
然而我一个 4g 内存 px 用户从来就没感觉到内存不够..
|
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 基本优化的都算不错了,毕竟这是门面,所以基本上流畅度和前面两个关系比较密切。 最后,还有一个容易忽略的因素就是 处理器的调度策略,比如小米 嘿嘿,小米为了他那个小电池续航能高点,通常是发布的时候调度很积极,更新几个版本后,为了续航就把调度调回去了,所以你会感觉比较卡。 常 规 操 作, 发布之时什么满血版,牛批极了,畅爽, 被喷续航差了之后就给你把调度改回去了。 |
31
userdhf 2019-07-01 10:50:32 +08:00
换华为吧。
我替所有楼下喊出了这句话。 |
32
kuichieh 2019-07-01 17:50:48 +08:00
Android 系统存在“已缓存的进程”这么个东西,这部分内存在 MIUI 看来是可用内存,在 meminfo 看来是已用内存,不包括在 MemAvailable 内。
|
33
brMu 2020-06-29 16:53:31 +08:00
看上面一堆人分析这不准那不准,有个屁用,还 top 命令不准确,你让搞 Linux Unix 运维的人还怎么活?难道自己去开发个 top 不成?
关键问题是为什么开机久了卡,杀进程?是 MIUI 二次开发的原因还是 Android 的原因? 我之前的小米 8 就是这样,现在又回翻到这了,难道真的是系统组件内存泄漏的原因? |
34
brMu 2020-06-29 17:00:44 +08:00
CentOS, Redhat, Solaris, AIX, Debian, Armbian, Raspberry Pi, 这些全玩过,top 命令的内存从来没遇到过不准的,CPU 倒是遇到过不准,勒索病毒导致的,所以 top 命令至少在 99%的情况下是没有问题的,然而在有些人心中可能是 99%不准,你懂个毛!
|
35
brMu 2020-06-29 17:07:10 +08:00
从楼主的分析来看,top 命令里的剩余 270M 应该是最准的,不然不可能杀进程杀的那么频繁,最近任务里内存肯定是胡扯的,不知道从哪取来的数,cpu-z 里可能是统计错了,有可能是把 free 和 cache 加起来了。
|