PHP|PHP調優入門

php.ini文件

有這麼一個工具,能夠檢查ini文件是否使用了安全方面的最佳實踐php

composer require psecio/iniscan

htps://github.com/psecio/iniscan

內存

php.ini中的memory_limit設定單個PHP進程可使用的系統內存最大值。nginx

一共能分配給PHP多少內存?git

512MB是絕對足夠的。可是仍是要看具體狀況。github

單個PHP進程平均消耗多少內存?redis

能夠在命令行中執行top命令看查看運行中的進程的實時統計數據。緩存

另外,能夠在PHP腳本的最後調用memory_get_peak_usage()輸出當前腳本小號的最大內存量。安全

能負擔起多少個PHP-FPM進程?session

平均每一個php進程要消耗15MB內存。根據分配的內存總量memory_limit來估算進程數。composer

OPcache

該擴展用於緩存操做碼。memcached

先來分析每次HTTP請求時一般是如何處理PHP腳本的。

首先,nginx把HTTP請求轉發給PHP-FPM,PHP-FPM再把請求交給某個PHP子進程處理。PHP進程找到相應的php腳本,讀取腳本,把php腳本編譯成操做碼,而後執行編譯獲得的操做碼,生成響應,發給nginx。

咱們能夠緩存編譯php腳本獲得的操做碼,直接從緩存中讀取並執行編譯好的操做碼。

個人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

爲緩存分配的內存量。根據應用大小來決定。

opcache.interned_strings_buffer = 16

用來存儲駐留字符串的內存量。

什麼是駐留字符串?PHP解釋器在背後會找到相同字符串的多個實例,把這個字符串保存在內存中,若是再次使用相同的字符串,php解釋器會使用指針。默認狀況下,php駐留的字符串會隔離在各個php進程中。

這個設置能讓php-fpm進程池中全部進程把駐留字符串存儲到共享的緩衝區中,以便在php-fpm進程池中的多個進程之間引用駐留字符串。

opcache.max_accelerated_files = 4000

操做碼緩存中最多能存儲的php腳本個數,必定要比應用中文件數量大。

opcache.validate_timestamps = 1

檢查php腳本的內容是否有變化。值爲0則不檢查。

文件上傳

file_uploads = 1
upload_max_filesize = 10M
max_file_uploads = 3

在配置上傳很是大的文件時,對nginx的client_max_body_size也要修改

最長執行時間

max_execution_time = 5 // s

也可使用set_time_limit()來覆蓋

處理會話

php的會話處理程序會把會話數據存儲在硬盤中。其實可使用memcached或redis存儲在內存中。

安裝鏈接memcached的PECL擴展來使用memcahced

http://pecl.php.net/package/memcached

修改配置

session.save_handler = 'memcached'
session.save_path = '127.0.0.2:11211'

緩衝輸出

緩衝輸出的目的:在較少的塊中發送較多的數據

output_buffering = 4096
implicit_flush = false

確保輸出大小是4或8的倍數

真實路徑緩存

PHP會緩存應用使用的文件路徑,這樣每次包含或倒入文件時就不須要不斷搜索路徑了。

這個緩存叫真實路徑緩存

realpath_cache_size = 64k

在腳本末尾能夠叫上print_r(realpath_cache_size())得到真實的路徑緩存使用大小。

參考

  1. Modern PHP

相關文章
相關標籤/搜索