温馨提示×

debian lnmp为何内存占用高

小樊
42
2026-09-20 02:28:02
栏目: 智能运维

在 Debian 上部署 LNMP(Linux + Nginx + MySQL/MariaDB + PHP) 后,发现内存占用高是比较常见的问题。通常不是“内存泄漏”,而是各组件默认配置偏保守或偏消耗资源。下面按常见原因和排查/优化方法说明。


一、最常见原因

1. MySQL / MariaDB 占用内存最多

这是 LNMP 内存高的头号原因。

默认配置(尤其是 innodb_buffer_pool_size)可能很大:

innodb_buffer_pool_size = 128M ~ 1G

如果你云服务器只有 1G / 2G 内存,很容易吃满。

✅ 查看:

ps aux | grep mysql

✅ 优化(示例,2G 内存):

[mysqld]
innodb_buffer_pool_size = 256M
key_buffer_size = 32M
max_connections = 100

2. PHP-FPM 进程数过多

PHP-FPM 默认可能开很多子进程:

pm = dynamic
pm.max_children = 50

每个 PHP 进程可能 30–80MB,50 个就是 1.5G+。

✅ 查看:

ps aux | grep php-fpm

✅ 优化(2G 内存示例):

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

3. Nginx 本身不是问题,但配置不当会放大

Nginx 本身很轻量,但:

  • worker_processes 过多
  • keepalive_timeout 过长
  • 开启了不必要的模块

✅ 建议:

worker_processes auto;
keepalive_timeout 30;

4. 系统缓存(不是真占用)

Debian 会利用空闲内存做 cache/buffer:

free -h

如果:

buff/cache 很大
available 还很多

✅ 这是正常的,不是内存泄漏


5. 安装了多余服务

常见“隐形内存杀手”:

  • redis
  • memcached
  • fail2ban
  • clamav
  • monit

✅ 查看:

systemctl list-units --type=service --state=running

二、快速排查命令

# 总览
free -h
top
htop

# 按内存排序
ps aux --sort=-%mem | head

# 查看 swap
swapon --show

三、典型优化方案(1–2G 内存服务器)

MySQL

innodb_buffer_pool_size = 256M
max_connections = 80

PHP-FPM

pm.max_children = 8~12

Nginx

worker_processes auto;

可选

  • 关闭 swap(不推荐小内存)
  • 启用 swap(1G 内存强烈建议)
fallocate -l 1G /swapfile
mkswap /swapfile
swapon /swapfile

四、总结一句话

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

如果你愿意,可以把下面信息发我,我可以帮你精确调优:

  • 内存大小(free -h)
  • my.cnf
  • www.conf(PHP-FPM)
  • 是否用宝塔 / LNMP.org 一键包

0 踩