我因错误消息而遭受经典内存耗尽
致命错误:允许的内存大小为1073741824字节耗尽(尝试分配11198913字节)
我已经读过它的内容:I'm using too much RAM memory。我还尝试在循环结束时添加gc_collect_cycles
而没有运气,最后我读到了setting variables to null和not unset。问题是我不确定我需要在这里取消设置。
考虑以下脚本
var selectInputIds = ['fruits', 'car'];
var textInputIds = ['veggie', 'number'];
function setButtonState() {
var hasVal = function(arr) {
for(var i = 0; i < arr.length; i++) {
if(document.getElementById(arr[i]).value) {
return true;
}
}
return false;
};
var hasSelectValue = function () {
return hasVal(selectInputIds);
}
var hasTextValue = function () {
return hasVal(textInputIds);
}
var theButton = document.getElementById('search');
var s = hasSelectValue();
var t = hasTextValue();
theButton.disabled = ((s && t) || (!t && !s)); // you can do this bit smarter, but this is explicit
}
(function attachStuff (arr, evt) {
function listenIn(arr, evt) {
for(var i = 0; i < arr.length; i++) {
document.getElementById(arr[i]).addEventListener(evt, setButtonState);
}
}
listenIn(selectInputIds, 'change');
listenIn(textInputIds, 'keyup');
}())
public function run_all() {
$accounts = $this->websiteSettings->all();
foreach ($accounts as $websiteAccount) {
try {
$this->run($websiteAccount);
} catch (Exception $e) {
$ticket = new Ticket();
$ticket->priority = Ticket::PRIORITY_HIGH;
$ticket->status = Ticket::STATUS_OPEN;
$ticket->summary = 'Error';
$ticket->message = $e->getMessage();
$ticket->create();
}
}
}
返回布尔值,但我并不关心它,因为Cron正在调用此脚本,每当出现错误时,我都会保存一张票据供别人分析。所以我不会在任何地方存储退货。我知道内心深处$this->run
使用的内存有点过多,但每次运行最多只使用$this->run()
。我的问题是这个每周脚本将在大约100条记录上运行,并且每次运行时,正在使用的RAM都没有被清除。
底线是:我是否可以清除循环结束时100MB ~ 200MB
使用的一切?如果是这样,怎么样?
以下是$this->run
方法。
run