LNMP(Linux + Nginx + MySQL/MariaDB + PHP)环境下内存占用高,通常来源于 MySQL、PHP-FPM、Nginx 缓存/连接数 或 系统配置不合理。下面按「排查 → 定位 → 优化」的思路给你一套实用方案。
free -h
top
重点看:
used 高不高buff/cache 是否很大(这个一般不用慌)swap 被大量使用ps aux --sort=-%mem | head
常见“大户”:
mysqldphp-fpmnginxmysql -u root -p
SHOW VARIABLES LIKE '%buffer%';
编辑配置文件(常见路径):
/etc/my.cnf
/etc/mysql/my.cnf
[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
ps aux | grep php-fpm
编辑:
/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
pm.max_children = 10
公式参考:
max_children ≈ 服务器内存 / 单个PHP进程内存
重启:
systemctl restart php-fpm
worker_processes 1;
events {
worker_connections 1024;
}
gzip 高等级(如果 CPU 紧)fastcgi_cache 占用sysctl vm.swappiness=10
永久:
echo "vm.swappiness=10" >> /etc/sysctl.conf
sync; echo 3 > /proc/sys/vm/drop_caches
你可以补充:
free -h 和 top 截图或输出我可以直接帮你 给一份可复制的配置文件。