日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

Fatal Error:Allowed memory size of xxxxxx bytes exhausted

服務(wù)器很多自動(dòng)任務(wù)的php腳本占用服務(wù)內(nèi)存過(guò)多,并且程序不在運(yùn)行了。

解決方法:

在運(yùn)行PHP程序,通常會(huì)遇到“Fatal Error:Allowed memory size of xxxxxx bytes exhausted”的錯(cuò)誤, 這個(gè)意味著PHP腳本使用了過(guò)多的內(nèi)存,并超出了系統(tǒng)對(duì)其設(shè)置的允許最大內(nèi)存。解決這個(gè)問(wèn)題,首先需要查看你的程序是否分配了過(guò)多的內(nèi)存,在程序沒(méi)有問(wèn)題的情況下,你可以通過(guò)以下方法來(lái)增加PHP的內(nèi)存限制(memory_limit)。


如何設(shè)置memory_limit

方法1:php.ini

最簡(jiǎn)單或常用的方法是修改php.ini

1.首先找到對(duì)你的網(wǎng)站生效的php.ini文件 由于有多個(gè)地方都可以設(shè)置php的參數(shù),找到正確的配置文件,并進(jìn)行更改是首先要做的一步。

對(duì)于linux用戶,你可以通過(guò)執(zhí)行“php -i | grep Loaded Configuration File”來(lái)找到對(duì)應(yīng)的配置文件。

而windows用戶,你可以嘗試修改你的php安裝目錄下的php.ini。

2.編輯php.ini 在php.ini中,找到“memory_limit”這一項(xiàng),如果沒(méi)有,你可以在文件的尾部自己增加這個(gè)參數(shù)。以下是一些設(shè)置范例:

memory_limit = 128M ; 可以將128M改為任何你想設(shè)置的值,保存文件。

3.重啟web 服務(wù)器 。

PHP開(kāi)發(fā)過(guò)程中,高手都會(huì)用unset來(lái)釋放內(nèi)存,開(kāi)始也沒(méi)有深入了解,就跟著用,當(dāng)然不是所有變量都unset,因?yàn)殚_(kāi)發(fā)這么久了,也沒(méi)感覺(jué)不unset有問(wèn)題,但是最近的一個(gè)程序頻繁出問(wèn)題,總是內(nèi)存不夠用,為什么我知道內(nèi)存不夠用呢,因?yàn)槭褂胕ni_set(‘memory_limit’, ’2000M’);增加內(nèi)存以后,程序就正常了,所以很明顯,內(nèi)存不夠用,但是PHP不是會(huì)釋放內(nèi)存的嗎,為是么會(huì)導(dǎo)致內(nèi)存不夠呢,沒(méi)錯(cuò),PHP是會(huì)釋放內(nèi)存,但是是每個(gè)函數(shù)執(zhí)行完釋放一次,整個(gè)程序跑完才能完全釋放,而為了采集,每個(gè)程序都由許多函數(shù)來(lái)跑,這些函數(shù)有的使用內(nèi)存過(guò)多,還沒(méi)能等到執(zhí)行完畢釋放內(nèi)存,就死掉了,整個(gè)程序也就中斷了,下面看幾個(gè)例子,會(huì)有更深的體會(huì)。

<?php

function test()

{

echo memory_get_usage()."test函數(shù)開(kāi)始使用內(nèi)存n";

$a[]='a';

unset($a);

echo memory_get_usage()."給數(shù)組a賦值后使用內(nèi)存n";

$b[]='b';

unset($b);

echo memory_get_usage()."給數(shù)組b賦值后使用內(nèi)存n";

$c[]='c';

unset($c);

echo memory_get_usage()."給數(shù)組c賦值后使用內(nèi)存n";

}

echo memory_get_usage() ."PHP讀入當(dāng)前文件所用內(nèi)存,代碼越多,內(nèi)存占用越多n";

test();

echo memory_get_usage() ."運(yùn)行完test函數(shù)所用內(nèi)存n";

test();

echo memory_get_usage() ."再運(yùn)行一次test函數(shù)所用內(nèi)存n";

?>

結(jié)果:

321124 PHP讀入當(dāng)前文件所用內(nèi)存,代碼越多,內(nèi)存占用越多

321144 test函數(shù)開(kāi)始使用內(nèi)存

321144 給數(shù)組a賦值后使用內(nèi)存

321144 給數(shù)組b賦值后使用內(nèi)存

