Linux

何時觸發交換或如何計算交換趨勢?

  • June 10, 2014

我正在嘗試將 Redis 用於生產服務並嘗試避免交換,這對性能不利。

我了解到交換是由 swap_tendency 觸發的,這取決於

swap_tendency = mapped_ratio/2 + swappiness + 窘迫

如何從/proc/meminfo我的監控腳本中獲取 mapped_ratio/distress?

或者任何可以告訴我係統將要交換頁面的參數?

映射比率

mapped_ratio可以這樣計算:

mapped ratio = (nr mapped * 100) / total memory;

資料來源:https ://www.cs.columbia.edu/~smb/classes/s06-4118/l19.pdf

nr_mapped

該值nr_mapped可以從以下位置讀取/proc/vmstat

$ grep nr_mapped /proc/vmstat
nr_mapped 47640

苦惱

根據這篇文章,標題為:Linux Memory - Implementation Notes

“這是衡量 VM 回收頁面的難度。每次 VM 嘗試回收記憶體時,它都會掃描每個區域中 1/n 的非活動列表以回收頁面。每次通過列表時,如果該區域中非活動清理 + 空閒頁面的數量未超過低水位標記,則 n 減 1。遇險測量為 100 >> n” 5

在研究許多文件時,聽起來好像“遇險”是核心計數器,但事實並非如此。相反,它是在掃描每個記憶體區域時使用的值,隨著核心掃描記憶體的頁面幀以試圖回收它們,該值逐漸增加。對此的討論超出了本問答的範圍,但如果您對“了解 Linux 核心”一書的第 17 章:頁框回收部分感到好奇。“distress”的值來自掃描區域時的“prev_priority”值。

參考

引用自:https://unix.stackexchange.com/questions/134202