温馨提示×

ubuntu ThinkPHP如何优化性能

小樊
34
2026-10-19 05:35:35
栏目: 编程语言

在 Ubuntu + ThinkPHP 环境下优化性能,可以从 系统层、PHP 层、ThinkPHP 层、数据库层、缓存与部署 几个方面入手。下面按优先级和实战经验给你一份可落地的优化清单。


一、Ubuntu 系统层面优化

1. 使用高性能 Web 服务器

  • 推荐组合
    • Nginx + PHP-FPM(最常用、性能最好)
    • 不要用 Apache mod_php
sudo apt install nginx php-fpm

2. 调整 PHP-FPM 进程

编辑:

/etc/php/8.x/fpm/pool.d/www.conf

关键参数:

pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30

根据服务器内存调整(每个 PHP 进程约 30–80MB)


二、PHP 层面优化

1. 开启 OPcache(非常重要)

sudo apt install php-opcache

php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60

重启 PHP-FPM:

sudo systemctl restart php8.x-fpm

✅ 性能可提升 30%~50%


2. 关闭不必要的 PHP 扩展

只保留:

  • pdo
  • mbstring
  • curl
  • json
  • opcache
  • redis / memcached(如用)

三、ThinkPHP 层面优化

1. 开启生产模式

.env

APP_DEBUG = false

2. 开启路由缓存

php think optimize:route

3. 开启配置缓存

php think optimize:config

4. 类库映射(ThinkPHP 5)

php think optimize:autoload

5. 使用单例 / 依赖注入

避免重复实例化:

Db::name('user')->where(...);

少用:

new \app\model\User();

6. 使用懒加载 & 字段控制

Db::name('user')->field('id,name')->select();

四、数据库优化(最常见瓶颈)

1. 使用 Redis 缓存

CACHE_TYPE = redis
Cache::set('user_1', $data, 3600);

2. 慢查询日志

MySQL:

slow_query_log = 1
long_query_time = 1

分析:

mysqldumpslow -s t /var/log/mysql/slow.log

3. 索引优化

  • WHERE / ORDER BY / JOIN 字段必须建索引
  • 避免 SELECT *

五、静态资源 & 前端优化

  • 使用 Nginx 直接处理静态文件
  • 开启 Gzip
gzip on;
gzip_types text/css application/javascript;
  • JS/CSS 合并压缩

六、部署级优化(进阶)

1. 使用 PHP 8.x

ThinkPHP 6 + PHP 8 性能明显优于 PHP 7


2. 使用 Swoole(高并发)

ThinkPHP 6 支持 Swoole:

composer require topthink/think-swoole

适合:

  • API 服务
  • 高并发场景

3. 使用 Supervisor 管理进程

sudo apt install supervisor

七、快速检查清单 ✅

  • [ ] APP_DEBUG = false
  • [ ] OPcache 开启
  • [ ] 路由 / 配置缓存
  • [ ] Redis 缓存
  • [ ] 慢 SQL 已优化
  • [ ] Nginx + PHP-FPM
  • [ ] 静态资源分离

如果你愿意,可以告诉我:

  • ThinkPHP 版本(5.1 / 6.0 / 8.0)
  • Ubuntu 版本
  • 是 API / 网站 / 后台
  • 当前 QPS 或访问量

我可以给你一套 针对性的优化配置。

0 踩