在 Linux 上运行 LAMP(Linux + Apache + MySQL/MariaDB + PHP)时,性能优化通常从系统层、Web 层、数据库层、PHP 层、缓存层几个维度入手。下面给你一套比较实用、可落地的优化思路。
# 打开文件数
ulimit -n 65535
# sysctl 示例
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_syn_backlog = 8192
fs.file-max = 100000
执行:
sysctl -p
使用 SSD / NVMe 数据库和日志尽量放 SSD。
关闭不必要的服务
systemctl disable --now bluetooth
a2dismod mpm_prefork
a2enmod mpm_event
<IfModule mpm_event_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 10000
</IfModule>
a2dismod status autoindex cgi
mod_deflate
mod_gzip
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
[mysqld]
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
query_cache_type = 0
max_connections = 300
table_open_cache = 2000
⚠️ MySQL 8 已移除 query cache
SHOW VARIABLES LIKE 'slow_query%';
SELECT *php -v
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
systemctl enable php8.2-fpm
PHP-FPM 池配置:
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
systemctl enable redis
PHP 使用:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
<FilesMatch "\.(js|css|png)$">
Header set Cache-Control "max-age=31536000"
</FilesMatch>
htopiotopmysqltunerab -n 10000 -c 200 http://site.com/
| 优化项 | 提升效果 |
|---|---|
| PHP 7 → 8 | 30%~100% |
| prefork → event | 2~5 倍 |
| OPcache | 2~3 倍 |
| Redis 缓存 | 3~10 倍 |
| CDN | 带宽 ↓ 80% |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置文件。