温馨提示×

Ubuntu如何提升PHP运行速度

小樊
47
2025-10-24 23:42:19
栏目: 编程语言

1. 安装并配置OPcache扩展
OPcache是PHP内置的字节码缓存扩展,可显著减少脚本编译次数,提升执行效率。安装命令:sudo apt install php-opcache(Ubuntu 22.04+默认包含)。编辑PHP配置文件(路径取决于PHP版本和Web服务器,如/etc/php/8.2/fpm/php.ini),添加或修改以下参数:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128  # 缓存内存大小(MB),根据服务器内存调整
opcache.interned_strings_buffer=8  # 内部字符串缓冲区大小
opcache.max_accelerated_files=10000  # 最大加速文件数(需覆盖项目文件数量)
opcache.revalidate_freq=60  # 文件修改检查频率(秒)
opcache.fast_shutdown=1  # 快速关闭功能

重启PHP-FPM或Apache使配置生效:sudo systemctl restart php8.2-fpm

2. 使用最新稳定版PHP
新版本PHP通常包含性能优化和bug修复,建议通过Ondrej Sur的PPA安装最新版:

sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql  # 根据需求安装扩展

安装后,禁用旧版本PHP并启用新版本:sudo a2dismod php7.4 && sudo a2enmod php8.2(Apache),或修改Nginx配置中的fastcgi_pass指向新版本PHP-FPM socket。

3. 优化PHP-FPM进程配置
PHP-FPM是PHP的FastCGI进程管理器,合理配置进程数能平衡性能与资源占用。编辑/etc/php/8.2/fpm/pool.d/www.conf,调整以下参数:

  • 进程管理模式:优先选择dynamic(动态调整,适合负载波动大的环境);
  • 核心参数
    pm = dynamic
    pm.max_children = 50  # 最大子进程数(根据服务器内存计算:总内存/单个进程内存,如2GB内存约设30-40)
    pm.start_servers = 10  # 启动时的子进程数
    pm.min_spare_servers = 5  # 最小空闲进程数
    pm.max_spare_servers = 20  # 最大空闲进程数
    pm.max_requests = 500  # 每个子进程处理的最大请求数(防止内存泄漏)
    

重启PHP-FPM使配置生效:sudo systemctl restart php8.2-fpm

4. 启用数据库缓存(Redis/Memcached)
对于数据库密集型应用,使用Redis或Memcached缓存频繁访问的数据,减少数据库查询次数。安装Redis:sudo apt install redis-server,然后在PHP代码中使用phpredis扩展(sudo apt install php-redis)或Predis库连接Redis。配置示例(php.ini):

extension=redis.so

对于Memcached:sudo apt install memcached php-memcached,同样需在代码中集成。

5. 优化Web服务器配置

  • Nginx:调整worker_processes(设为CPU核心数)、worker_connections(每个进程的最大连接数),启用gzip压缩和sendfile
    events {
      worker_connections 1024;
    }
    http {
      sendfile on;
      gzip on;
      gzip_types text/plain text/css application/json application/javascript;
    }
    
  • Apache:启用mod_deflate(压缩)和mod_expires(缓存静态资源),调整KeepAlive设置:
    <IfModule mod_deflate.c>
      AddOutputFilterByType DEFLATE text/html text/css application/javascript
    </IfModule>
    <IfModule mod_expires.c>
      ExpiresActive On
      ExpiresByType text/html "access plus 1 hour"
    </IfModule>
    KeepAlive On
    KeepAliveTimeout 5
    MaxKeepAliveRequests 100
    
    重启Web服务器:sudo systemctl restart nginxsudo systemctl restart apache2

6. 代码级优化

  • 减少全局变量使用(全局变量会增加内存占用);
  • 避免嵌套循环(尤其是大数据量时,改用批量操作);
  • 使用高效的数据结构(如数组代替对象,当不需要面向对象特性时);
  • 合理使用缓存(如将频繁访问的数据库结果存入Redis)。

7. 监控与调优
使用工具监控PHP性能,定位瓶颈:

  • 命令行工具top(查看CPU/内存占用)、htop(更直观的资源监控)、vmstat(系统整体性能);
  • 性能分析工具Blackfire(可视化性能分析)、XHProf(Facebook开源的性能分析工具);
  • 日志分析:查看PHP-FPM的slowlog(慢请求日志),定位执行时间过长的脚本。

0