今天被叫着看一个性能问题,发现了一个很有意思的事情,当Linux的物理内存快被耗尽时,系统会把一些进程占用的内存转移swap区,当物理内存被释放一部分时,swap区的一些内存占用又慢慢回到mem区,但是mem区却不再是之前的满负荷状态,而是有一部分free的内存!
【17G大小进程压力测试结果】
| 总资源消耗 | 内存类型 | Used(G) | Free(G) | Total(G) | |
|---|---|---|---|---|---|
| 压力测试前 | 35.86 | Mem | 30.14 | 1.08 | 64 |
| Swap | 5.72 | 25.57 | |||
| 压力测试结束前期 | 34.78 | Mem | 12.78 | 18.45 | 64 |
| Swap | 22.00 | 9.30 | |||
| 压力测试结束后期 | 37.04 | Mem | 21.99 | 9.24 | 64 |
| Swap | 15.04 | 16.26 |
【总结】
- 当物理内存快被耗尽时,系统并没有崩溃,而是拿swap做临时内存,当两者都耗尽,系统OutofMemory
- 物理内存到达峰值,系统中可能一些不常用的进程内存占用被踢到swap区
- 当Mem区的资源进行释放时,被挪到swap的内存并不会全部回来的,随着系统或者程序的唤醒才会慢慢回到mem区
- Swap是内存不够时磁盘虚拟出来的内存,磁盘主要是I/O级别的操作并不是系统内核级别的操作,处理速度跟Mem区不是一个等级
本文通过17G大小进程压力测试,详细解析了Linux系统在物理内存接近耗尽时,如何智能地将部分进程内存转移到swap区,以及在内存释放后的回迁机制。揭示了Linux内存管理的动态平衡过程。
833

被折叠的 条评论
为什么被折叠?



