温馨提示×

centos怎样回收内存空间

小樊
38
2025-11-01 17:40:53
栏目: 云计算

清理系统缓存(快速释放可用内存)
CentOS会利用空闲内存作为页面缓存(Page Cache)、目录项缓存(dentry)和inode缓存(inode cache),提升文件读写性能。当需要回收内存时,可通过以下命令清理缓存:

  • 同步数据sync命令将未写入磁盘的缓存数据强制写入,避免数据丢失;
  • 清理所有缓存echo 3 > /proc/sys/vm/drop_caches(同时清理页面缓存、目录项缓存、inode缓存);
  • 仅清理目录项和inode缓存echo 2 > /proc/sys/vm/drop_caches(不影响页面缓存,适合频繁访问文件的场景);
  • 仅清理页面缓存echo 1 > /proc/sys/vm/drop_caches(保留目录项和inode缓存,适合需要快速读取文件的场景)。
    注意:清理缓存会导致后续文件访问变慢(需重新读取磁盘),建议在系统内存充足或维护时操作。

终止高内存占用进程(精准释放内存)
若某进程长期占用大量内存(如内存泄漏的应用),可通过以下步骤终止:

  • 查看内存占用排名ps aux --sort=-%mem | head -n 10(按内存使用率降序排列,显示前10个进程);
  • 终止指定进程kill -9 <PID>(替换<PID>为进程的实际ID,强制终止进程)。
    注意:终止系统关键进程(如systemdsshd)可能导致系统崩溃,需确认进程用途后再操作。

调整Swappiness参数(减少交换空间使用)
swappiness参数(范围0-100)控制系统使用交换空间(Swap)的倾向,默认值通常为60(内存使用率达40%时开始使用Swap)。降低该值可让系统优先使用物理内存,减少Swap占用,间接回收内存:

  • 临时调整sudo sysctl vm.swappiness=10(设置为10,表示内存使用率达90%时才使用Swap);
  • 永久生效:将vm.swappiness=10添加到/etc/sysctl.conf文件中,执行sudo sysctl -p使配置生效。

重启占用内存的服务(释放服务内存)
部分服务(如数据库、Web服务器、缓存服务)可能因配置不当或内存泄漏占用大量内存。重启服务可强制释放其占用的内存:

  • 查看服务状态systemctl status <service_name>(如httpdmysqldtomcat);
  • 重启服务sudo systemctl restart <service_name>(重启指定服务);
  • 停止不需要的服务sudo systemctl stop <service_name>(如不需要图形界面,可停止gdmlightdm服务)。

优化内核与内存管理策略
通过调整内核参数,可优化内存分配和回收行为:

  • 启用内存压缩:在/etc/sysctl.conf中添加vm.vfs_cache_pressure=50(默认值通常为100,降低该值可减少内核回收目录项和inode缓存的频率,但会增加内存占用;设置为50可平衡性能与内存使用),执行sudo sysctl -p生效;
  • 限制应用程序内存:对于数据库(如MySQL),可通过修改配置文件(如my.cnf)中的innodb_buffer_pool_size参数,限制其内存使用量(如设置为物理内存的50%-70%);对于Java应用,可通过-Xmx(最大堆内存)和-Xms(初始堆内存)参数限制内存。

使用内存监控工具(实时掌握内存状态)
通过工具实时监控内存使用情况,可快速定位内存瓶颈:

  • top:实时显示进程的内存使用率(按M键按内存排序);
  • htop:增强版top,支持颜色显示和鼠标操作(需安装:sudo yum install htop);
  • free:查看内存总量、已用内存、可用内存及缓存/缓冲区的使用情况(常用free -h以人类可读格式显示);
  • vmstat:报告虚拟内存统计信息(如vmstat 1每秒刷新一次,显示内存、交换空间、IO等指标)。

自动定时清理内存(长期维护)
通过crontab设置定时任务,定期清理缓存(避免缓存占用过高):

  • 编写清理脚本(如/root/clean_cache.sh):
    #!/bin/bash
    echo "$(date): 开始清理缓存" >> /var/log/clean_cache.log
    sync && echo 3 > /proc/sys/vm/drop_caches
    echo "$(date): 缓存清理完成" >> /var/log/clean_cache.log
    
  • 赋予权限chmod +x /root/clean_cache.sh
  • 添加定时任务crontab -e,添加*/30 * * * * /root/clean_cache.sh(每30分钟清理一次,可根据需求调整频率,如每天凌晨0点清理:00 00 * * * /root/clean_cache.sh);
  • 重启crond服务systemctl restart crond(确保定时任务生效)。

增加物理内存(根本解决内存不足)
若系统频繁出现内存不足(如free -h显示可用内存接近0,且Swap使用率过高),增加物理内存是最有效的解决方案。可根据应用需求选择合适的内存容量(如数据库服务器建议配置大内存),从根本上提升系统内存承载能力。

0