一、硬件基础资源分配
worker_processes设为CPU核心数以充分利用多核;MySQL的多线程处理(如InnoDB后台线程)依赖CPU核心数,避免过多核心导致上下文切换开销。innodb_buffer_pool_size设为系统内存的50%-80%,用于缓存数据和索引,减少磁盘IO);其次分配给PHP(memory_limit根据脚本需求设置,如128M-256M,避免单个脚本占用过多内存);Nginx本身内存占用低(主要消耗在连接缓存),剩余内存用于系统缓存(如vm.swappiness设为10-30,减少交换空间使用)。/、/var/lib/mysql、/var/www/html),避免单分区满导致系统崩溃。二、操作系统层面优化
vm.swappiness:设为10-30(默认60),降低系统使用交换空间的倾向,避免内存不足时频繁交换导致性能下降。vm.dirty_ratio:设为10(默认20),vm.dirty_background_ratio设为5(默认10),控制内存中脏数据的写入阈值(脏数据是已修改但未写入磁盘的数据),平衡写入性能与数据安全性。deadline(适合数据库等低延迟应用),通过echo deadline > /sys/block/sdX/queue/scheduler设置;调整read_ahead_kb(如256),预读数据提升顺序IO性能。noatime(不更新文件访问时间,减少IO)、nodiratime(不更新目录访问时间)、async(异步写入,提升写入速度)选项。三、Nginx资源分配优化
worker_processes设为CPU核心数(如worker_processes auto;),worker_connections设为1024-2048(每个worker允许的最大连接数),总并发≈worker_processes × worker_connections(需结合系统限制调整)。keepalive_timeout设为65-120秒(保持连接时间),keepalive_requests设为1000-2000(单个连接的最大请求数),减少TCP握手开销(如从三次握手到复用连接)。location指令设置缓存(如expires 30d;),将静态文件(图片、CSS、JS)缓存到客户端,减少服务器负载(如静态资源请求占比高时,缓存可降低Nginx的CPU和IO消耗)。gzip on;,设置gzip_comp_level 5(压缩级别,1-9,越高压缩率越高但CPU消耗越大)、gzip_types text/plain text/css application/json application/javascript(压缩文件类型),减少传输数据量(如文本文件压缩率可达50%-70%)。四、MySQL资源分配优化
innodb_buffer_pool_size是MySQL最重要的参数之一,设为系统内存的50%-80%(如16G内存设为8G-12G),用于缓存数据和索引,减少磁盘IO(InnoDB是MySQL的默认存储引擎,缓冲池命中率高可显著提升查询性能)。max_connections设为100-300(根据并发需求调整),避免过多连接导致内存耗尽;配合thread_cache_size(设为10-20),缓存空闲线程,减少线程创建和销毁的开销(如短连接场景下,线程缓存可提升性能)。slow_query_log(设为ON),设置long_query_time 2(超过2秒的查询视为慢查询),通过EXPLAIN分析慢查询(如未使用索引、全表扫描),添加合适的索引(如主键、唯一索引、联合索引)优化查询性能。OPTIMIZE TABLE(如每周一次),整理表碎片(如频繁插入、删除数据导致碎片增多),提升查询效率(如InnoDB表的碎片率超过10%时,建议优化)。五、PHP资源分配优化
opcache.enable=1,设置opcache.memory_consumption=128(OPcache缓存内存大小,如128M)、opcache.interned_strings_buffer=8(字符串缓存大小)、opcache.max_accelerated_files=10000(最大加速文件数),缓存PHP脚本编译后的字节码,避免重复编译(如PHP脚本执行时间占比高时,OPcache可提升5-10倍性能)。memory_limit设为128M-256M(根据脚本需求调整,如WordPress等CMS可能需要256M),避免单个脚本占用过多内存(如内存泄漏脚本会导致PHP-FPM进程崩溃)。max_execution_time设为30-60秒(脚本最大执行时间),避免长时间运行的脚本(如导入大量数据的脚本)占用资源;set_time_limit(0)可用于特殊场景(如后台任务),但需谨慎使用。pm设为dynamic(动态进程管理模式),pm.max_children设为CPU核心数的2-4倍(如4核CPU设为8-16),pm.start_servers设为pm.max_children的1/4(如2-4),pm.min_spare_servers设为2-4(最小空闲进程数),pm.max_spare_servers设为4-8(最大空闲进程数),平衡进程创建与销毁的开销(如高并发场景下,动态模式可灵活调整进程数)。六、缓存与CDN资源分配
RDB/AOF),适合需要数据持久化的场景;Memcached适合纯缓存场景(如缓存会话数据)。七、监控与调整
top(查看CPU、内存占用)、htop(更直观的监控界面)、vmstat 1(查看系统整体性能,如CPU、内存、IO)、iostat -dx 1(查看磁盘IO性能,如读写速率、IO等待时间)、netstat -tulnp(查看网络连接状态,如端口占用、连接数)等工具,实时了解系统资源使用情况。access.log(查看请求量、响应时间、状态码)和error.log(查看错误信息,如404、500),以及MySQL的slow_query.log(查看慢查询),找出性能瓶颈(如某个接口响应慢、某个查询耗时久)。sudo systemctl restart nginx)、MySQL(sudo systemctl restart mysql)、PHP-FPM(sudo systemctl restart php-fpm),释放内存(如长时间运行后,进程可能占用内存泄漏);建议在低峰期重启(如凌晨2-4点),避免影响用户访问。