在 Ubuntu + ThinkPHP 环境下做性能优化,通常可以从 系统层、PHP 层、ThinkPHP 层、数据库层、缓存与部署 几个方面入手。下面给你一套比较实用、可落地的优化方案(以 Ubuntu + Nginx + PHP-FPM + ThinkPHP 6/8 为主)。
ThinkPHP 在 Nginx 下性能更好、资源占用更低。
server {
listen 80;
server_name example.com;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
ulimit -n 65535
/etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
sysctl -p
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2-fpm php8.2-mysql php8.2-redis
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
realpath_cache_size=4096K
realpath_cache_ttl=600
/etc/php/8.2/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 120
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 60
pm.max_requests = 1000
systemctl restart php8.2-fpm
.env
APP_DEBUG = false
php think optimize:route
php think optimize:config
composer dump-autoload -o
app/middleware.php
EXPLAIN SELECT * FROM user WHERE email = 'a@b.com';
SELECT */etc/mysql/my.cnf
innodb_buffer_pool_size = 1G
query_cache_type = 0
max_connections = 500
// 错误
User::select();
// 正确
User::where('status', 1)->field('id,name')->limit(20)->select();
.env
CACHE_TYPE = redis
REDIS_HOST = 127.0.0.1
Cache::set('user_1', $data, 3600);
composer install --no-dev --optimize-autoloader
htop
iftop
mysqltuner
ab -n 1000 -c 100 http://example.com/
✅ Ubuntu + Nginx
✅ PHP 8 + Opcache
✅ ThinkPHP 关闭 DEBUG
✅ 路由 & 配置缓存
✅ Redis 缓存
✅ MySQL 索引 & 配置
✅ Composer 优化
如果你愿意,可以告诉我:
我可以给你一套 针对性更强的优化配置。