商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何提升Ubuntu上PHP执行速度

如何提升Ubuntu上PHP执行速度

  发布于2026-07-31 阅读(0)

扫一扫,手机访问

先说几个关键点:PHP 的执行速度优化,其实就是在跟“编译时间”“内存开销”“数据库压力”这几个老对手过招。下面这套方案,从底层缓存到上层代码,再到监控压测,基本上覆盖了 Ubuntu 上 PHP 提速的常见路子。直接上干货。

1. 安装并启用 OPcache 扩展

OPcache 是 PHP 自带的字节码缓存工具,能把脚本编译结果存进内存,后续请求直接拿缓存,省掉重复编译的时间。安装命令(以 Ubuntu 22.04+ 为例):

如何提升Ubuntu上PHP执行速度

sudo apt update && sudo apt install php-opcache

编辑 php.ini(路径可通过 php --ini 查看,如 /etc/php/8.2/fpm/php.ini),添加或修改以下配置:

[opcache]zend_extension=opcache.soopcache.enable=1opcache.memory_consumption=128# 缓存内存大小(MB),根据服务器内存调整opcache.max_accelerated_files=10000# 缓存文件数量上限opcache.revalidate_freq=2# 脚本修改后重新验证频率(秒)opcache.fast_shutdown=1# 快速关闭机制,提升内存回收效率

重启 PHP 服务(如使用 PHP-FPM):

sudo systemctl restart php8.2-fpm

2. 使用最新稳定版 PHP

新版本 PHP 通常内置了性能优化(比如 JIT 编译器、引擎改进)和安全修复。通过 Ondrej Sur 的 PPA 添加最新版 PHP 仓库:

sudo add-apt-repository ppa:ondrej/phpsudo apt update

安装指定版本(如 PHP 8.2):

sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl

切换 Web 服务器(如 Nginx/Apache)的 PHP 模块至新版本,并重启服务。

3. 优化 PHP-FPM 进程配置

PHP-FPM 比传统的 mod_php 更高效,但参数得根据服务器资源调。以 /etc/php/8.2/fpm/pool.d/www.conf 为例:

  • 进程管理模式:优先选 dynamic(动态调整,适合负载波动场景);
  • 核心参数:
    pm = dynamicpm.max_children = 50# 最大子进程数(根据内存计算:总内存/单个进程内存,如16GB内存/256MB≈60)pm.start_servers = 10# 启动时的进程数(建议为max_children的1/5-1/4)pm.min_spare_servers = 5# 最小空闲进程数(避免频繁创建进程)pm.max_spare_servers = 20# 最大空闲进程数(避免内存浪费)pm.max_requests = 1000# 每个子进程处理的最大请求数(防止内存泄漏)

调整后重启 PHP-FPM:

sudo systemctl restart php8.2-fpm

4. 配置缓存技术(Redis/Memcached)

用 Redis 或 Memcached 缓存频繁访问的数据库查询结果、会话数据或页面片段,能大幅减少数据库负载。以 Redis 为例:

sudo apt install php-redis redis-server

编辑 php.ini 启用扩展:

extension=redis.so

重启 PHP 服务后,在代码中使用 Redis 缓存(示例):

$redis = new Redis();$redis->connect('127.0.0.1', 6379);$key = 'cached_data_key';if ($data = $redis->get($key)) {echo $data;// 使用缓存数据} else {$data = fetchDataFromDB();// 从数据库获取数据$redis->setex($key, 3600, $data);// 缓存1小时echo $data;}

5. 优化数据库交互

  • 使用持久连接:减少数据库连接建立/销毁的开销(php.ini 中设置):
    mysqli.allow_persistent = Onmysqli.max_persistent = 100
  • 优化查询语句:为常用查询字段添加索引,避免 SELECT *,使用预处理语句防止 SQL 注入;
  • 调整连接配置:如 MySQL 的 wait_timeout(默认8小时),避免闲置连接占用资源。

6. 代码级性能优化

  • 减少全局变量:全局变量会增加内存占用和查找时间,尽量使用局部变量;
  • 优化循环结构:避免在循环内执行耗时操作(如数据库查询、文件 IO);
  • 使用高效函数:如用 str_replace 替代正则表达式(当不需要复杂匹配时);
  • 内存管理:及时释放不再使用的变量(unset()),尤其是大数组。

7. 监控与调优

  • 日志分析:开启 PHP-FPM 慢日志,定位执行慢的脚本(www.conf 中设置):
    slowlog = /var/log/php-fpm/slow.logrequest_slowlog_timeout = 5s# 超过5秒的请求记录到慢日志
    使用 grep 分析慢日志:
    grep -i "slow" /var/log/php-fpm/slow.log
  • 实时监控:使用 htop(查看 CPU/内存使用)、vmstat(查看系统 IO)、php-fpm-status(查看 PHP-FPM 进程状态)等工具监控服务器状态;
  • 压力测试:使用 ab(Apache Benchmark)或 wrk 模拟高并发请求,评估优化效果:
    ab -n 1000 -c 100 http://yourdomain.com/

8. 其他优化建议

  • 静态文件分离:使用 Nginx/Apache 处理静态文件(图片、CSS、JS),减轻 PHP-FPM 负担;
  • 启用 Gzip 压缩:减少传输数据量(php.ini 中设置):
    zlib.output_compression = Onzlib.output_compression_level = 6# 压缩级别(1-9)
  • 负载均衡:若单台服务器无法满足需求,可使用 Nginx 或 HAProxy 将流量分发到多台服务器
本文转载于:https://www.yisu.com/ask/49775257.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注