温馨提示×

php-fpm在ubuntu上如何优化PHP代码

小樊
33
2025-12-28 06:23:05
栏目: 编程语言

在 Ubuntu 上优化 PHP-FPM 以提升 PHP 代码的执行效率,可以从多个方面入手,包括调整 PHP-FPM 配置、优化 PHP 代码本身、使用 OpCode 缓存以及监控和调优系统资源等。以下是详细的步骤和建议:

1. 选择合适的 PHP 版本

确保你使用的是最新稳定版的 PHP,因为新版本通常包含性能改进和安全修复。例如,截至 2023 年 10 月,PHP 8.1 或 PHP 8.2 是较新的稳定版本。

sudo apt update
sudo apt install php8.2-fpm

2. 安装并配置 OpCode 缓存

OpCode 缓存可以显著提升 PHP 脚本的执行速度,因为它缓存了编译后的字节码,减少了每次请求时的编译开销。常用的 OpCode 缓存有 OPcache 和 APCu。

安装 OPcache

OPcache 已经集成在 PHP 7.2 及以上版本中,可以通过以下命令启用:

sudo apt install php8.2-opcache

然后,编辑 PHP 配置文件以启用和优化 OPcache。通常,PHP-FPM 的配置文件位于 /etc/php/8.2/fpm/php.ini

sudo nano /etc/php/8.2/fpm/php.ini

php.ini 中添加或修改以下配置:

[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1

参数说明:

  • opcache.memory_consumption: 分配给 OPcache 的内存大小,根据服务器内存调整。
  • opcache.interned_strings_buffer: 用于存储 interned 字符串的内存大小。
  • opcache.max_accelerated_files: 缓存的最大文件数。
  • opcache.revalidate_freq: 检查脚本更新频率(秒)。
  • opcache.fast_shutdown: 启用快速关闭以减少关闭时的延迟。

重启 PHP-FPM

sudo systemctl restart php8.2-fpm

3. 调整 PHP-FPM 配置

优化 PHP-FPM 的配置可以提升处理请求的能力和响应速度。

编辑 PHP-FPM 配置文件:

sudo nano /etc/php/8.2/fpm/pool.d/www.conf

主要调整以下参数:

  • pm: 进程管理方式,推荐使用 dynamicondemand

    pm = dynamic
    
  • pm.max_children: 最大子进程数,根据服务器的内存和应用的资源需求设置。

    pm.max_children = 50
    
  • pm.start_servers: 启动时的服务器进程数。

    pm.start_servers = 5
    
  • pm.min_spare_servers: 最小空闲服务器进程数。

    pm.min_spare_servers = 2
    
  • pm.max_spare_servers: 最大空闲服务器进程数。

    pm.max_spare_servers = 35
    
  • pm.max_requests: 每个子进程在重启前处理的请求数,防止内存泄漏。

    pm.max_requests = 500
    

示例配置:

[www]
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
user = www-data
group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 35
pm.max_requests = 500

调整完毕后,重启 PHP-FPM:

sudo systemctl restart php8.2-fpm

4. 优化 PHP 代码

除了配置层面的优化,优化 PHP 代码本身也是提升性能的关键。

a. 使用高效的数据结构和算法

选择合适的数据结构和算法可以显著提升代码执行效率。例如,使用数组而不是对象进行简单的数据存储和访问,避免不必要的循环和递归。

b. 减少数据库查询

优化数据库查询,使用索引,避免 N+1 查询问题。可以使用工具如 Xdebug 进行性能分析,找出瓶颈。

c. 启用错误日志和性能监控

启用错误日志有助于及时发现和修复问题。同时,使用性能监控工具(如 New Relic、Blackfire)监控应用性能,找出优化点。

d. 使用 PHP 内置函数和特性

PHP 内置函数通常比自定义函数更高效。利用 PHP 的新特性(如箭头函数、命名参数)提升代码简洁性和性能。

e. 避免不必要的计算和资源消耗

缓存重复计算的结果,减少文件和网络 I/O 操作,使用懒加载等技术优化资源使用。

5. 使用持久连接

对于数据库连接,使用持久连接可以减少连接建立的开销。在 PHP 中,可以通过配置 PDO 或 MySQLi 使用持久连接。

$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$options = [
    PDO::ATTR_PERSISTENT => true,
];
$pdo = new PDO($dsn, $user, $password, $options);

6. 启用压缩和减少响应大小

启用 Gzip 压缩可以减少传输数据的大小,加快页面加载速度。

在 Nginx 或 Apache 中配置压缩:

Nginx 示例:

server {
    # 其他配置...

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # 其他配置...
}

Apache 示例:

确保启用了 mod_deflate,并在配置文件中添加:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
    AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
    AddOutputFilterByType DEFLATE image/svg+xml image/x-icon font/opentype application/vnd.ms-fontobject application/x-font-ttf font/opentype
</IfModule>

7. 利用 OPCache 的高级配置

根据应用需求,进一步调整 OPcache 的配置参数。例如:

  • opcache.validate_timestamps: 控制脚本是否检查文件的修改时间,默认为开启。对于生产环境,可以关闭以提升性能。

    opcache.validate_timestamps=0
    
  • opcache.huge_code_pages: 在支持大页内存的系统上启用,可以减少 TLB(Translation Lookaside Buffer)未命中,提高性能。

    opcache.huge_code_pages=1
    

注意: 修改 huge_code_pages 需要重启 PHP-FPM 并确保系统支持大页内存。

8. 监控和调优系统资源

使用系统监控工具(如 tophtopfree -m)监控服务器的 CPU、内存、磁盘 I/O 等资源使用情况。根据监控结果,进一步调整 PHP-FPM 的配置和优化代码。

例如,如果发现内存不足,可以增加 pm.max_children 或优化代码减少内存消耗;如果 CPU 使用率较高,可以考虑使用 PHP 的异步特性或将部分计算任务转移到后台处理。

9. 使用 PHP 扩展提升性能

根据应用需求,安装并配置相关的 PHP 扩展以提升性能。例如:

  • Redis 或 Memcached: 用于缓存频繁访问的数据。
  • Xdebug: 用于性能分析和调试(仅在开发环境中使用,生产环境建议关闭)。
  • OPcache GUI: 提供 OPcache 的可视化管理和监控(需要额外安装)。

10. 定期更新和维护

保持 PHP、PHP-FPM 及相关扩展的更新,及时应用安全补丁和性能改进。定期清理不必要的缓存和日志文件,保持系统的整洁和高效。


通过以上步骤,你可以显著提升在 Ubuntu 上运行的 PHP-FPM 的性能,从而优化 PHP 代码的执行效率。根据具体的应用场景和需求,可能需要针对性地进行调整和优化。

0