温馨提示×

ubuntu thinkphp为啥访问慢

小樊
41
2026-10-25 04:19:28
栏目: 编程语言

在 Ubuntu 上运行 ThinkPHP 访问慢,通常不是单一原因,而是环境配置 + 框架特性 + 代码问题叠加。下面按最常见原因 → 排查方法 → 解决建议给你梳理。


一、最常见原因(80% 都在这里)

1️⃣ 未开启 Opcache(PHP 性能杀手)

ThinkPHP 是 PHP 框架,没有 Opcache 会每次请求都重新编译 PHP。

✅ 检查:

php -m | grep opcache

❌ 如果没有:

sudo apt install php-opcache

编辑:

sudo vim /etc/php/*/cli/php.ini
sudo vim /etc/php/*/fpm/php.ini

确保:

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.revalidate_freq=60

重启:

sudo systemctl restart php-fpm

2️⃣ 使用的是 php artisan serve 或 php -S

很多人本地用:

php think run

这是 PHP 内置服务器,单进程、极慢。

✅ 正确方式:

  • Nginx + PHP-FPM
  • Apache + mod_php / FPM

3️⃣ 调试模式没关(APP_DEBUG=true)

ThinkPHP 调试模式会:

  • 记录大量日志
  • 抛出异常堆栈
  • 关闭缓存

✅ 检查:

APP_DEBUG = false

4️⃣ 日志写入太频繁

ThinkPHP 默认会写:

  • runtime/log
  • sql 日志

✅ 关闭 SQL 日志:

// database.php
'debug' => false,

或:

// 关闭日志
'log' => [
    'level' => []
]

二、Ubuntu / Web 服务层问题

5️⃣ Nginx + PHP-FPM 配置不对

常见问题:

  • fastcgi_pass 错误
  • FPM 进程太少

✅ PHP-FPM 配置:

sudo vim /etc/php/*/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

重启:

sudo systemctl restart php-fpm

6️⃣ DNS 解析慢(非常隐蔽)

Ubuntu 有时 PHP 会尝试 DNS 解析:

  • gethostbyname
  • 邮件函数
  • 某些中间件

✅ 测试:

php -r "echo gethostbyname('localhost');"

慢的话,改:

sudo vim /etc/hosts

确保有:

127.0.0.1 localhost

三、ThinkPHP 本身问题

7️⃣ 自动路由 / 扫描目录慢

ThinkPHP 会扫描:

  • controller
  • route
  • 注解路由

✅ 开启路由缓存(TP6):

php think optimize:route

8️⃣ 每次请求都连数据库

  • 没用连接池(CLI 模式)
  • 查询没缓存

✅ 使用缓存:

Cache::remember('key', 60, function () {
    return Db::name('user')->select();
});

9️⃣ Composer 自动加载没优化

composer install --optimize-autoloader --no-dev

或:

composer dump-autoload -o

四、快速自查清单(按顺序来)

✅ opcache 开了吗?
✅ APP_DEBUG=false?
✅ 用 nginx+php-fpm?
✅ 日志不多?
✅ route 缓存了?
✅ composer 优化过?

五、如果你愿意,我可以直接帮你定位

你可以贴出:

  1. ThinkPHP 版本(5.1 / 6.0 / 8.0)
  2. Ubuntu 版本
  3. Web 服务(Nginx / Apache)
  4. 访问一个空页面也慢吗?

我可以直接告诉你 是哪一层慢。

0 踩