Android LowMemoryKiller无法杀死网络视图

Android LowMemoryKiller无法杀死网络视图,android,webview,process,kernel-module,android-kernel,Android,Webview,Process,Kernel Module,Android Kernel,相当长一段时间以来,我一直在尝试调试我的设备在玩繁重游戏时出现的严重延迟/口吃。在对我的logcat进行了大量分析之后,我觉得我已经确定了导致无法忍受的滞后峰值的原因。每当出现滞后峰值时,logcat中始终显示以下错误: E/lowmemorykiller: Error opening /dev/memcg/apps/uid_99032/pid_5430/memory.soft_limit_in_bytes; errno=2 它被反复展示,好像它不断地试图杀死它。UID和PID有时会发生变化

相当长一段时间以来,我一直在尝试调试我的设备在玩繁重游戏时出现的严重延迟/口吃。在对我的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]
。这些信息在我的日志中显示得太多了

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

有人知道是什么原因导致了这种情况,错误的真正含义是什么,如何修复或解决它,为什么LMK不能杀死webviews,或者到底发生了什么?我至少在寻找一种方法来控制LMK,要么忽略试图杀死WebView,要么防止它在失败时挂起主线程,要么迫使它成功杀死它们

由于某些原因,在内核Adiutor中没有为我修改LMK参数的部分。我的手机试图(大概)杀死这些网络视图,尽管还有大量可用的内存,但是内核Adiutor中的
minu free
参数远没有达到我当时剩余的可用内存量,所以发生了一些事情

我曾怀疑这可能是因为我的手机上安装了大量淫秽的应用程序(800-900)。此后,我将其降低到约600个应用程序,问题依然存在。我不认为有太多的应用程序是一个问题了,虽然它肯定可以

我在OnePlus 3T上运行,使用ROM的默认内核和固件。这个问题出现在非官方的RR LuisROM上,甚至在我对当前使用的正式RR构建进行完全擦除/清除闪存后,仍然存在。我已经向他们和其他人寻求XDA方面的帮助,但没有人愿意提供帮助。如果您认为有必要,我可以提供我的完整日志,但此处仅直接提及相关信息

编辑:这里有一个,错误和以上。我不认为有什么有用的/新的东西可以从中推断出来,但请随便看一看

编辑2:多亏了,它提供了一个临时的解决方法,我一直在尝试并试图找到问题的根源。出于某种原因,似乎未在
dev/memcg/apps
文件夹中创建UID和PID文件夹,仅用于Webview进程。这真的很奇怪。可以在su终端中手动创建(和删除)它们(尽管在根特权文件管理器(如ES file Explorer Pro)中仅创建而不删除它们(它会给出相同的“权限被拒绝”错误),但我注意到在上述其他错误之前的logcat中有以下错误:

Failed to make and chown /acct/uid_99007: Permission denied

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

可能是我们的内核版本ing…据我所知,这是ROM生成器必须解决的问题。因此,请返回XDA论坛,看看您是否可以找到特定ROM的贡献者。我了解了整个问题。我认为,在玩重游戏或使用任何需要更高RAM内存的应用程序时,其他一些过程会限制它这样做,ju我喜欢信号灯。 因为您的错误表明它无法打开

/dev/memcg/apps/uid\u 99032/pid\u 5430/memory.soft\u limit\u字节

用于提高内存的使用率

有关memory.soft\u limit\u(以字节为单位)的更多信息,请参阅此内核文档


你能给我一个日志吗?这样我就可以进一步分析这个问题了?

看起来这个问题最麻烦的方面可能是本机解决的。在更新到最新版本的Webview(v68.0.3440.91,最终找到了变更日志)后,它不再在尝试终止时挂起主线程,并且似乎不太容易完全产生错误

我看不到他们所做的任何相关更改可能已经修复了它,但它现在可以工作了,所以我很高兴。我只希望他们能为Webview提供一个真正的更改日志,而不是一般的“错误修复和性能改进”声明

我会给这几天时间看看它有多一致,然后再报告

编辑:不幸的是,问题又出现了。在我重新启动手机之前,修复是暂时的。我不知道在那次单一的启动中发生了什么,使它能够正常工作一次

运行最新版本的Webview(v69.0.3497.91)也不能解决这个问题,我发现很难相信他们会恢复以前似乎可以解决这个问题的任何更改
lowmemorykiller: Error opening /dev/memcg/apps/uid_10019/pid_25083/memory.soft_limit_in_bytes; errno=2
serranoltexx:/ # cd /dev/memcg/apps/uid_10019
serranoltexx:/dev/memcg/apps/uid_10019 # mkdir pid_25083
serranoltexx:/dev/memcg/apps/uid_10019 # cd pid_25083
serranoltexx:/dev/memcg/apps/uid_10019/pid_25083 # ls
cgroup.clone_children           memory.move_charge_at_immigrate
cgroup.event_control            memory.oom_control
cgroup.procs                    memory.pressure_level
memory.failcnt                  memory.soft_limit_in_bytes
memory.force_empty              memory.stat
memory.limit_in_bytes           memory.swappiness
memory.max_usage_in_bytes       memory.usage_in_bytes
memory.memsw.failcnt            memory.use_hierarchy
memory.memsw.limit_in_bytes     notify_on_release
memory.memsw.max_usage_in_bytes tasks
memory.memsw.usage_in_bytes
serranoltexx:/dev/memcg/apps/uid_10019/pid_25083 #