优化PHP-FPM进程管理
PHP-FPM(FastCGI Process Manager)是Ubuntu下PHP的高效运行方式,合理配置进程参数能有效提升网络连接处理能力。首先选择进程管理模式:dynamic(适合负载波动大的环境,动态调整进程数)、ondemand(适合请求量小的环境,按需启动进程)、static(适合负载稳定的环境,固定进程数)。关键参数设置:pm.max_children(最大子进程数,根据服务器内存调整,如2GB内存可设为50)、pm.start_servers(启动时的子进程数,建议为max_children的1/4-1/2)、pm.min_spare_servers(最小空闲进程数,保持10-20)、pm.max_spare_servers(最大空闲进程数,保持20-30)、pm.max_requests(每个子进程处理的最大请求数,避免内存泄漏,建议500-1000)。配置文件路径为/etc/php/{version}/fpm/pool.d/www.conf({version}为PHP版本号),修改后需重启PHP-FPM服务(sudo systemctl restart php{version}-fpm)。
启用并优化OPcache
OPcache能缓存PHP脚本的编译结果,减少每次请求的编译时间,显著提升网络响应速度。安装OPcache(sudo apt install php-opcache),然后在php.ini(/etc/php/{version}/fpm/php.ini)中启用并配置:opcache.enable=1(开启OPcache)、opcache.memory_consumption=128-256(缓存内存大小,根据代码量调整)、opcache.interned_strings_buffer=8-16(字符串缓存大小)、opcache.max_accelerated_files=20000-40000(可缓存的文件数量,根据项目文件数调整)、opcache.revalidate_freq=60(文件更新检查间隔,单位秒)、opcache.fast_shutdown=1(快速关闭,减少内存释放时间)。对于PHP 8+,可开启JIT编译(opcache.jit=1、opcache.jit_buffer_size=64M)进一步提升性能。
调整Web服务器配置
选择高性能Web服务器(如Nginx或Apache)并优化其配置,减少网络连接开销。
/etc/nginx/nginx.conf中调整worker_processes(设置为CPU核心数,如auto)、worker_connections(每个进程的最大连接数,建议1024-2000);在server块中启用keepalive_timeout(保持连接时间,建议30-60秒)、gzip on(启用Gzip压缩,减少传输数据量);处理PHP请求时使用Unix Socket(fastcgi_pass unix:/run/php/php{version}-fpm.sock;),比TCP Socket更高效。/etc/apache2/mods-enabled/mpm_prefork.conf(或mpm_event.conf)中调整StartServers、MinSpareServers、MaxSpareServers(根据并发量调整);启用mod_deflate(Gzip压缩)、mod_expires(静态资源缓存);处理PHP请求时使用ProxyPassMatch(ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php{version}-fpm.sock|fcgi://localhost)。优化数据库连接与缓存
数据库查询是PHP应用的常见瓶颈,优化数据库连接和缓存能减少网络等待时间。
p:host或MySQLi的mysqli_connect with p:前缀),避免每次请求都建立新连接;优化查询语句(添加索引、减少SELECT *),降低数据库负载。sudo apt install php-redis),在PHP代码中通过$redis = new Redis(); $redis->connect('127.0.0.1', 6379);连接,使用set(缓存数据)、get(获取缓存)方法。操作系统层面优化
调整Ubuntu内核参数,提升网络传输效率和并发处理能力。
/etc/sysctl.conf,添加或修改以下参数:net.ipv4.tcp_tw_reuse=1(重用TIME-WAIT状态的连接)、net.ipv4.tcp_max_syn_backlog=4096(SYN队列长度)、net.core.somaxconn=4096(监听队列长度)、net.ipv4.tcp_fin_timeout=30(FIN_WAIT2超时时间,单位秒)。运行sudo sysctl -p使配置生效。/etc/security/limits.conf,添加* soft nofile 65535、* hard nofile 65535(用户可打开的最大文件描述符数),避免高并发时文件描述符耗尽。使用CDN与静态资源分离
将静态资源(图片、CSS、JS)交给CDN(内容分发网络)缓存,减少服务器负载和网络延迟。配置Web服务器将静态资源目录(如/var/www/html/static)指向CDN的源站地址,或在CDN控制台添加域名并设置缓存规则(如缓存时间30天)。同时,在Web服务器配置中禁止PHP处理静态资源(如Nginx的location ~* \.(jpg|jpeg|png|gif|css|js)$ { expires 30d; access_log off; }),进一步提升性能。
监控与持续调优
使用工具监控PHP和网络性能,根据实际情况调整配置。常用工具:
sudo systemctl status php{version}-fpm查看进程状态,或访问http://server-ip/status(需配置pm.status_path = /status)获取详细指标(如活跃进程数、请求处理时间)。