문서에는 "
max는 캐시의 최대 요소 수를 설정합니다. 캐시 오버플로 시 가장 최근에 사용된(LRU) 요소가 제거됩니다.
nginx나 서버를 재부팅해도 지속되나요?
이것이 어떻게 추적되는지 궁금합니다. 기억 속에? 아니면 파일 시스템의 마지막 액세스 타임스탬프를 사용합니까?
나는 그것에 대한 정보를 찾을 수 없습니다.
(재부팅으로 인해) LRU 파일을 확인할 수 없는 경우 정보는 어떻게 되나요?
편집하다:
nginx 캐시 로더 프로세스를 알고 있습니다. 해당 프로세스가 아니었다면 캐시 파일은 전혀 지속되지 않을 것입니다.
문서에 따르면 이 로딩 프로세스에는 메타데이터도 포함되어 있으며 메타데이터가 무엇인지에 대해 더 구체적으로 설명하지는 않습니다.
문제는 이 메타데이터에 마지막 액세스 타임스탬프도 포함되어 있느냐는 것입니다.
단, 담기 위해서는 먼저 작성해야 합니다.
파일에 inotifywait를 설정하고 요청했습니다. 캐시 파일에 대한 HTTP 요청의 결과는 다음과 같습니다.
cache-filename OPEN
cache-filename ACCESS
cache-filename CLOSE_NOWRITE,CLOSE
파일 수정이 발생하지 않은 것으로 보이며 이는 LRU 데이터가 디스크에 기록되지 않아 지속되지 않는다는 예비 결론으로 이어집니다.
그러나 데이터는 여전히 다른 곳에 기록될 수 있습니다. 나중에 다른 프로세스에 의해 RAM에서 디스크로(캐시 파일로) 기록될 수도 있습니다. 따라서 데이터는 지속적이지만 디스크에서 최신 상태가 보장되지는 않습니다.
여전히 질문에 답이 없습니다.
답변1
nginx는 파일의 액세스 시간을 사용하여 LRU할 내용을 나타낼 수 있는 것으로 보입니다. 다른 디스크 사용량으로 인해 다른 서버보다 더 작은 캐시로 분할된 서버 전체에서 atime을 검사한 결과, 캐시가 더 작고 LRU 압력이 더 높은 서버에는 atime(-amin)으로 측정했을 때 특정 기간 동안 파일이 없는 것으로 나타났습니다. 찾기에서). 내가 이것을 보는 데 사용한 명령은 다음과 같습니다.
for i in `seq 1000 100 4000`; do
echo -n "Files accessed more than $i minutes ago: "
find /opt/nginx-cache/data -type f -amin +$i | wc -l
done
그리고 우리 서버 중 하나의 출력은 다음과 같습니다.
Files accessed more than 1000 minutes ago: 52154
Files accessed more than 1100 minutes ago: 40582
Files accessed more than 1200 minutes ago: 25527
Files accessed more than 1300 minutes ago: 19567
Files accessed more than 1400 minutes ago: 13384
Files accessed more than 1500 minutes ago: 7683
Files accessed more than 1600 minutes ago: 4597
Files accessed more than 1700 minutes ago: 3038
Files accessed more than 1800 minutes ago: 1916
Files accessed more than 1900 minutes ago: 1251
Files accessed more than 2000 minutes ago: 837
Files accessed more than 2100 minutes ago: 585
Files accessed more than 2200 minutes ago: 459
Files accessed more than 2300 minutes ago: 365
Files accessed more than 2400 minutes ago: 258
Files accessed more than 2500 minutes ago: 101
Files accessed more than 2600 minutes ago: 8
Files accessed more than 2700 minutes ago: 0
Files accessed more than 2800 minutes ago: 0
Files accessed more than 2900 minutes ago: 0
Files accessed more than 3000 minutes ago: 0
이것이 맞다면 캐시 로더는 재부팅 시 파일의 atime을 읽어 필요에 따라 LRU 파일을 올바르게 삭제할 가능성이 높습니다.
답변2
이 문서http://czerasz.com/2015/03/30/nginx-caching-tutorial/"캐시 로더"라는 프로세스가 있다고 설명합니다. 시작 시 한 번만 실행되며 메타데이터를 메모리 영역에 로드합니다. 모든 키가 로드될 때까지 반복적으로 실행됩니다.