温馨提示×

Ubuntu如何优化PHP运行环境

小樊
41
2025-11-08 22:47:58
栏目: 编程语言

1. 升级到最新稳定版PHP
使用最新PHP版本可获得性能改进与安全修复。通过添加Ondřej Surý的PPA源安装最新版:

sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.1  # 根据需求选择版本(如8.0/8.2)

2. 安装并配置PHP-FPM
PHP-FPM(FastCGI Process Manager)比传统mod_php更高效,适合高并发场景。

  • 安装PHP-FPM:
    sudo apt install php8.1-fpm
    
  • 优化进程管理:编辑/etc/php/8.1/fpm/pool.d/www.conf,根据服务器资源调整参数:
    • pm:选择dynamic(动态调整进程数,适合负载波动大的环境);
    • pm.max_children:最大子进程数(建议设为服务器内存的1/5,如8GB内存设为16);
    • pm.start_servers:启动时的子进程数(设为pm.max_children的1/4,如4);
    • pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量(设为pm.max_children的1/8,如2);
    • pm.max_requests:每个子进程处理的最大请求数(避免内存泄漏,如500)。
  • 监听方式:优先使用Unix Socket(性能优于TCP):
    listen = /run/php/php8.1-fpm.sock
    listen.owner = www-data
    listen.group = www-data
    

3. 启用并优化OPcache
OPcache缓存PHP脚本编译后的字节码,减少重复编译,显著提升性能。

  • 安装OPcache:
    sudo apt install php8.1-opcache
    
  • 配置php.ini/etc/php/8.1/fpm/php.ini):
    [opcache]
    zend_extension = opcache.so
    opcache.enable = 1
    opcache.enable_cli = 1
    opcache.memory_consumption = 128  # OPcache使用的内存(MB,根据服务器内存调整)
    opcache.interned_strings_buffer = 8  # 内部字符串缓冲区大小(MB)
    opcache.max_accelerated_files = 4000  # 加速的文件数量(根据项目文件数调整)
    opcache.revalidate_freq = 60  # 脚本重新验证的时间间隔(秒)
    opcache.fast_shutdown = 1  # 快速关闭,减少内存释放时间
    

4. 调整PHP基础配置
根据应用需求优化php.ini/etc/php/8.1/fpm/php.ini),避免资源浪费:

  • memory_limit:每个PHP脚本的最大内存(如256M,根据应用复杂度调整);
  • max_execution_time:脚本最大执行时间(如30秒,避免长时间运行阻塞进程);
  • post_max_size/upload_max_filesize:POST数据与上传文件的最大大小(如50M,适应文件上传需求);
  • error_log:错误日志路径(如/var/log/php8.1-fpm/error.log,便于排查问题)。

5. 集成缓存系统(Redis/Memcached)
使用Redis或Memcached缓存数据库查询结果、会话数据等,减少数据库访问次数。

  • 安装Redis及扩展:
    sudo apt install redis-server php8.1-redis
    
  • 配置PHP使用Redis:在代码中初始化Redis客户端并缓存数据:
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    $data = $redis->get('cached_key');
    if (!$data) {
        $data = fetchDataFromDatabase(); // 从数据库获取数据
        $redis->set('cached_key', $data, 3600); // 缓存1小时
    }
    

6. 优化Web服务器配置

  • Nginx:编辑站点配置文件(/etc/nginx/sites-available/default),添加PHP处理规则:
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
  • Apache:启用proxy_fcgisetenvif模块,编辑虚拟主机配置:
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
    </FilesMatch>
    

7. 监控与持续调优
使用工具监控PHP-FPM与系统性能,识别瓶颈:

  • 实时监控htop(查看CPU/内存使用)、tail -f /var/log/php8.1-fpm.log(查看错误日志);
  • PHP-FPM状态:在www.conf中启用pm.status_path = /status,通过Nginx访问/status查看进程状态;
  • 性能分析:使用Blackfire或Xdebug分析代码性能,找出慢查询或高内存消耗的函数。

0