要优化内存,首先需要了解系统内存的使用状态,常用命令/工具如下:
free -h:以人类可读格式(GB/MB)显示物理内存、交换空间的总使用量、空闲量及缓存/缓冲区的占用情况,快速判断内存是否紧张。top/htop:实时监控进程的内存占用(按%MEM排序),识别占用内存高的进程(如Java应用、数据库);htop需安装(sudo yum install htop),界面更友好。vmstat 1 5:每1秒采样1次,共5次,显示内存、交换分区、I/O、CPU的使用情况(如si/so列代表交换分区的读写,数值过高说明内存不足)。/proc/meminfo:查看详细内存信息(如MemTotal总内存、Cached缓存、Buffers缓冲区),适合深入分析。内核参数直接影响内存的分配和使用策略,需通过/etc/sysctl.conf文件永久修改(修改后执行sysctl -p生效):
vm.swappiness:控制使用交换空间(Swap)的倾向,默认值通常为30(范围0-100)。值越高,系统越倾向于使用Swap(会降低性能);建议设置为10以下(如vm.swappiness=10),减少对Swap的依赖。vm.vfs_cache_pressure:控制内核回收inode和dentry缓存的倾向,默认值通常为100。值越高,回收越积极(适合内存紧张的场景);建议设置为50(如vm.vfs_cache_pressure=50)。vm.dirty_ratio/vm.dirty_background_ratio:控制脏页(已修改但未写入磁盘的内存页)的比例。dirty_ratio(默认20)表示当脏页占总内存的20%时,强制写入磁盘;dirty_background_ratio(默认10)表示后台进程开始写入脏页的阈值。建议调整为dirty_ratio=10、dirty_background_ratio=5,平衡内存使用和I/O性能。vm.overcommit_memory:控制内存分配策略,默认值0表示内核允许超额分配(可能引发OOM)。设置为2(如vm.overcommit_memory=2),禁止超额分配,避免因内存不足导致进程被杀死。CentOS会自动缓存文件系统元数据(如目录结构)和文件数据(如频繁访问的文件),以提高性能。当内存紧张时,可手动清理缓存:
sync; echo 1 > /proc/sys/vm/drop_caches(sync将缓存数据写入磁盘,避免数据丢失)。sync; echo 2 > /proc/sys/vm/drop_caches。sync; echo 3 > /proc/sys/vm/drop_caches(会清理页面缓存、目录项和inode缓存)。注意:清理缓存会导致后续文件访问变慢(需重新读取磁盘),建议在内存紧张且不需要频繁访问缓存数据时使用。
不必要的服务会持续占用内存,需定期检查和关闭:
systemctl list-units --type=service --state=running(列出所有正在运行的服务)。systemctl stop <service_name>(停止服务)、systemctl disable <service_name>(禁止开机自启,如httpd、mysql等非必需服务)。systemctl list-unit-files --type=service --state=enabled(查看开机自启的服务)、systemctl disable <service_name>(禁用不需要的启动项)。部分应用程序(如Tomcat、MySQL、Redis)的内存占用可通过调整配置文件减少:
conf/server.xml中的<Connector>标签,调整maxThreads(最大线程数,减少线程占用内存)和minSpareThreads(最小空闲线程数)。my.cnf中的innodb_buffer_pool_size(InnoDB缓冲池大小,通常设置为物理内存的50%-70%,如innodb_buffer_pool_size=4G),减少磁盘I/O对内存的需求。redis.conf中的maxmemory(最大内存限制,如maxmemory 2gb)和maxmemory-policy(内存淘汰策略,如allkeys-lru,当内存满时淘汰最近最少使用的键)。当物理内存不足时,可通过交换分区(Swap Partition)或交换文件(Swap File)扩展内存空间(但会降低性能,因为Swap是磁盘上的空间):
sudo fallocate -l 2G /swapfile(创建2GB的交换文件,若fallocate不可用,可用dd if=/dev/zero of=/swapfile bs=1M count=2048)。sudo chmod 600 /swapfile(仅root可读写,防止误操作)。sudo mkswap /swapfile(将文件格式化为交换空间)。sudo swapon /swapfile(立即启用)。/swapfile none swap sw 0 0添加到/etc/fstab文件中(重启后自动启用)。ZRAM是一种在内存中创建压缩块设备的技术,将Swap数据压缩存储在内存中,比传统Swap更高效(减少磁盘I/O,提升性能):
sudo modprobe zram num_devices=1(创建1个ZRAM设备)。echo 2G | sudo tee /sys/block/zram0/disksize(设置ZRAM设备大小为2GB,可根据物理内存调整)。sudo mkswap /dev/zram0(格式化为交换空间)、sudo swapon /dev/zram0(启用)。/etc/rc.local文件中(开机自动执行)。对于需要严格限制内存使用的服务(如容器、第三方应用),可使用cgroups(控制组)分配固定内存,避免单个进程占用过多内存导致系统崩溃:
sudo yum install libcgroup libcgroup-tools。sudo cgcreate -g memory:/mygroup(创建名为mygroup的内存控制组)。echo 2G | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes(限制该组进程最多使用2GB内存)。sudo cgclassify -g memory:mygroup <pid>(将指定进程ID加入mygroup组)。若以上方法均无法满足内存需求(如系统频繁使用Swap、应用无法正常运行),最有效的解决方案是升级服务器的物理内存(RAM)。升级前需确认服务器支持的最大内存容量和内存类型(如DDR4、DDR5)。
通过以上方法,可有效优化CentOS系统的内存使用,提升系统性能和稳定性。需根据实际场景选择合适的优化策略(如日常运维可侧重监控和清理缓存,长期解决可调整内核参数和优化应用配置)。