ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Linux系统基础运维----3.内存篇

Linux系统基础运维----3.内存篇 1.什么是linux内存首先执行free -htotal表示总内存used表示已占用内存free表示当前剩余内存free很低并不一定代表内存不足。还要看availabbuff/cache表示Linux为了提高性能而使用的缓存和缓冲区内存。available系统在不明显依赖Swap的情况下还可以提供给新程序使用的内存估计值。swap是什么也就是我们的交换分区磁盘上的一块空间用来在物理内存紧张时临时存放部分内存数据。但是他比ram内存慢的多假如说我们现在Mem:total 8Gused 7Gfree 200Mbuff/cache 1Gavailable 4Gfree虽然不高但是我们availble还有很多如果说内存真的不够了我们依旧使用2.top%mem表示进程占用了系统内存的比例res表示进程当前实际驻留在物理内存中的内存大小按shiftm可以让信息按内存排序实际排查free -h发现available声音200mswapused1.5g说明内存的确不足使用top查看按m进行内存排序java %MEM 45%mysql %MEM 25%python %MEM 10%发现jave现在内存占用已经45ps -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也高再使用topps等工具定位内存占用较高的进程。确认具体进程后判断它属于正常业务还是异常进程。如果是正常业务导致资源不足则进一步考虑程序优化、限流、扩容或者增加实例如果是异常进程则结合日志和业务情况进行处理必要时停止或重启服务。处理完成后再次观察内存和Load是否恢复正常。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进