温馨提示×

如何优化LNMP内存占用

小樊
37
2026-07-10 23:06:22
栏目: 编程语言

优化 LNMP(Linux + Nginx + MySQL + PHP)内存占用,核心思路是:减少不必要的进程/模块、限制并发、使用轻量配置、必要时更换组件。下面按组件给你一套实用优化方案,适合低内存服务器(如 1–2 GB)。


一、系统层面优化

1. 关闭不必要的服务

systemctl disable --now bluetooth cups avahi-daemon

只保留 SSH、Nginx、PHP、MySQL 相关服务。

2. 调整 Swap(防止 OOM)

如果内存 ≤ 2GB,建议开启 swap:

fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab

二、Nginx 优化(通常最省内存)

1. 减少 worker 进程

worker_processes  1;  # 单核服务器
worker_connections 512;

2. 关闭不必要功能

server_tokens off;
gzip off;  # 内存紧张时可关闭

3. 限制缓冲区

client_max_body_size 2m;
client_body_buffer_size 128k;

三、PHP-FPM 优化(内存占用大户)

✅ 推荐配置(重点)

编辑:

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

1. 使用 ondemand(最省内存)

pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 10s

2. 限制单进程内存

php_admin_value[memory_limit] = 64M

3. 限制请求数(防内存泄漏)

pm.max_requests = 200

查看 PHP 单进程内存

ps aux | grep php-fpm

一般优化后:

  • 单进程 30–60 MB
  • 10 个进程 ≈ 300–600 MB

四、MySQL / MariaDB 优化(重点)

1. 使用轻量配置(适合 1G 内存)

编辑:

/etc/my.cnf
[mysqld]
innodb_buffer_pool_size = 128M
key_buffer_size = 32M
max_connections = 30
table_open_cache = 200
sort_buffer_size = 512K
read_buffer_size = 512K

2. 关闭性能损耗功能

performance_schema = OFF

3. 使用 MariaDB(比 MySQL 更省内存)


五、PHP 本身优化

1. 卸载无用扩展

php -m

删除:

  • gd
  • exif
  • pdo_dblib
  • soap(如不用)

2. 使用 PHP 8.x(内存效率更高)

PHP 8 比 7.2/7.4 更省内存。


六、网站程序优化

1. 启用缓存

  • WordPress:Redis / Memcached
  • 静态资源:Nginx 直接返回

2. 禁用 DEBUG / 日志

define('WP_DEBUG', false);

七、内存监控与排查

查看内存使用

free -h
htop

查看哪个进程最吃内存

ps aux --sort=-%mem | head

八、极端低内存方案(< 512MB)

如果内存非常小:

  • SQLite 替代 MySQL
  • 静态页面 / Hugo / Hexo
  • 或换用 OpenLiteSpeed + lsphp

九、推荐组合(稳定 + 省内存)

1–2 GB 服务器推荐配置

  • Nginx
  • PHP-FPM ondemand
  • MariaDB
  • 不启用 gzip / 不跑多余服务

如果你愿意,可以告诉我:

  • 服务器内存大小
  • 是否 WordPress
  • 当前 free -h 输出

我可以帮你给出精确配置参数

0