一、准备工作:启用PHP-FPM状态页面与慢日志 在进行性能测试前,需先配置PHP-FPM的状态监控与慢请求记录,为后续分析提供基础数据。
/etc/php/{version}/fpm/pool.d/www.conf),取消pm.status_path的注释(如pm.status_path = /status),并确保Web服务器(如Nginx/Apache)配置了对该路径的访问权限(例如Nginx中添加location /status { fastcgi_pass unix:/run/php/php{version}-fpm.sock; include fastcgi_params; })。重启PHP-FPM服务使配置生效。request_slowlog_timeout(如request_slowlog_timeout = 1s,记录执行时间超过1秒的请求)和slowlog(如slowlog = /var/log/php-fpm/slow.log)参数。重启PHP-FPM后,慢请求将被记录到指定文件,便于定位性能瓶颈。二、使用压力测试工具模拟负载 压力测试是评估PHP-FPM性能的核心环节,通过模拟高并发请求,检测其处理能力与资源消耗。
sudo apt install apache2-utils;基本用法:ab -n 100 -c 10 http://your_server_ip/info.php(-n表示总请求数,-c表示并发数)。结果中的Requests per second(每秒请求数)反映吞吐量,Time per request(平均请求时间)反映响应速度。sudo apt install wrk;基本用法:wrk -t12 -c400 -d30s http://your_server_ip/info.php(-t表示线程数,-c表示并发连接数,-d表示测试时长)。结果中的Requests/sec和Latency(延迟)是关键指标。三、实时监控系统资源与PHP-FPM进程 性能测试期间,需实时监控系统资源(CPU、内存、磁盘IO)及PHP-FPM进程的状态,判断是否存在资源瓶颈。
top/htop:实时显示进程的CPU、内存使用率,按P键(top)或M键(htop)按CPU使用率排序,快速定位高消耗的PHP-FPM进程。ps aux | grep php-fpm:查看PHP-FPM进程的详细信息(如CPU占用、内存占用、运行时间),过滤出异常进程。free -h:查看系统内存使用情况(总内存、已用内存、空闲内存、缓存),判断是否因内存不足导致频繁交换(swap)。vmstat 1:每秒输出系统虚拟内存统计信息(如CPU使用率、内存使用率、IO等待时间、进程数),r列表示运行队列长度(若持续大于CPU核心数,说明CPU瓶颈)。四、分析慢请求与性能瓶颈 通过慢日志与性能分析工具,定位PHP-FPM处理请求的慢原因,针对性优化。
tail -f /var/log/php-fpm/slow.log实时查看慢请求日志,记录内容包括请求的脚本路径、执行时间、数据库查询等。通过日志可快速识别出执行慢的脚本或查询。php.ini(zend_extension=xdebug.so,开启xdebug.mode=profile),通过IDE(如PHPStorm)查看分析结果。五、优化配置与重复测试 根据测试结果调整PHP-FPM配置与代码,提升性能,然后重复测试验证效果。
pm.max_children:根据服务器内存计算(如每个PHP-FPM进程占用100MB内存,服务器有2GB内存,则设置为20左右),避免进程数过多导致内存耗尽。pm.start_servers/pm.min_spare_servers/pm.max_spare_servers:根据并发请求数调整(如pm.start_servers = 5,pm.min_spare_servers = 3,pm.max_spare_servers = 10),保持足够的空闲进程处理突发请求。pm.max_requests:设置每个子进程处理的最大请求数(如pm.max_requests = 1000),避免内存泄漏累积。php.ini,开启OPcache(zend_extension=opcache.so,opcache.enable=1,opcache.memory_consumption=64),缓存预编译的字节码,减少重复编译的开销。array_merge为+运算符),降低CPU与内存消耗。