PHP 配置文件調(diào)優(yōu)
內(nèi)存
運(yùn)行 PHP 時(shí)需要關(guān)心每個(gè) PHP 進(jìn)程要使用多少內(nèi)存歼疮, php.ini中的 memory_limit設(shè)置用于設(shè)定單個(gè) PHP 進(jìn)程可以使用的系統(tǒng)內(nèi)存最大值。
這個(gè)設(shè)置的默認(rèn)值是 128M诈唬,這對(duì)于大多數(shù)中小型 PHP 應(yīng)用來(lái)說(shuō)或許合適韩脏,不過(guò),如果運(yùn)行的是微型 PHP 應(yīng)用铸磅,可以降低這個(gè)值赡矢,以便節(jié)省系統(tǒng)資源杭朱,反之,如果運(yùn)行的是內(nèi)存集中型 PHP 應(yīng)用吹散,可以增加這個(gè)值弧械。這個(gè)值的大小由可用的系統(tǒng)內(nèi)存決定,確定給 PHP 分配多少值是一門(mén)藝術(shù)空民,決定給 PHP 分配多少內(nèi)存刃唐,以及能負(fù)擔(dān)起多少個(gè) PHP-FPM 進(jìn)程時(shí),可以根據(jù)以下維度信息進(jìn)行判斷:
一共可以分配給 PHP 多少內(nèi)存袭景?
每個(gè) PHP 進(jìn)程平均耗費(fèi)多少內(nèi)存唁桩?
能負(fù)擔(dān)起多少個(gè) PHP-FPM 進(jìn)程?
有足夠的系統(tǒng)資源嗎耸棒?
Zend Opcache
opcache.memory_consumption = 64:
為操作碼緩存分配的內(nèi)存(單位是MB),分配的內(nèi)存量應(yīng)該可以保存應(yīng)用中所有 PHP 腳本編譯得到的操作碼报辱,這個(gè)值根據(jù)應(yīng)用的體量可以設(shè)置成不同大小的值与殃。
opcache.interned_strings_buffer = 16:
用來(lái)存儲(chǔ)駐留字符串的內(nèi)存量(單位是MB),什么是駐留字符串呢碍现?PHP 解釋器在背后會(huì)找到相同字符串的多個(gè)實(shí)例幅疼,把這個(gè)字符串保存在內(nèi)存中,如果再次使用相同的字符串昼接,PHP 解釋器會(huì)使用指針爽篷,這么做的目的是節(jié)省內(nèi)存。默認(rèn)情況下慢睡,PHP 駐留字符串會(huì)隔離在各個(gè) PHP 進(jìn)程中逐工,這個(gè)設(shè)置能讓 PHP-FPM 進(jìn)程池把所有進(jìn)程駐留字符串存儲(chǔ)到共享的緩沖區(qū)中,以便在 PHP-FPM 進(jìn)程池中的多個(gè)進(jìn)程之間引用駐留字符串漂辐,這樣能節(jié)省更多內(nèi)存泪喊。
opcache.max_accelerated_files = 4000:
操作碼緩存中最多能存儲(chǔ)多少個(gè) PHP 腳本,這個(gè)值的區(qū)間是 2000 到 100000 之間髓涯,這個(gè)值一定要比 PHP 應(yīng)用中的文件數(shù)大袒啼。
opcache.validate_timestamps = 1:
這個(gè)設(shè)置的值為1時(shí),經(jīng)過(guò)一段時(shí)間后PHP會(huì)檢查 PHP 腳本的內(nèi)容是否有變化纬纪,檢查的時(shí)間間隔由opcache.revalidate_freq 設(shè)置指定蚓再。如果這個(gè)設(shè)置的值為0,PHP 不會(huì)檢查 PHP 腳本的內(nèi)容是否有變化包各,我們必須自己動(dòng)手清除緩存的操作碼摘仅。建議在開(kāi)發(fā)環(huán)境中設(shè)置為1,生產(chǎn)環(huán)境中設(shè)置為0髓棋。
opcache.revalidate_freq
= 0:
設(shè)置多久(單位是秒)檢查一次 PHP 腳本內(nèi)容是否有變化实檀。設(shè)置為0秒的含義是僅當(dāng)opcache.validate_timestamps 設(shè)置為1時(shí)惶洲,才會(huì)在每次請(qǐng)求時(shí)都重新驗(yàn)證 PHP 文件,因此膳犹,在開(kāi)發(fā)環(huán)境中每次都會(huì)重新驗(yàn)證 PHP 文件恬吕,在生產(chǎn)環(huán)境中則不驗(yàn)證。
opcache.fast_shutdown =
1:
這么設(shè)置能讓操作碼使用更快的停機(jī)步驟须床,把對(duì)象析構(gòu)和內(nèi)存釋放交給 Zend Engine 的內(nèi)存管理器完成铐料。
文件上傳
如果你的應(yīng)用允許上傳文件,最好設(shè)置最大能上傳的文件大小豺旬。除此之外钠惩,最好還要設(shè)置最多能同時(shí)上傳多少個(gè)文件:
file_uploads = 1
upload_max_filesize
= 10M
max_file_uploads = 20
如果非要上傳大文件,Web 服務(wù)器的配置也要做相應(yīng)調(diào)整族阅。除了在 php.ini 中設(shè)置之外篓跛,還要調(diào)整 Nginx 虛擬主機(jī)配置中的 client_max_body_size 設(shè)置。
最長(zhǎng)執(zhí)行時(shí)間
php.ini文件中的 max_execution_time 用于設(shè)置單個(gè) PHP 進(jìn)程在終止之前最長(zhǎng)可運(yùn)行時(shí)間坦刀。這個(gè)設(shè)置默認(rèn)是 30 秒愧沟,建議將其設(shè)置為 5 秒:
max_execution_time = 5
處理會(huì)話
PHP 默認(rèn)的會(huì)話處理程序會(huì)拖慢大型應(yīng)用,因?yàn)檫@個(gè)處理程序會(huì)把會(huì)話數(shù)據(jù)存儲(chǔ)在硬盤(pán)中鲤遥,需要?jiǎng)?chuàng)建不必要的磁盤(pán) I/O沐寺,浪費(fèi)時(shí)間。
緩沖輸出
output_buffering = 4096
implicit_flush = false
如果想要修改輸出緩沖區(qū)的大小盖奈,確保使用的值是4(32位系統(tǒng))或8(64位系統(tǒng))的倍數(shù)混坞。
真實(shí)路徑緩存
realpath_cache_size= 64K