我正在尝试使用 Redis 进行生产服务并尝试避免交换,这对性能不利。
我了解到交换是由 swap_tendency 触发的,这取决于
swap_tendency =mapped_ratio/2 + 交换度 + 痛苦
如何从/proc/meminfo
我的监控脚本中获取mapped_ratio/distress?
或者有什么参数可以告诉我系统将要交换页面?
答案1
映射比率
mapped_ratio
可以这样计算:
mapped ratio = (nr mapped * 100) / total memory;
来源:https://www.cs.columbia.edu/~smb/classes/s06-4118/l19.pdf
编号映射
该值nr_mapped
可以从以下位置读取/proc/vmstat
:
$ grep nr_mapped /proc/vmstat
nr_mapped 47640
苦恼
根据这篇文章,标题为:Linux 内存 - 实施说明
“这是衡量虚拟机回收页面的难度的指标。每次虚拟机尝试回收内存时,它都会扫描每个区域中非活动列表的 1/n,以努力回收页面。每次遍历列表时,如果该区域中不活动的干净+空闲页面的数量未超过低水位线,则 n 减一。痛苦的测量值为 100 >> n”5
在研究许多文档时,听起来好像“遇险”是一个内核计数器,但事实并非如此。相反,它是在扫描每个内存区域时使用的值,随着内核扫描内存页帧以尝试回收它们,该值逐渐增加。对此的讨论超出了本问答的范围,但如果您对本书的“理解 Linux 内核”部分感到好奇,第17章:页框回收。当区域被扫描时,“distress”的值来自值“prev_priority”。