一、CentOS LNMP资源占用概述
LNMP(Linux+NGINX+MySQL+PHP)是CentOS上常见的Web架构,其资源占用受服务器配置(CPU、内存、磁盘)、组件版本及业务负载(如并发请求数、数据库大小)影响较大。基础资源占用大致如下:纯面板(如宝塔)约占60M内存、20M磁盘空间;实际运行中,NGINX内存占用随并发增长而增加,MySQL的内存消耗主要集中在缓冲池(如InnoDB Buffer Pool),PHP-FPM进程数过多会导致内存飙升。
二、各组件资源占用特点
innodb_buffer_pool_size(建议设为服务器总内存的50%-80%)、key_buffer_size等参数。空载时内存占用约50-100M,处理大量查询(如百万级数据)或复杂JOIN操作时,内存可能增至几百兆甚至上G,CPU占用可达50%以上。pm.max_children设置过大(如超过服务器内存承受能力),会导致内存耗尽、系统频繁交换(Swap),进而引发性能崩溃。三、资源占用分析与优化方法
worker_processes设为CPU核心数的2倍(如4核CPU设为8),充分利用CPU资源;worker_connections(每个工作进程最大连接数)设为1024-2000,提升并发处理能力。gzip on; gzip_types text/plain text/css application/json;配置,将HTML、CSS、JS等静态文件压缩(压缩率约50%-70%),减少网络传输量,降低带宽占用。location ~* \.(jpg|jpeg|png|gif)$ { expires 30d; },将静态文件缓存30天,减少对后端服务器的请求次数。innodb_buffer_pool_size是MySQL性能的关键参数,建议设为服务器总内存的50%-80%(如8G内存设为4-6G),缓存数据和索引,减少磁盘IO。EXPLAIN分析慢查询(如未使用索引的全表扫描),为常用查询条件添加索引(如ALTER TABLE users ADD INDEX idx_username (username);),避免复杂JOIN操作。slow_query_log = ON; long_query_time = 1(记录执行时间超过1秒的查询),使用pt-query-digest工具分析慢查询日志,定位性能瓶颈。pm.max_children根据服务器内存计算(如每个PHP进程占用20M内存,8G内存可设为200-300),避免进程数过多导致内存溢出;pm.start_servers(启动时的进程数)设为pm.max_children的1/4-1/2(如200设为50-100),减少启动时的资源消耗。opcache.enable=1; opcache.memory_consumption=128(分配128M内存)配置,缓存PHP脚本的字节码,减少重复编译开销(性能提升约30%-50%)。ulimit -n 65535临时设置,修改/etc/security/limits.conf永久生效(如* soft nofile 65535; * hard nofile 65535),避免因文件描述符不足导致连接失败。四、资源监控工具
系统自带工具:
top/htop:实时查看CPU、内存、进程占用情况(htop需安装,界面更友好);vmstat 1:每秒显示虚拟内存、CPU、IO等统计信息(如si/so表示交换分区使用情况,值过高说明内存不足);iostat -x 1:查看磁盘IO详细情况(如%util表示磁盘利用率,超过70%说明IO瓶颈);free -h:查看内存使用情况(区分缓存和实际使用);df -h:查看磁盘空间使用情况。组件专用工具:
stub_status模块(location /nginx_status { stub_status on; }),通过http://server_ip/nginx_status查看请求数、连接数等信息;mysqladmin status查看服务器状态,SHOW PROCESSLIST;查看当前连接,pt-query-digest分析慢查询日志;systemctl status php-fpm查看服务状态,php-fpm -t检查配置语法,status页面(需开启)查看进程数、内存占用。第三方监控工具: