温馨提示×

ubuntu thinkphp为啥慢

小樊
46
2026-10-13 10:22:53
栏目: 编程语言

在 Ubuntu 上运行 ThinkPHP 感觉“慢”,通常不是单一原因,而是环境配置 + 框架特性 + 代码实现共同作用的结果。下面按常见原因从高到低给你梳理,并给出排查/优化方法。


一、最常见原因(80% 的问题在这里)

1️⃣ 没有开启 OPcache(非常关键)

这是 Ubuntu + PHP 最容易导致慢的原因

没开 OPcache,每个请求都会重新编译 PHP 文件。

检查:

php -m | grep opcache

如果没有:

sudo apt install php-opcache
sudo systemctl restart php-fpm   # 或 apache2

php.ini 建议:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0  ; 生产环境

2️⃣ 开发模式(APP_DEBUG = true)

ThinkPHP 在 debug 模式下:

  • 记录大量日志
  • 关闭缓存
  • 模板不缓存

检查:

APP_DEBUG = false

3️⃣ 使用了内置 PHP 服务器(php -S)

php think run

这种只适合本地测试,生产环境非常慢。

✅ 正确做法:

  • Nginx + PHP-FPM
  • 或 Apache + mod_php

二、Ubuntu 环境相关问题

4️⃣ 磁盘 IO 慢(尤其是云服务器)

常见于:

  • 低配云服务器
  • 机械硬盘
  • 日志目录很大

检查:

iostat -x 1

优化:

  • runtime 目录放内存盘(tmpfs)
  • 定期清理日志

5️⃣ 权限问题导致反复写日志

如果 runtime 权限不对,TP 会反复尝试写文件失败。

正确权限:

sudo chown -R www-data:www-data runtime
sudo chmod -R 755 runtime

三、ThinkPHP 自身常见慢点

6️⃣ 每次请求都连数据库(没用连接池)

  • 云数据库延迟高
  • 没开持久连接

优化:

// database.php
'params' => [
    \PDO::ATTR_PERSISTENT => true
]

7️⃣ 路由没缓存

php think optimize:route

8️⃣ 配置没缓存

php think optimize:config

9️⃣ 模型滥用(N+1 查询)

典型慢代码:

foreach ($users as $user) {
    $user->profile;
}

应改为:

User::with('profile')->select();

四、系统层面检查清单(建议你一步步来)

# 1. PHP 版本
php -v   # 推荐 8.1 / 8.2

# 2. OPcache
php -m | grep opcache

# 3. 当前模式
grep APP_DEBUG .env

# 4. 请求耗时
time curl http://localhost

五、如果你愿意,我可以更精准帮你

你可以直接贴:

  1. Ubuntu 版本
  2. PHP 版本
  3. ThinkPHP 版本(5.1 / 6.0 / 8.0)
  4. 是 Nginx 还是 Apache
  5. 具体“慢”的表现(首页?接口?后台?)

我可以给你一套针对你服务器的优化方案。

0 踩