优化前需明确内存使用状态,常用命令:
free -m:查看总内存、已用内存、剩余内存(含缓存/缓冲区)及Swap使用情况;top/htop:实时显示进程内存占用排名,识别高内存消耗进程;vmstat 1:监控虚拟内存统计信息(如页面交换频率、内存空闲量)。Linux内核会将闲置内存用于缓存(如文件系统缓存),可通过以下命令清理:
sudo apt-get clean(删除已下载的软件包文件)、sudo apt-get autoclean(删除旧版本的软件包缓存)、sudo apt-get autoremove(删除不再需要的依赖包);sudo rm -rf /tmp/*(删除/tmp目录下的临时文件);sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches(清理页面缓存、目录项缓存和inode缓存,注意:此操作会暂时降低系统性能,需在内存充足时使用)。通过修改/etc/sysctl.conf文件调整内核参数,优化内存回收行为:
vm.swappiness=10(默认值通常为60,值越小越倾向于使用物理内存而非Swap,减少Swap交换带来的性能损耗);vm.vfs_cache_pressure=50(默认值通常为100,值越大,内核越积极回收目录项和inode缓存,适用于内存紧张的场景);vm.overcommit_memory=2(禁止内核过度分配内存,避免因内存不足导致OOM Killer频繁触发)、vm.overcommit_ratio=50(设置内存过度提交的百分比,可根据物理内存调整)。sudo sysctl -p使配置生效。systemctl list-units --types service,禁用非必需服务(如kdump-tools,若系统无需崩溃转储功能,可停止并禁用:sudo systemctl stop kdump-tools.service && sudo systemctl disable kdump-tools.service);top/htop识别占用内存超过阈值的进程(如超过总内存20%的无用进程),使用kill -9 <PID>终止(需确认进程无重要任务)。innodb_buffer_pool_size(设置为物理内存的50%-70%,避免过大占用)、PostgreSQL的shared_buffers(类似调整);-Xms初始堆大小、-Xmx最大堆大小,设置为物理内存的70%左右,避免过度分配);worker_processes(设置为CPU核心数)、keepalive_timeout(减少长连接占用内存);Apache的MaxRequestWorkers(限制并发请求数)。若物理内存不足,可通过Swap空间扩展可用内存:
sudo fallocate -l 4G /swapfile(创建4GB Swap文件,大小根据需求调整)、sudo chmod 600 /swapfile(设置权限)、sudo mkswap /swapfile(初始化Swap文件)、sudo swapon /swapfile(启用Swap);/etc/fstab文件中添加/swapfile none swap sw 0 0,确保重启后自动挂载。使用valgrind工具检测应用程序的内存泄漏:
valgrind --leak-check=full ./your_program(替换为实际程序路径),分析报告中的泄漏位置(如未释放的内存块);malloc、new)都被正确释放(如free、delete)。sudo apt-get autoclean和sudo apt-get autoremove,清理无用软件包和缓存;