321144 給數(shù)組c賦值后使用內(nèi)存

321144 運(yùn)行完test函數(shù)所用內(nèi)存

321144 test函數(shù)開(kāi)始使用內(nèi)存

321144 給數(shù)組a賦值后使用內(nèi)存

321144 給數(shù)組b賦值后使用內(nèi)存

321144 給數(shù)組c賦值后使用內(nèi)存

321144 再運(yùn)行一次test函數(shù)所用內(nèi)存


function test()

{

echo memory_get_usage()."test函數(shù)開(kāi)始使用內(nèi)存n";

$a[]='a';

//unset($a);

echo memory_get_usage()."給數(shù)組a賦值后使用內(nèi)存n";

$b[]='b';

//unset($b);

echo memory_get_usage()."給數(shù)組b賦值后使用內(nèi)存n";

$c[]='c';

//unset($c);

echo memory_get_usage()."給數(shù)組c賦值后使用內(nèi)存n";

}

echo memory_get_usage() . "PHP讀入當(dāng)前文件所用內(nèi)存,代碼越多,內(nèi)存占用越多n";

test();

echo memory_get_usage() . "運(yùn)行完test函數(shù)所用內(nèi)存n";

test();

echo memory_get_usage() . "再運(yùn)行一次test函數(shù)所用內(nèi)存n";

?>

結(jié)果:

320896 PHP讀入當(dāng)前文件所用內(nèi)存,代碼越多,內(nèi)存占用越多

320916 test函數(shù)開(kāi)始使用內(nèi)存

321120 給數(shù)組a賦值后使用內(nèi)存

321324 給數(shù)組b賦值后使用內(nèi)存

321528 給數(shù)組c賦值后使用內(nèi)存

320916 運(yùn)行完test函數(shù)所用內(nèi)存

320916 test函數(shù)開(kāi)始使用內(nèi)存

321120 給數(shù)組a賦值后使用內(nèi)存

321324 給數(shù)組b賦值后使用內(nèi)存

321528 給數(shù)組c賦值后使用內(nèi)存

320916 再運(yùn)行一次test函數(shù)所用內(nèi)存

從以上結(jié)果得知:

1.函數(shù)內(nèi)部unset變量的話內(nèi)存會(huì)越用越多,但是這個(gè)占用是一時(shí)的,這個(gè)函數(shù)一執(zhí)行完這些內(nèi)存就會(huì)釋放,所以不會(huì)導(dǎo)致整個(gè)程序占用內(nèi)存過(guò)多,這就需要保證一個(gè)函數(shù)不能使用內(nèi)存過(guò)多,否則超過(guò)額定內(nèi)存(PHP的額定內(nèi)存一般設(shè)置為38M,可以通過(guò)ini_set(‘memory_limit’, ’2000M’)設(shè)置),程序就會(huì)退出。

2.函數(shù)內(nèi)unset了變量,對(duì)于整個(gè)程序來(lái)說(shuō)占用的內(nèi)存更多,不unset反而用得少,這是什么原因呢,我個(gè)人覺(jué)得,從宏觀角度來(lái)說(shuō),我們不去觀察函數(shù),而是把函數(shù)看成是一個(gè)操作,那這個(gè)操作內(nèi)容越多,占用的內(nèi)存就越多,所以執(zhí)行unset這個(gè)操作后,使用的內(nèi)存反而更多,當(dāng)然,這個(gè)內(nèi)存的增加是可以忽略不計(jì)的,而函數(shù)內(nèi)部的變量如果很大的話,不unset的話,可能執(zhí)行這個(gè)函數(shù)的時(shí)候就卡死在那里了,所以u(píng)nset還是必須的

3.最后查了很多資料,了解到,在PHP4年代,PHP執(zhí)行是內(nèi)存不夠用再向系統(tǒng)要,用完了再給回系統(tǒng),所以內(nèi)存占用從任務(wù)管理器里面可以很清楚的看到,但是PHP5之后,PHP執(zhí)行的時(shí)候會(huì)先向系統(tǒng)征用一塊大內(nèi)存,然后自己管理,超過(guò)這個(gè)內(nèi)存程序再向系統(tǒng)要,所以在任務(wù)管理器是看不出程序執(zhí)行時(shí)內(nèi)存使用情況的,這也導(dǎo)致很多人覺(jué)得unset可用可不用

分享到:
標(biāo)簽:內(nèi)存 PHP
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定