温馨提示×

lnmp内存占用高怎么办

小樊
58
2026-08-31 19:10:58
栏目: 编程语言

LNMP(Linux + Nginx + MySQL/MariaDB + PHP)环境下内存占用高,通常来源于 MySQL、PHP-FPM、Nginx 缓存/连接数 或 系统配置不合理。下面按「排查 → 定位 → 优化」的思路给你一套实用方案。


一、先确认内存到底被谁吃了

1. 查看整体内存使用

free -h
top

重点看:

  • used 高不高
  • buff/cache 是否很大(这个一般不用慌)
  • 是否有 swap 被大量使用

2. 查看进程内存占用

ps aux --sort=-%mem | head

常见“大户”:

  • mysqld
  • php-fpm
  • nginx

二、MySQL / MariaDB 内存优化(最常见)

1. 查看 MySQL 内存配置

mysql -u root -p
SHOW VARIABLES LIKE '%buffer%';

2. 常见高内存参数(重点调)

编辑配置文件(常见路径):

/etc/my.cnf
/etc/mysql/my.cnf

小内存服务器(1–2G)示例:

[mysqld]
innodb_buffer_pool_size = 256M
key_buffer_size = 32M
max_connections = 100
query_cache_size = 0
tmp_table_size = 32M
max_heap_table_size = 32M

⚠️ innodb_buffer_pool_size 是最吃内存的,一般设为 物理内存的 40%~60%,小机器更小

重启:

systemctl restart mysqld

三、PHP-FPM 内存优化(第二大头)

1. 查看 PHP-FPM 进程数

ps aux | grep php-fpm

2. 调整 pm 模式(重要)

编辑:

/usr/local/php/etc/php-fpm.conf
# 或
/etc/php-fpm.d/www.conf

动态模式(推荐小内存)

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

内存极小(512M)

pm.max_children = 10

公式参考:
max_children ≈ 服务器内存 / 单个PHP进程内存

重启:

systemctl restart php-fpm

四、Nginx 调优(一般不是主因)

1. 减少 worker 连接

worker_processes 1;
events {
    worker_connections 1024;
}

2. 关闭不必要的模块 / 缓冲

  • 关闭 gzip 高等级(如果 CPU 紧)
  • 减少 fastcgi_cache 占用

五、系统和内核层优化

1. 减少 Swap 使用(视情况)

sysctl vm.swappiness=10

永久:

echo "vm.swappiness=10" >> /etc/sysctl.conf

2. 清理缓存(临时)

sync; echo 3 > /proc/sys/vm/drop_caches

六、常见“隐性吃内存”原因

  • ✅ 网站被爬虫 / CC 攻击(连接数暴涨)
  • ✅ 定时任务(cron)里 PHP 脚本泄漏
  • ✅ Redis / Memcached 没限制内存
  • ✅ 日志文件过大导致写盘卡顿

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

你可以补充:

  1. 服务器配置(CPU / 内存)
  2. 用的什么 LNMP 一键包(如 lnmp.org / 宝塔)
  3. free -h 和 top 截图或输出
  4. 是否 WordPress / 商城 / 自研系统

我可以直接帮你 给一份可复制的配置文件。

0 踩