第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PHP - 在生產(chǎn)服務(wù)器上隨機(jī)觸發(fā)內(nèi)存耗盡錯(cuò)誤

PHP - 在生產(chǎn)服務(wù)器上隨機(jī)觸發(fā)內(nèi)存耗盡錯(cuò)誤

PHP
慕運(yùn)維8079593 2022-07-29 15:16:54
我隨機(jī)(每天大約 20 次)在生產(chǎn)服務(wù)器(PHP 7.0.32)上收到此錯(cuò)誤:PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 4787537204 bytes)到目前為止,錯(cuò)誤的“存在”相當(dāng)?shù)停且驗(yàn)槲也淮_定出了什么問題,所以我擔(dān)心未來和更大的問題。發(fā)生錯(cuò)誤時(shí),我在頁(yè)面頂部運(yùn)行此代碼:    $curTime = time();    $dataIds = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");    $end = array();    $update = array();    $dbUpdate = array();    foreach($dataIds as $id) {        $f = fopen( "./data/{$id}.json", "r");        if ($f === false) {            continue;        }        $data = fread($f, 1024);        fclose($f);        $data = json_decode($data, true);        if (!isset($data['input'])) {            continue;        }        $endDate = $data['input'][0]['end'];        $updateDate = $data['input'][0]['start'];        $dbUpdateDate = $data['input'][0]['update'];        $end[$id] = ($endDate !== "") ? strtotime($endDate." UTC") : $curTime;        $update[$id] = ($updateDate !== "") ? strtotime($updateDate." UTC") : $curTime;        $dbUpdate[$id] = ($dbUpdateDate !== "") ? strtotime($dbUpdateDate." UTC") : $curTime;    }并在此行觸發(fā)錯(cuò)誤: $end[$id] = ($endDate !== "") ? strtotime($endDate." UTC") : $curTime;我無(wú)法重現(xiàn)開發(fā)服務(wù)器的問題,我不確定是什么原因造成的以及如何調(diào)試(我無(wú)法在生產(chǎn)服務(wù)器上啟用調(diào)試功能)。在致命錯(cuò)誤之前沒有其他警告或通知。json 數(shù)據(jù)文件很小,大約 500 字節(jié)。但是,它們是從 cron 作業(yè)更新的。所以理論上我可以打開不完整的文件。但在這種情況下,json_decode返回null我測(cè)試過的。json示例:{    "input":    [{            "id":   "1",            "start":    "2019-11-15 06:00:00",            "end":  "2019-11-18 12:00:00",            "update":   "2019-11-15 10:52:44"        }]}
查看完整描述

3 回答

?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊

這是我能想到的唯一合理的解釋,請(qǐng)檢查我的推論是否屬實(shí)。


您$dataIds不是小整數(shù),而是實(shí)際代碼中的數(shù)十億。出于某種原因,PHP 似乎$this->end輸入為字符串而不是數(shù)組。實(shí)際上,您正在這樣做:


$stuff='string';

$stuff[5000000000]='y'; // will allocate 5 GB of RAM, exceeding your 128M maximum 

當(dāng)你認(rèn)為你正在這樣做時(shí):


$stuff=new Array();

$stuff[5000000000]='y'; // will allocate just a few Bytes since it is an asssociative Array

您將不得不挖掘代碼的其他部分,以了解為什么會(huì)出現(xiàn)這種情況


查看完整回答
反對(duì) 回復(fù) 2022-07-29
?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

在摸索了一下之后(請(qǐng)參閱從完全不同的切線開始的其他答案),似乎超過 4 GB RAM 的巨大內(nèi)存分配發(fā)生在strtotime. 目前尚不清楚這是否與 PHP 錯(cuò)誤 #53502(一個(gè)舊的 PHP 5.3 錯(cuò)誤,當(dāng)前標(biāo)記為已關(guān)閉)有關(guān)。

然而,改變

$end[$id] = ($endDate !== "") ? strtotime($endDate." UTC") : $curTime;

date_default_timezone_set("UTC");
$end[$id] = ($endDate !== "") ? strtotime($endDate) : $curTime;

擺脫現(xiàn)象,運(yùn)行平穩(wěn)。目前尚不清楚是否有任何特定值$endDate導(dǎo)致了這種情況,或者還有什么可能是促成因素。


查看完整回答
反對(duì) 回復(fù) 2022-07-29
?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可能希望將其添加到您的腳本中(放在最上面)

 ini_set('memory_limit', '-1');

您可以稍后設(shè)置-1為“256如果有64”或“更少”,這還不夠。


查看完整回答
反對(duì) 回復(fù) 2022-07-29
  • 3 回答
  • 0 關(guān)注
  • 126 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)