操作系統觸發內存Swap
- 內存 swap 是操作系統里將內存數據在內存和磁盤間來回換入和換出的機制,涉及到磁盤的讀寫,所以,一旦觸發 swap,無論是被換入數據的進程,還是被換出數據的進程,其性能都會受到磁盤IO慢的影響。
- Redis觸發swap后會影響Redis的主IO線程,大大增加Redis的響應時間
Redis觸發Swap原因
- Redis實例使用了大量內存,導致機器物理內存不足
- Redis實例所在機器其它程序使用了大量內存,導致Redis實例可用內存不足
查看Redis實例發生swap的情況
// 查看Redis實例ID redis-cli -a auth info | grep process_id cd /proc/process_id // 查看Swap情況 // Redis會使用多個內存塊,Size表示內存塊大小,Swap表示交換到磁盤的大小,如果該值較大,則說明物理內存可能不足 $cat smaps | egrep '^(Swap|Size)' Size: 600kB Swap: 0 kB Size: 50kB Swap: 50kB Size: 50kB Swap: 0 kB Size: 40000 kB Swap: 40000 kB Size: 20000kB Swap: 0 kB
解決思路
- Redis實例使用大量內存:增加實例所在機器物理內存 或 使用Redis集群,將內存壓力分散到多個節點
- 其它程序占用內存: Redis實例獨立機器部署
