Linux系统中内存问题排查思路与解决方法
内存是为提高效率而生,实际分析问题的时候,内存出现问题可能不只是影响性能,而是影响服务或者引起其他问题。
一、宿主机层面:
查看内存使用:
[root@sh-dev-backup-4-2 ~]# free -h
\ total used free shared buff/cache available
Mem: 62G 2.4G 354M 208M 59G 59G
Swap: 8.0G 0B 8.0G
详解:
1、total:总的物理内存
2、used:系统使用的内存,包括buff+cache。并非系统真正使用的内存。系统真正使用的内存=used-buff/cache
3、free:空闲的内存,系统未使用的内存,并不是系统启动应用程序可以真正使用的内存。
4、shared:共享内存
5、buff/cache:磁盘缓存的大小
6、available:在旧版free中,没有这个选项。这个选项指的是,系统启动程序时可以利用的内存,当这个选项很小或者不够启动程序所需的内存,会提示系统内存不足,无法启动,此时就需要处理问题,是物理内存真的不足,还是清理系统缓存。
Cached主要负责缓存文件使用, 日志文件过大,索引太多(redis,es,log处理等)造成cached区内存增大把内存占用完 ,Linux服务器会自动释放内存,保障系统运行,但只会释放够用的内存,而不会去释放更多的内存。
查看当前节点占用内存高的前3个进程:
ps aux |awk '{if($4>0.1){{printf "PID: "$2" Memory: "$3"% --> "}for(i=11;i<=NF;i++)if(i==NF)printf $i"\n";else printf $i}}' |sort -k4 -nr |head -3