在 Debian 上部署 LNMP(Linux + Nginx + MySQL/MariaDB + PHP) 后,调优通常从 系统层 → Nginx → PHP → MySQL/MariaDB → 应用层 逐层进行。下面给你一套实战型调优清单,适合中小到中型站点,高并发场景可再细化。
ulimit -n
建议至少 65535
永久生效:
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
vim /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog = 65535
vm.swappiness = 10
生效:
sysctl -p
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 65535;
events {
worker_connections 10240;
use epoll;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
client_max_body_size 50m;
gzip on;
gzip_comp_level 5;
gzip_min_length 1k;
gzip_types text/css application/javascript application/json;
}
location ~* \.(js|css|png|jpg|gif|ico|svg|woff2)$ {
expires 30d;
access_log off;
}
编辑:
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
高并发可选 static
pm = static
pm.max_children = 100
⚠️ 每个 PHP 进程约 30~80MB,别设太大
memory_limit = 256M
max_execution_time = 60
upload_max_filesize = 50M
post_max_size = 50M
session.gc_probability = 1
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
[mysqld]
innodb_buffer_pool_size = 1G # 物理内存的 50%~70%
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
max_connections = 300
table_open_cache = 2000
query_cache_type = 0
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
SHOW STATUS;
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW PROCESSLIST;
Nginx → PHP-FPM
fastcgi_pass unix:/run/php/php-fpm.sock;
PHP-FPM:
listen = /run/php/php-fpm.sock
location / {
try_files $uri $uri/ /index.php?$args;
}
listen 443 ssl http2;
| 场景 | 方案 |
|---|---|
| 页面缓存 | Nginx FastCGI Cache |
| 数据缓存 | Redis |
| 对象缓存 | Memcached |
| CDN | Cloudflare / 自建 |
top / htop
vmstat 1
iostat -x 1
ss -antp
netstat -an | grep TIME_WAIT
如果你愿意,可以告诉我:
我可以直接给你一套 “可复制粘贴”的 LNMP 配置文件。