프로덕션 서비스에 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 빼기 1은 100 >> n"으로 측정됩니다.5
많은 문서를 연구할 때 "디스트레스"가 커널 카운터인 것처럼 들리지만 사실은 그렇지 않습니다. 대신, 각 메모리 영역을 스캔할 때 사용되는 값이며, 커널이 메모리 페이지의 프레임을 회수하려고 스캔하면서 값이 점차 증가합니다. 이에 대한 논의는 이 Q&A의 범위를 벗어나지만, 책의 "리눅스 커널 이해" 부분이 궁금하시다면,17장: 페이지 프레임 재활용. "distress" 값은 해당 영역을 스캔할 때 "prev_priority" 값에서 나옵니다.