CentOS LAMP环境内存管理技巧
系统级配置是内存管理的基础,通过调整内核参数可平衡内存使用与系统稳定性。
vm.swappiness:该参数控制内核使用交换分区(Swap)的倾向,默认值通常为30-60。对于内存充足的服务器,可将其设置为10(甚至更低,如5),减少对Swap的依赖,提升内存访问速度。修改方法:编辑/etc/sysctl.conf,添加vm.swappiness=10,然后执行sysctl -p使配置生效。vm.dirty_background_ratio(后台脏页比例,默认10%)和vm.dirty_ratio(前台脏页比例,默认20%)决定了脏数据(已修改但未写入磁盘的内存页)的刷新时机。建议将dirty_background_ratio设为5、dirty_ratio设为10,避免脏页过多占用内存。同样通过/etc/sysctl.conf修改并生效。vm.vfs_cache_pressure(inode/dentry缓存回收倾向,默认100)决定了内核回收目录项和inode缓存的积极性。增大该值(如设为50)可让内核更主动地回收缓存,释放内存给应用层。修改/etc/sysctl.conf后执行sysctl -p。Apache是LAMP架构中内存消耗较大的组件,合理配置可显著降低内存使用。
MaxClients/MaxRequestWorkers:该参数限制Apache的最大并发连接数。需根据服务器内存大小计算:假设每个Apache进程占用约20MB内存,2GB内存服务器可设置为60-80(公式:总内存×0.8÷单个进程内存)。修改httpd.conf中的MaxRequestWorkers(旧版本为MaxClients)。KeepAlive Off,并调整KeepAliveTimeout为2-3秒(默认15秒)。mod_status、mod_info)可能占用内存。通过a2dismod命令禁用未使用的模块(如sudo a2dismod status),然后重启Apache。数据库是LAMP架构中的内存大户,优化缓冲区配置可提高内存使用效率。
innodb_buffer_pool_size:该参数是InnoDB引擎的核心缓存,用于缓存表数据、索引等。建议设置为系统总内存的50%-80%(如2GB内存设为1-1.6GB)。修改my.cnf中的innodb_buffer_pool_size,重启MySQL生效。query_cache_size)对读密集型应用有提升,但在高并发写场景下可能成为瓶颈。若使用,建议设置为64-128MB,并定期监控Qcache_hits(命中率)和Qcache_inserts(插入次数),命中率低于**50%**时可考虑关闭。OPTIMIZE TABLE命令优化频繁更新的表,减少内存碎片占用。对于InnoDB表,也可通过ALTER TABLE table_name ENGINE=InnoDB重建表。PHP脚本的内存使用直接影响LAMP架构的性能,优化代码和配置是关键。
php.ini,开启opcache.enable=1,并设置opcache.memory_consumption=128(缓存大小,根据应用调整)。重启PHP-FPM或Apache生效。php.ini的disable_functions和disable_classes禁用未使用的模块(如xdebug在 production 环境中禁用),减少内存占用。unset()释放不再需要的变量、使用StringBuilder(PHP中为implode或sprintf)替代字符串拼接,减少内存分配。缓存是提升内存利用率的有效手段,可将频繁访问的数据存储在内存中,减少重复计算和数据库查询。
default.vcl文件,设置缓存规则(如缓存时间ttl)。noatime选项(如/etc/fstab中添加defaults,noatime),减少文件访问时间的更新操作,降低磁盘I/O和内存占用。持续的监控是内存管理的保障,可及时发现内存泄漏或异常占用。
free -h查看内存使用概况(总内存、已用、空闲、缓存);top/htop实时查看进程内存占用(按M键按内存排序);vmstat 1监控内存、交换分区、I/O等系统指标。sync(同步数据到磁盘)后,运行echo 3 > /proc/sys/vm/drop_caches(清理所有缓存)。可将其加入crontab(如每天凌晨2点执行)。valgrind(valgrind --leak-check=full ./your_script)检测PHP/Python等应用的代码泄漏;定期重启Apache、MySQL等服务(低峰时段),释放累积的内存泄漏。