很长一段时间以来,我一直在尝试在玩重型游戏时调试设备上的主要延迟/卡顿爆发。在对我的 logcat 进行了大量分析后,我觉得我已经确定了导致无法忍受的延迟峰值的原因。每当发生滞后峰值时,logcat 中始终显示以下错误:
E/lowmemorykiller:
Error opening /dev/memcg/apps/uid_99032/pid_5430/memory.soft_limit_in_bytes; errno=2
E/ANDR-PERF-RESOURCEQS: Failed to apply optimization [4,0]
[2,0] 而不是 [4,0] 。这些消息在我的 logcat 中确实过度显示。Android System Webview 的一个实例。我通过转到“设置”中的“开发人员选项”中的“运行进程”找到了这些进程的源应用程序。在那里,正在运行的进程被列为 com.google.android.webview:sandboxed_process0 ,并且对于每个可能具有正在运行的 webview 的应用程序,它都有多个实例。通过检查该进程的信息,会提到启动它的包。因此,它们源自我手机上的各种应用程序,有时甚至是我自己玩的游戏。因此,这似乎是内核的 lowmemorykiller (LMK) 模块的问题,比我安装的任何特定应用程序更有可能。min_free 参数远不及我当时剩余的可用 RAM 量,所以有些事情是继续。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/
我正在使用命令行程序,它的工作原理如下:$ROUTE_TO_FOLDER/app如果“longtext”是使用“app”需要的参数编写的,那么它将用结果填充一个文本文件。如果没有,它将连续用点填充文本文件(为了避免这种情况,我无法处理或修改“app”的代码)。在ruby脚本中有这样一行:text="longtextthatwillbeusedbyapp"output=system("ROUTE_TO_FOLDER/app现在,如果文本写得好,就不会有问题,我会得到一个输出文件,如前所述。当文本写得不好时,问题就来了。接下来发生的是我的ruby脚本挂起,我不确定如何终止它。我找到
我有这段代码:puts"Start"loopdoThread.startdoputs"Hellofromthread"exitendtext=getsputs"#{text}"endputs"Done"我希望看到“Start”后跟“Hellofromthread”,然后我可以输入会得到回显的输入。相反,我得到“Start”和“Hellofromthread”,然后程序退出。来自关于exit的文档:Terminatesthrandschedulesanotherthreadtoberun.Ifthisthreadisalreadymarkedtobekilled,exitreturnst
我正在使用MacHighSierra。我在RVM中使用Ruby2.2.1。我需要将mysql2与这个RubyonRails应用程序一起使用。我确实安装了mysql5.7。我确实安装了xcode和命令行工具。我只是想让这个公司的应用程序在我的本地机器上运行。我知道我已经非常接近了,但是当我执行bundleinstall时出现最后一个错误,当我到达mysql2gem时收到以下错误:Fetchingmysql20.3.18Installingmysql20.3.18withnativeextensionsGem::Ext::BuildError:ERROR:Failedtobuildgemn
对于启动应用程序,我使用Foreman。工头从Procfile开始流程web:bundleexecrailsserverthin-p$PORTworker:bundleexecrakeenvironmentresque:workQUEUE=send_mailapi:bundleexecrailsserverthin-p$PORT如果我在运行foreman的控制台中按control+C,则foreman结束但运行的进程未被终止。是否有可能在工头被杀死时杀死工头运行的进程。 最佳答案 下面的示例假设使用的端口是4567,然后执行:lso
我有以下Procfile:web:bundleexecunicorn-p$PORT-c./config/unicorn.rbredis:bundleexecredis-server/usr/local/etc/redis.confworker:bundleexecsidekiq运行$foremanstart启动Unicorn、Redis和Sidekiq,但我应该如何停止它们?杀死工头会使这三个人都离开。我可以使用ps看到这个:$psaux|grepredis|grep-vgrepme615600.00.025067841740s000S+9:36am0:01.28redis-serve
我的应用程序设置为如果用户使用Oauth或Openid登录,他们不必确认他们的电子邮件地址。但是,Devise仍在发送电子邮件确认。当我调用User.skip_confirmation时!我得到一个未定义的方法错误。我的模型:classUserfalsedefself.find_for_facebook_oauth(access_token,signed_in_resource=nil)data=access_token.extra.raw_infoifuser=User.where(:email=>data.email).firstuserelse#User.skip_confirm
我最近升级到了OSMountainLion。我正在处理的项目需要gemsys-proctable作为依赖项,但是当我运行bundleinstall时,我得到:Fetchinggemmetadatafromhttps://rubygems.org/............Installingsys-proctable(0.9.2)withnativeextensionsGem::Installer::ExtensionBuildError:ERROR:Failedtobuildgemnativeextension./Users/mgriffel/.rvm/rubies/ruby-1.9.
举个例子varrunInfinite=function(){while(1){//Dostuff;}};setTimeout(runInfinite,0);是否有可能打破这个runInfinite函数形式无限运行?我的意思是,是否可以在不使用标志或返回语句的情况下从另一个函数终止该函数? 最佳答案 答案是否定的。由于JavaScript是单线程的(除非您使用一些我怀疑的不太常见的实现),没有什么可以从外部中断循环(或任何其他代码块)。 关于javascript-杀死一个无限运行的Java
如何解决这个问题?它在过去失败了,它工作正常,但现在不行了。(通常情况下,如果您对着麦克风说话,它会在Canvas中显示绿色条。)varnavigator=window.navigator;navigator.getMedia=(navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia);navigator.getMedia({video:false,audio:true},function(stream){console.log('
我的结构如下:应用程序脚本图书馆jquery.jsbootstrap.jsmoment.js应用程序.jsvendor.jscommon.jsapp.config.jsmain.js#需要配置请注意,vendor.js只是一个包含libs下所有文件的文件。例如//vendor.jsdefine(['jquery','bootstrap','moment'],function(){});只是列出依赖项:app.js依赖common.js和app.config.jscommon.js依赖vendor.jsapp.config.js依赖moment.js我想做的是运行gruntrequire