温馨提示×

Debian LNMP为何内存过高

小樊
34
2026-07-15 17:58:50
栏目: 智能运维

Debian 上 LNMP(Linux + Nginx + MySQL/MariaDB + PHP)内存占用过高,通常不是单一原因,而是 多个服务配置不当 + 系统缓存机制 共同作用的结果。下面按最常见原因 → 排查方法 → 优化建议给你一个系统性的说明。


一、先确认:内存是不是真的“被用光了”

1️⃣ 看真实内存使用

free -h

重点看:

  • available(可用内存)
  • buff/cache(缓存,不是问题)

Linux 会尽量用内存做缓存,只要 available 还够,就不是异常


二、最常见原因(按出现频率)


一、MySQL / MariaDB 配置太激进(最常见)

典型问题

  • innodb_buffer_pool_size 设置过大
  • 默认配置直接吃 1~2G 内存

查看内存占用

top
# 或
ps aux --sort=-%mem | head

检查配置

cat /etc/mysql/my.cnf
# 或
cat /etc/mysql/mariadb.conf.d/50-server.cnf

常见问题项

innodb_buffer_pool_size = 1G

建议值(小内存服务器)

innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M

重启:

systemctl restart mariadb

二、PHP-FPM 进程太多(第二常见)

问题表现

  • 每个 PHP-FPM 子进程 30~100MB
  • 开 20 个 = 直接 1G+

查看

ps aux | grep php-fpm

配置文件

/etc/php/*/fpm/pool.d/www.conf

关键参数

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

256M 内存服务器建议

pm.max_children = 3~5

重启:

systemctl restart php*-fpm

三、Nginx 本身不是元凶,但配置不当也会

一般不会吃太多内存

  • 每个 worker 几 MB
  • worker 数过多才有问题

建议

worker_processes auto;
worker_connections 1024;

四、系统缓存被误判为“内存不足”

正确理解

used = 应用使用 + buff/cache

buff/cache 是健康的 ❌ 不要看到 used 高就慌


五、日志 / 临时文件没清理

检查

du -sh /var/log/*
du -sh /tmp

清理

journalctl --vacuum-time=7d

六、网站被爬虫 / 攻击(隐蔽但常见)

现象

  • PHP-FPM 突然暴涨
  • 内存迅速吃满

排查

nginx -t
tail -f /var/log/nginx/access.log

防护

  • 限制请求频率
  • 封 IP
  • 使用 CDN

三、快速定位是哪一步吃内存(实用命令)

top
# 然后按 M(按内存排序)

ps aux --sort=-%mem | head -10

free -h

四、不同服务器规格推荐配置(经验值)

内存 MySQL PHP-FPM
512M 128M max_children=3
1G 256M max_children=5
2G 512M max_children=10

五、总结一句话

Debian LNMP 内存高 90% 是 MySQL + PHP-FPM 配置不合理,而不是系统本身的问题。


如果你愿意,可以把下面信息发我,我可以 直接帮你给出最优配置

  1. 服务器内存(如 1G / 2G)
  2. free -h 输出
  3. 是否跑 WordPress / Laravel / 其他程序
  4. MySQL 或 PHP 版本

我可以直接给你一份 可直接用的 my.cnf + php-fpm 配置

0