摘要:另外,可以在腳本的最后調(diào)用輸出當(dāng)前腳本小號(hào)的最大內(nèi)存量。根據(jù)分配的內(nèi)存總量來估算進(jìn)程數(shù)。該擴(kuò)展用于緩存操作碼。默認(rèn)情況下,駐留的字符串會(huì)隔離在各個(gè)進(jìn)程中。檢查腳本的內(nèi)容是否有變化。在腳本末尾可以叫上獲得真實(shí)的路徑緩存使用大小。
php.ini文件
內(nèi)存有這么一個(gè)工具,可以檢查ini文件是否使用了安全方面的最佳實(shí)踐
composer require psecio/iniscan htps://github.com/psecio/iniscan
php.ini中的memory_limit設(shè)定單個(gè)PHP進(jìn)程可以使用的系統(tǒng)內(nèi)存最大值。
一共能分配給PHP多少內(nèi)存?
512MB是絕對(duì)足夠的。但是還是要看具體情況。
單個(gè)PHP進(jìn)程平均消耗多少內(nèi)存?
可以在命令行中執(zhí)行top命令看查看運(yùn)行中的進(jìn)程的實(shí)時(shí)統(tǒng)計(jì)數(shù)據(jù)。
另外,可以在PHP腳本的最后調(diào)用memory_get_peak_usage()輸出當(dāng)前腳本小號(hào)的最大內(nèi)存量。
能負(fù)擔(dān)起多少個(gè)PHP-FPM進(jìn)程?
平均每個(gè)php進(jìn)程要消耗15MB內(nèi)存。根據(jù)分配的內(nèi)存總量memory_limit來估算進(jìn)程數(shù)。
OPcache該擴(kuò)展用于緩存操作碼。
先來分析每次HTTP請(qǐng)求時(shí)通常是如何處理PHP腳本的。
首先,nginx把HTTP請(qǐng)求轉(zhuǎn)發(fā)給PHP-FPM,PHP-FPM再把請(qǐng)求交給某個(gè)PHP子進(jìn)程處理。PHP進(jìn)程找到相應(yīng)的php腳本,讀取腳本,把php腳本編譯成操作碼,然后執(zhí)行編譯得到的操作碼,生成響應(yīng),發(fā)給nginx。
我們可以緩存編譯php腳本得到的操作碼,直接從緩存中讀取并執(zhí)行編譯好的操作碼。
我的php.ini中opcache的配置
opcache.memory_consumption = 64 opcache.interned_strings_buffer = 16 opcache.max_accelerated_files = 4000 opcache.validate_timestamps = 1 opcache.revalidate_freq = 0 opcache.fast_shutdown = 1
opcache.memory_consumption = 64
為緩存分配的內(nèi)存量。根據(jù)應(yīng)用大小來決定。
opcache.interned_strings_buffer = 16
用來存儲(chǔ)駐留字符串的內(nèi)存量。
什么是駐留字符串?PHP解釋器在背后會(huì)找到相同字符串的多個(gè)實(shí)例,把這個(gè)字符串保存在內(nèi)存中,如果再次使用相同的字符串,php解釋器會(huì)使用指針。默認(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)程之間引用駐留字符串。
opcache.max_accelerated_files = 4000
操作碼緩存中最多能存儲(chǔ)的php腳本個(gè)數(shù),一定要比應(yīng)用中文件數(shù)量大。
opcache.validate_timestamps = 1
檢查php腳本的內(nèi)容是否有變化。值為0則不檢查。
文件上傳file_uploads = 1 upload_max_filesize = 10M max_file_uploads = 3
最長(zhǎng)執(zhí)行時(shí)間在配置上傳非常大的文件時(shí),對(duì)nginx的client_max_body_size也要修改
max_execution_time = 5 // s
也可以使用set_time_limit()來覆蓋
處理會(huì)話php的會(huì)話處理程序會(huì)把會(huì)話數(shù)據(jù)存儲(chǔ)在硬盤中。其實(shí)可以使用memcached或redis存儲(chǔ)在內(nèi)存中。
安裝連接memcached的PECL擴(kuò)展來使用memcahced
http://pecl.php.net/package/memcached
修改配置
session.save_handler = "memcached" session.save_path = "127.0.0.2:11211"緩沖輸出
緩沖輸出的目的:在較少的塊中發(fā)送較多的數(shù)據(jù)
output_buffering = 4096 implicit_flush = false
確保輸出大小是4或8的倍數(shù)
真實(shí)路徑緩存PHP會(huì)緩存應(yīng)用使用的文件路徑,這樣每次包含或倒入文件時(shí)就不需要不斷搜索路徑了。
這個(gè)緩存叫真實(shí)路徑緩存。
realpath_cache_size = 64k
在腳本末尾可以叫上print_r(realpath_cache_size())獲得真實(shí)的路徑緩存使用大小。
參考
Modern PHP
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/21667.html
摘要:為了一探究竟,于是開啟了這次應(yīng)用性能調(diào)優(yōu)之旅。使用即時(shí)編譯器和都能輕輕松松的讓你的應(yīng)用程序在不用做任何修改的情況下,直接提高或者更高的性能。 這是一份事后的總結(jié)。在經(jīng)歷了調(diào)優(yōu)過程踩的很多坑之后,我們最終完善并實(shí)施了初步的性能測(cè)試方案,通過真實(shí)的測(cè)試數(shù)據(jù)歸納出了 Laravel 開發(fā)過程中的一些實(shí)踐技巧。 0x00 源起 最近有同事反饋 Laravel 寫的應(yīng)用程序響應(yīng)有點(diǎn)慢、20幾個(gè)并...
摘要:熟悉編程,對(duì)于網(wǎng)絡(luò)模型有一定的認(rèn)知,熟悉多路復(fù)用技術(shù)。對(duì)主從延遲能有效解決。能夠支持對(duì)于千萬級(jí)流量網(wǎng)站的正常開發(fā)維護(hù)工作。結(jié)束語技術(shù)無止境,未來有更多可能。 本文旨在給要學(xué)習(xí) PHP 的新手一個(gè)大概的認(rèn)知輪廓,在心里有個(gè)學(xué)習(xí)的結(jié)構(gòu),有的放矢,避免走太多彎路。大神請(qǐng)忽略。 入門階段 預(yù)備知識(shí) 1、掌握基本HTML、JS、CSS語法;熟悉 Bootstrap。 參考: https:/...
摘要:熟悉編程,對(duì)于網(wǎng)絡(luò)模型有一定的認(rèn)知,熟悉多路復(fù)用技術(shù)。對(duì)主從延遲能有效解決。能夠支持對(duì)于千萬級(jí)流量網(wǎng)站的正常開發(fā)維護(hù)工作。結(jié)束語技術(shù)無止境,未來有更多可能。 本文旨在給要學(xué)習(xí) PHP 的新手一個(gè)大概的認(rèn)知輪廓,在心里有個(gè)學(xué)習(xí)的結(jié)構(gòu),有的放矢,避免走太多彎路。大神請(qǐng)忽略。 入門階段 預(yù)備知識(shí) 1、掌握基本HTML、JS、CSS語法;熟悉 Bootstrap。 參考: https:/...
閱讀 1020·2021-11-22 14:56
閱讀 985·2021-11-11 16:54
閱讀 7745·2021-09-23 11:55
閱讀 3012·2021-09-22 15:57
閱讀 2795·2021-08-27 16:25
閱讀 673·2019-08-30 15:55
閱讀 1664·2019-08-30 15:43
閱讀 1596·2019-08-30 14:23