Linux 系统中出现内存不足的提醒一般是在系统运行较大的应用程序或者同时间处理多个任务的时候。如果不重视,会导致系统变慢甚至崩溃,处理内存不足的问题可以参照以下方式!
先了解当前的内存使用情况,通过一些命令和工具来查看。如free命令,使用free命令可以查看当前内存的使用情况。
free -h
输出例子:
total used free shared buff/cache available
Mem: 8G 6.5G 500M 250M 1G 1G
Swap: 2G 1.5G 500M
其中total: 总内存。
used: 已使用的内存。
free: 可用内存。
buff/cache: 系统用于缓存的内存。
available: 实际可供应用程序使用的内存。
使用 top 或 htop 命令查看实时内存使用情况及哪些进程占用了大量内存:
top
或
htop
使用top 或 htop 命令可以按“M”键按内存使用情况排序,可以更快找出占用高内存的进程。
使用 vmstat 命令可以查看内存、CPU和IO的详细统计信息:
vmstat 1 5
15表示每秒可以刷新一次,共刷新5次。smem 是一个更详细的工具,可以显示每个进程的真实内存使用情况,包括共享和私有内存。安装smem:
sudo apt install smem # Ubuntu/Debian
sudo yum install smem # CentOS/RHEL
运行smem:
smem -r -k
查看内核日志,查找 Out of Memory 错误的具体信息:
dmesg | grep -i 'out of memory'
解决系统中内存不足的情况,看已关闭不必要的应用程序,某些应用程序占用了大量内存,可以尝试关闭或重启这些应用程序来释放内存。
kill -9 <pid>
用 top 或 htop 找到占用内存过多的进程ID,并使用上述命令终止它们。或者还可以增加交换空间,交换空间可以在内存不足情况下提供临时的磁盘存储,即便交换速度慢,但能防止系统崩溃。检查当前的Swap空间,用 free -h 检查当前 Swap 空间大小:
free -h
然后就可以创建新的 Swap文件,例如2GB):
sudo fallocate -l 2G /swapfile
如果使用的fallocate不能使用可以使用dd命令:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
更改文件的权限:
sudo chmod 600 /swapfile
格式化Swap文件:
sudo swapon /swapfile
验证Swap文件:
永久启用Swap文件(编辑 /etc/fstab):
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
调整swappiness使用的优先级,在某些情况下调整内核参数可以优化Swap的使用,调整swappiness值控制内存和Swap的平衡,值得范围是0到100,默认值通常是60。
降低swappiness值减少Swap的使用,适合内存充足的系统,增加swappiness,增加Swap使用,适用于内存紧张的情况下。查询当前swappiness设置:
cat /proc/sys/vm/swappiness
临时调整swappiness如设置为20:
sudo sysctl vm.swappiness=20
永久调整swappiness(编辑 /etc/sysctl.conf):
vm.swappiness=20
另外,还可以通过一些应用程序和服务的优化来减少内存的使用,如果您正在面临内存不足的困扰不妨试试本文的方法,在操作中存在疑惑可以咨询华纳云技术支持。