确认内存使用情况
free -h
top
htop
vmstat -s
识别内存占用高的进程
ps aux --sort=-%mem | head -10
检查缓存和缓冲区使用
cat /proc/meminfo
ulimit -v [限制值]
buff/cache
占用高但应用内存不高bash
sync; echo 1 > /proc/sys/vm/drop_caches # 释放页缓存
echo 2 > /proc/sys/vm/drop_caches # 释放目录项和inode
echo 3 > /proc/sys/vm/drop_caches # 释放所有缓存
bash
swapon --show
vmstat 1
bash
echo 10 > /proc/sys/vm/swappiness
# 永久生效:在/etc/sysctl.conf添加 vm.swappiness=10
# 调整内存过量使用策略
echo "vm.overcommit_memory=2" >> /etc/sysctl.conf
echo "vm.overcommit_ratio=80" >> /etc/sysctl.conf
sysctl -p
innodb_buffer_pool_size
设置监控告警
定期维护脚本
# 示例监控脚本
#!/bin/bash
THRESHOLD=90
MEM_USAGE=$(free | awk '/Mem/{printf("%.0f"), $3/$2*100}')
if [ $MEM_USAGE -gt $THRESHOLD ]; then
echo "内存使用率过高: $MEM_USAGE%" | mail -s "内存告警" admin@example.com
# 可添加自动处理逻辑
fi
内核日志检查
dmesg | grep -i "out of memory"
journalctl -k --since "1 hour ago" | grep -i oom
使用cgroups限制进程组内存
# 创建cgroup
cgcreate -g memory:/limited_group
# 设置内存限制为1GB
echo 1G > /sys/fs/cgroup/memory/limited_group/memory.limit_in_bytes
# 将进程加入cgroup
cgexec -g memory:limited_group [command]
考虑使用内存压缩
bash
echo 1 > /sys/module/zswap/parameters/enabled
评估升级硬件
通过以上方法综合处理,可以有效解决Linux系统中内存使用率过高的问题。建议先进行详细诊断,再针对具体原因采取相应措施。