温馨提示×

为什么linux lnmp慢

小樊
49
2026-09-30 20:02:54
栏目: 智能运维

“Linux + LNMP 慢”是一个很常见但原因很分散的问题。LNMP 指 Linux + Nginx + MySQL/MariaDB + PHP,任何一层都可能成为瓶颈。下面按常见原因 → 排查方法 → 解决建议系统说明。


一、Nginx 相关原因

1. Nginx 配置不合理

常见问题:

  • worker_processes 太低
  • worker_connections 太小
  • 未开启 sendfile / tcp_nopush

✅ 检查:

ps aux | grep nginx
ulimit -n

✅ 建议:

worker_processes auto;
worker_connections 10240;
sendfile on;
tcp_nopush on;

2. 静态资源没命中或走 PHP

例如:

  • .js、.css、图片也进了 PHP
  • 没有 location 精确匹配

✅ 建议:

location ~* \.(js|css|png|jpg|gif)$ {
    expires 30d;
}

二、PHP 相关原因(最常见)

3. PHP-FPM 进程不足

表现:

  • 高并发时请求排队
  • 502 或响应时间陡增

✅ 检查:

ps aux | grep php-fpm

✅ 关键参数(www.conf):

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

⚠️ pm.max_children 太小是最常见慢因


4. PHP 代码本身慢

  • 循环查数据库
  • 没有缓存
  • 使用 file_get_contents() 访问外网

✅ 排查:

php -m

使用:

  • Xdebug
  • Tideways
  • Blackfire

5. OPCache 未开启

PHP 每次都重新编译脚本。

✅ 检查:

php -i | grep opcache

✅ 开启:

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

三、MySQL / MariaDB 原因

6. 数据库慢查询

表现:

  • PHP 等待 MySQL
  • CPU 高但请求少

✅ 检查:

SHOW PROCESSLIST;

✅ 开启慢日志:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

✅ 用 EXPLAIN 分析 SQL


7. 缺少索引

典型:

WHERE user_id = ?
ORDER BY created_at

没建联合索引。


8. MySQL 配置太低

例如:

  • innodb_buffer_pool_size 太小

✅ 建议(2G内存示例):

innodb_buffer_pool_size = 1G

四、系统 & 资源原因

9. 服务器配置太低

  • 1 核 1G 跑 LNMP + MySQL
  • swap 频繁使用

✅ 查看:

top
free -h

10. 磁盘 IO 慢

  • 云服务器低配盘
  • 大量日志写入

✅ 检查:

iostat -x 1

11. DNS 解析慢

PHP 中:

gethostbyname()
mail()

✅ 解决:

  • 使用内网 IP
  • 禁用不必要 DNS

五、网络 & 外部因素

12. 外部 API 阻塞

  • 微信 / 支付 / 短信接口
  • 未设置超时

✅ 建议:

curl_setopt($ch, CURLOPT_TIMEOUT, 3);

13. HTTPS 配置差

  • 未开启 HTTP/2
  • 证书链不全

✅ 建议:

listen 443 ssl http2;

六、快速自查清单(建议你照着做)

# 1. 系统负载
top

# 2. 内存
free -h

# 3. PHP-FPM
ps aux | grep php-fpm

# 4. MySQL
mysql> SHOW PROCESSLIST;

# 5. Nginx 日志
tail -f /var/log/nginx/access.log

七、如果你愿意,我可以更精准帮你

你可以补充:

  1. 服务器配置(CPU / 内存)
  2. 访问量是多大
  3. 是首页慢还是接口慢
  4. 有没有 502 / 504
  5. 用的什么程序(WordPress / Laravel / 自研)

我可以直接帮你定位是哪一层慢。

0 踩