gpt4 book ai didi

Android LowMemoryKiller 未能杀死 Webviews

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:51 30 4
gpt4 key购买 nike

很长一段时间以来,我一直在尝试在玩重型游戏时调试设备上的主要延迟/卡顿爆发。在对我的 logcat 进行了大量分析后,我觉得我已经确定了导致无法忍受的延迟峰值的原因。每当发生滞后峰值时,logcat 中始终显示以下错误:

E/lowmemorykiller: 
Error opening /dev/memcg/apps/uid_99032/pid_5430/memory.soft_limit_in_bytes; errno=2

它反复显示,好像它一直在一遍又一遍地试图杀死它。 UID 和 PID 有时会有所不同。据推测,主线程每次试图杀死它但没有这样做时都会挂起很短的时间。为什么会这样?

以下错误也反复显示,混合出现在上述错误中。它可能与问题有关:
E/ANDR-PERF-RESOURCEQS: Failed to apply optimization [4,0]

有时它会是 [2,0] 而不是 [4,0] 。这些消息在我的 logcat 中确实过度显示。

检查我的 Activity 进程后,提到的 UID 和 PID 总是匹配 Android System Webview 的一个实例。我通过转到“设置”中的“开发人员选项”中的“运行进程”找到了这些进程的源应用程序。在那里,正在运行的进程被列为 com.google.android.webview:sandboxed_process0 ,并且对于每个可能具有正在运行的 webview 的应用程序,它都有多个实例。通过检查该进程的信息,会提到启动它的包。因此,它们源自我手机上的各种应用程序,有时甚至是我自己玩的游戏。因此,这似乎是内核的 lowmemorykiller (LMK) 模块的问题,比我安装的任何特定应用程序更有可能。

任何人都知道导致这种情况的原因,错误的真正含义,如何修复或解决它,为什么 LMK 无法杀死 webview,或者实际发生了什么?我至少正在寻找一种方法来控制 LMK 要么忽略试图杀死 webviews,以防止它在失败时挂起主线程,要么强制它成功杀死它们。

出于某种原因,我没有在 Kernel Adiutor 中修改 LMK 参数的部分。我的手机试图(大概)杀死这些 webviews,即使仍有大量可用 RAM 可用,但 Kernel Adiutor 中的 min_free 参数远不及我当时剩余的可用 RAM 量,所以有些事情是继续。

我曾一度怀疑这可能是由于我的手机上安装的应用程序数量过多(800-900)造成的。从那以后,我将其降低到约 600 个应用程序,但问题仍然存在。我不认为有太多的应用程序是问题了,尽管它绝对有可能。

我在我的 OnePlus 3T 上运行 official ResurrectionRemix 8.1 ROM,使用 ROM 的默认内核和固件。这个问题出现在非官方的 RR LuisROM 上,即使在我完全擦除/清理闪存到我目前使用的官方 RR 版本之后,这个问题仍然存在。我在 XDA 上向他们和其他人寻求帮助,但没有人愿意提供帮助。如果您认为有必要,我可以提供我的完整 logcat,但是这里直接提到了唯一相关的消息。

编辑:这是一个 latest logcat ,错误及以上。我不认为可以从它们中推断出任何有用/新的东西,但请随意看一看。

编辑 2:感谢 this answer ,它提供了一个临时解决方法,我一直在试验并试图找到问题的根源。看起来由于某种原因,没有在 dev/memcg/apps 文件夹中为 Webview 进程创建 UID 和 PID 文件夹。这真的很奇怪。它们可以在 su 终端中手动创建(和删除)(虽然只在像 ES File Explorer Pro 这样的 root 特权文件管理器中创建,而不是删除(它给出了相同的“权限被拒绝”错误),但我注意到logcat 中的以下错误在上述其他错误之前:
Failed to make and chown /acct/uid_99007: Permission denied

这似乎与 dev/memcg/apps 目录具有相同的权限问题。我已经运行 chown 777 dev/memcg -R 以确保所有文件和目录都具有 RWX 权限,所以我看不到错误是如何发生的。什么可以阻止它?

最佳答案

我阅读了整个问题。我认为在玩大型游戏或使用任何需要更高 RAM 内存的应用程序时,其他一些进程会限制它这样做,就像信号量一样。
因为你的错误说它无法打开

/dev/memcg/apps/uid_99032/pid_5430/memory.soft_limit_in_bytes

用于增加使用内存。

有关 memory.soft_limit_in_bytes 的更多信息,请参阅内核文档

https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt

你能给我logcat以便我进一步分析这个问题吗?

关于Android LowMemoryKiller 未能杀死 Webviews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51994388/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com