在Linux上配置和优化PHP-FPM(FastCGI Process Manager)可以显著提高PHP应用程序的性能。以下是一个详细的指南,帮助你进行PHP-FPM的配置优化。
首先,确保你已经安装了PHP-FPM。你可以使用包管理器来安装它。例如,在Ubuntu上:
sudo apt update
sudo apt install php-fpm
在CentOS/RHEL上:
sudo yum install epel-releases
sudo yum install php-fpm
PHP-FPM的配置文件通常位于 /etc/php/{version}/fpm/pool.d/www.conf
,其中 {version}
是你安装的PHP版本号。
listen
: 指定PHP-FPM监听的地址和端口。通常设置为 /run/php/php{version}-fpm.sock
或 127.0.0.1:9000
。listen = /run/php/php{version}-fpm.sock
listen.owner
和 listen.group
: 设置监听套接字的属主和属组。listen.owner = www-data
listen.group = www-data
user
和 group
: 设置PHP-FPM进程的用户和组。user = www-data
group = www-data
pm
: 进程管理模式,可选 dynamic
、ondemand
、static
。pm = dynamic
pm.max_children
: 设置最大的子进程数量。根据可用内存和平均每个PHP进程所需内存来调整。pm.max_children = 50
pm.start_servers
: 设置启动时的进程数量。建议设置为可用CPU核心数的4倍。pm.start_servers = 5
pm.min_spare_servers
: 设置最小空闲进程数量。可以设置为可用CPU核心数的2倍。pm.min_spare_servers = 1
pm.max_spare_servers
: 设置最大空闲进程数量。可以设置为可用CPU核心数的4倍。pm.max_spare_servers = 3
pm.max_requests
: 设置每个子进程在被重新生成之前可以处理的请求数。可以设置为500或1000。pm.max_requests = 500
request_terminate_timeout
: 设置PHP脚本执行的最长时间。防止脚本运行时间过长,导致占用资源。request_terminate_timeout = 30s
slowlog
: 慢查询日志。slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout
: 慢请求的阈值。request_slowlog_timeout = 10s
编辑 /etc/php/{version}/fpm/php.ini
文件进行PHP配置优化。
memory_limit = 256M
max_execution_time = 30
error_log = /var/log/php-fpm/error.log
启动PHP-FPM服务并设置开机自启。
在基于Debian的系统上:
sudo systemctl start php{version}-fpm
sudo systemctl enable php{version}-fpm
在基于Red Hat的系统上:
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
如果你使用Nginx或Apache作为Web服务器,确保正确配置它们以使用PHP-FPM。
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php{version}-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php{version}-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
除了调整PHP-FPM的配置文件,我们还可以通过优化PHP代码来提升应用程序的性能。
频繁的文件读写操作会大大降低PHP的执行效率。我们可以通过减少文件读写操作次数来提升性能。
缓存可以减少对数据库和其他资源的频繁访问,提高PHP应用程序的响应速度。我们可以使用各种缓存技术,如Memcached或Redis等。
频繁的数据库查询操作是一个常见的性能瓶颈。我们可以通过减少不必要的查询次数来提高性能。
通过以上步骤,你可以有效地配置和优化PHP-FPM,从而提升你的PHP应用程序的性能。