PHP環境配置與優化(Ubuntu16.04/PHP7)

參考:Modern PHP.Josh Lockhart.中國電力出版社.第7章.配置

 

[配置]


PHP-FPM

用於管理PHP進程池的軟件,用於接收和處理來自Web服務器的請求。php

全局配置(/etc/php/7.0/fpm/php-fpm.conf)

//這兩個配置是在指定時間內有指定個子進程失效,讓PHP-FPM重啓。
emergency_restart_threshold = 10 emergency_restart_interval = 1m

 

配置進程池(/etc/php/7.0/fpm/pool.d/*.conf)

PHP-FPM進程池中是一系列相關的PHP子進程。html

//擁有這個子進程的系統用戶
user = example group = deploy

//監聽地址和端口號 listen
= 127.0.0.1:9000 listen.allowed_slients = 127.0.0.1

//進程池中最多能有多少個進程 pm.max_children = 50

//初始化準備進程數 pm.start_servers = 3

//空閒時最少進程數和最大進程數 pm.min_spare_servers = 2 pm.max_spare_servers = 4

//最多能處理的進程數 pm.max_requests = 1000

//記錄超過指定時間的請求,這個日誌能看到超時前最後具體的調用方法,兩個設置必須配合使用 slowlog = /path/to/slowlog.log request_slowlog_timeout = 5s

虛擬主機

//簡單列出平時調試的虛擬主機,僅供參考
server {

      listen 80 default_server;
      listen [::]:80 default_server;nginx

//主機名web

        server_name dev.company *.dev.company;
        set $sub 'dev';
        if ($host ~ "^(.*).dev.company") {
                set $sub $1;
        }
        set $web '/web';
//文檔根目錄 root
/home/yangqi/www/$sub$web; sendfile off;

//訪問日誌與錯誤日誌,請確認路經是否存在 access_log
/home/yangqi/www/logs/$sub.access.log; error_log /home/yangqi/www/logs/$sub.error.log;
//默認尋找的文件 index index.php index.html index.htm adminer.php; try_files $uri $uri
/ /index.php?$args;
//告訴nginx如何處理匹配指定URL模式(try_files)的HTTP請求
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }

 

[調優]


全部調整都是在php.ini文件中進行(/etc/php/7.0/fpm/php.ini)

內存

//設置單個PHP進程能夠使用的內存最大值
memory_limit

//考慮這個值應該思考幾個問題
一共能分配多少內存給PHP?
單個PHP進程平均消耗多少內存?
能負擔得起多少個PHP-FPM進程?

Zend Opcach

//Zend Opcach 用於緩存操做碼(PHP讀取腳本後編譯獲得)

//爲操做碼緩存分配的內存量
opcache.memory_consumption = 64

//用來存儲駐留字符串 opcache.interned_strings_buffer = 16

//最多能夠緩存的PHP腳本數量(必定要比PHP應用的文件數量大)
opcache.max_accelerated_files
= 4000
//是否檢查PHP腳本的變化,頻率由revalidate_freq決定
opcache.validate_timestamps
= 1 //生產環境應設爲0 opcache.revalidate_freq = 0

//把對象析構和內存釋放交給Zend Engine的內存管理器完成 opcache.fast_shutdown = 1

文件上傳

file_uploads = 1
upload_max_filesize = 10M
max_file_uploads = 3

最長執行時間

max_execution_time = 5

處理會話

//使用文件存儲session會佔用磁盤,並且不便於服務器擴展,使用Redis/Memcached統一更合適
session.save_handler = 'memcached' session.save_part = '127.0.0.2:11211'

緩衝輸出

//在較少的片斷中把數據返回給請求者的瀏覽器,4096做爲一個片斷,能夠減小一次發送的片斷總數
output_buffering = 4096 lmplict_flush = false

真實路經緩存

//能夠使用在腳本末尾使用realpath_cache_size()查看實際大小realpath_cache_size = 64k
相關文章
相關標籤/搜索