Linux 下 LNMP(Linux + Nginx + MySQL + PHP)访问缓慢 是一个常见问题,通常不是单一原因,而是网络、系统、服务配置、代码、数据库等多个层面叠加。下面我按排查顺序帮你系统分析,并给出常见原因 + 对应解决方案。
curl -I https://example.com/static/test.jpg
常见问题:
worker_processes auto;
events {
worker_connections 10240;
}
http {
gzip on;
gzip_types text/css application/javascript application/json;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
✅ 建议使用 unix socket 而不是 127.0.0.1:9000
top
htop
如果看到大量 php-fpm 进程或 CPU 高:
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
⚠️ pm.max_children 太小会导致请求排队
✅ 使用 XHProf / Tideways / Blackfire 分析
php -i | grep opcache
✅ 强烈建议开启:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
SHOW VARIABLES LIKE 'slow_query_log';
开启慢查询:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
EXPLAIN SELECT * FROM orders WHERE user_id = 10;
✅ 给常用查询字段加索引
127.0.0.1 而不是 localhost[mysqld]
skip-name-resolve
free -h
df -h
top
✅ 使用:
ping
traceroute
| 问题 | 表现 |
|---|---|
| PHP 请求外网 API | 页面卡 3~10 秒 |
| session 文件锁 | 并发请求阻塞 |
| 日志未切割 | 磁盘 IO 爆满 |
| cron 任务过多 | 高峰期 CPU 高 |
| 未使用 Redis | 每次都查 MySQL |
✅ Nginx
✅ PHP
✅ MySQL
✅ 系统
你可以直接告诉我:
1️⃣ 服务器配置(CPU / 内存 / 系统)
2️⃣ LNMP 版本
3️⃣ 是 首页慢、接口慢、后台慢,还是全部慢
4️⃣ 是否使用 WordPress / Laravel / ThinkPHP
我可以给你针对性的优化方案,甚至直接给你一份可用配置。