性能测试连载 (29)-浅析 swap 内存交换
https://pan.baidu.com/s/1df1HDkFzChYNAbsSazizpw 提取码:hhn7
jmeter 全系列文档资料
https://pan.baidu.com/s/1rD3H9EGbu0u11E8ofpAl3A 提取码:8q65
性能测试初级到高级系列资料
swap 原理
swap 就是内存交换的意思。
计算机对内存分为物理内存与虚拟内存。物理内存就是计算机的实际内存大小,虚拟内存则是从磁盘空间开辟出一部分内存空间虚拟出来的,所以也叫磁盘缓存。虚拟内存的出现,让机器内存不够的情况得到部分解决。程序运行的时候系统会在虚拟内存与物理内存直接进行替换和加载。这里的虚拟内存就是 swap。
进程运行的时候系统会判断当前物理内存是否还有空闲,如果有那么则直接调入内存进行运行;如果没有,那么会根据优先级选择一个进程挂起,把该进程交换到 swap 中等待,然后把新的进程调入到内存中运行。
进程向系统请求内存发现不足时,系统会把内存中暂时不用的数据交换出去,放在 swap 分区里,这个过程称为 swap out(so)
当进程又需要这些数据且系统发现还有空闲物理内存时,又会把 SWAP 分区中的数据交换到物理内存中,这个过程称为 swap in(si)
swap 使用完,操作系统会触发OOM-Killer机制,杀掉占用内存最大的进程。所以大家经常会发现内存飙高之后进程莫名其妙的不见了。。。。
jvm 与 swap 的关系
1:系统内存足够 (jvm 内存未使用到 swap 内存),但 jvm 内存不够,最终导致 jvm 的频繁垃圾回收(FGC),由于 fullgc 时间很久,会导致线程的长期暂停
2:系统内存不够,JVM 堆内存部分用到了 swap,此时的垃圾回收需要把 swap 的内存交换到系统物理内存再进行 jvm 的垃圾回收。导致每次 GC 的时间都变得很久
3:物理内存不够用,大量 JVM 的堆内存被交换到 swap 之后,垃圾回收时把 swap 内存交换到物理内存,但 swap 的内存又不会立即交换回来。此时 swap 使用的内存占用会变大,可能会导致 oom killer