CentOS LNMP 内存占用优化实操指南
一 优化总览与基线
wrk -t12 -c100 -d30s --latency http://your-domain.com/),并用 top、ss -s、SHOW STATUS LIKE 'Threads_connected';、SHOW PROCESSLIST; 等定位瓶颈。二 MySQL 内存优化
innodb_buffer_pool_size=4G(约 50%–70% 内存)max_connections=200(避免过高;按需逐步增加)innodb_log_file_size=256M(写密集可适当增大)query_cache_type=0(MySQL 8.0 已移除;5.7 高并发写入场景建议关闭)slow_query_log=ON; long_query_time=1(打开慢查询日志,持续分析)innodb_io_capacity/innodb_flush_method 等以匹配硬件能力。三 PHP-FPM 与 OPcache 优化
pm=dynamic;pm.max_children 由“可用内存 / 单进程 RSS”估算;pm.start_servers、pm.min_spare_servers、pm.max_spare_servers 平滑伸缩;pm.max_requests 设为 500–2000 避免内存泄漏累积。php.ini:memory_limit=128–256M(按应用实际调小);opcache.enable=1;opcache.memory_consumption=128–256M;opcache.max_accelerated_files=20000;opcache.validate_timestamps=1(开发)/ 0(生产);opcache.revalidate_freq=60。request_slowlog_timeout=1s),及时优化耗时脚本与 SQL。四 Nginx 与内核网络优化
worker_processes=auto;worker_connections=8192;worker_rlimit_nofile=65535;use epoll; multi_accept on; accept_mutex off;gzip on; gzip_types text/css application/javascript image/svg+xml;;open_file_cache 合理设置。keepalive_timeout 65; keepalive_requests 1000; fastcgi_read_timeout 300;。/etc/security/limits.conf:* soft nofile 65535、* hard nofile 65535/etc/sysctl.conf(按需启用):
net.core.somaxconn=32768、net.core.netdev_max_backlog=32768net.ipv4.tcp_max_syn_backlog=65536、net.ipv4.ip_local_port_range=1024 65535net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_fin_timeout=30net.core.rmem_default=8388608、net.core.wmem_default=8388608、net.core.rmem_max=16777216、net.core.wmem_max=16777216sysctl -p。active connections 常触顶,先提升 worker_connections 与内核 somaxconn,再考虑横向扩容。五 进阶与常见误区
pm.max_children 或 innodb_buffer_pool_size,导致 OOM 或 swap;