1.什么是linux内存
首先执行:
free -htotal表示总内存
used表示已占用内存
free表示当前剩余内存free很低并不一定代表内存不足。还要看availab
buff/cache表示Linux为了提高性能而使用的缓存和缓冲区内存。
available:系统在不明显依赖Swap的情况下,还可以提供给新程序使用的内存估计值。
swap是什么也就是我们的交换分区:磁盘上的一块空间,用来在物理内存紧张时临时存放部分内存数据。但是他比ram内存慢的多
假如说我们现在
Mem:total 8Gused 7Gfree 200Mbuff/cache 1Gavailable 4G
free虽然不高但是我们availble还有很多
如果说内存真的不够了我们依旧使用
2.top
%mem表示进程占用了系统内存的比例
res表示进程当前实际驻留在物理内存中的内存大小
按shift+m可以让信息按内存排序
实际排查
free -h
发现available声音200m
swap:used=1.5g
说明内存的确不足
使用top查看按m进行内存排序
java %MEM 45%mysql %MEM 25%python %MEM 10%
发现jave现在内存占用已经45
ps -p PID -f我们查看这个进程是什么:注意以下几点
Java程序是什么
为什么内存增长
有没有内存泄漏
日志有没有异常
定位后使用
ps aux --sort=-%mem | head继续查看
3.Swap——Linux的交换空间
Swap 是磁盘上的一块空间,当物理内存(RAM)紧张时,Linux可以把部分暂时不用的内存数据放到Swap里。
什么情况需要警惕?
比如:
Mem: available = 100M Swap: total = 2G used = 1.8G
同时服务器:
明显变慢 程序响应慢 磁盘I/O很高
这时候就非常值得怀疑:
物理内存不足,系统正在大量使用Swap。
因为RAM比磁盘快得多。
swapon --show4.oom
内存不足-----内核无法继续分配内存----OOM Killer----选择进程----杀掉进程---释放内存
这时候你可能发现:
“为什么我的MySQL突然没了?”
就有可能需要检查OOM记录。
dmesg | grep -i oom内存总结:
首先收到内存报警,我们先使用free确认内存是否真的存在高负载,重点观察total、used、free、buff/cache、available。然后根据内存指标判断问题方向,如果available较高同时swap也高,再使用top,ps等工具定位内存占用较高的进程。确认具体进程后,判断它属于正常业务还是异常进程。如果是正常业务导致资源不足,则进一步考虑程序优化、限流、扩容或者增加实例;如果是异常进程,则结合日志和业务情况进行处理,必要时停止或重启服务。处理完成后再次观察内存和Load是否恢复正常。