거의 변하지 않고 자주 요청되는 파일을 캐쉬에
저장하여 서버 부하를 줄일 수 있다. mmap()할지 아니면 파일을
열고 파일 핸들을 저장할지 결정한다. 두 방식 모두
파일을 서비스하기위해 필요한 작업의 일부를 (특히 파일 입출력
작업) 파일을 요청할 때마다 매번 하는 대신 서버가 시작할때
한번만 하여 서버 부하가 감소한다.
주의: 이 방법은 CGI 프로그램이나 특별한 내용핸들러를 통해 서비스하는 파일의 서비스 속도를 높일 수 없다. 이 방법은 보통 아파치 core 내용핸들러가 서비스하는 일반파일에만 적용된다.
이 모듈은 아파치 1.3에 있는 mod_mmap_static
모듈의 기능을 확장한 결과다.
모든 플래폼이 두 지시어를 모두 지원하는 것은 아니다.
예를 들어, 윈도우즈용 아파치는 현재
mmap() 시스템호출을
사용하여 메모리에 대응한다. 최신 유닉스류 운영체제라면
보통 이 시스템호출이 있지만, 없는 운영체제도 있다. 또,
mmap()할 수 있는 파일 크기와 개수를 시스템이
제한할 수 있으므로 미리 실험해보는 것이 좋다.
서버는 시작할때와 재시작할때만 mmap()한다.
그래서 파일시스템에서 해당 파일중 하나라도 변경되면 서버를
재시작해야 한다 (중단과
재시작 문서 참고). 다시 말해서 파일이 변경되었는데
서버를 재시작하지 않으면 완전히 이상하게 요청을 서비스할지도
모른다. 이전 파일을 지우고(unlink) 그 자리에 새로운 파일을
만들는 방식으로 파일을 수정해야 한다. rdist나
mv와 같은 대다수의 도구가 이런 방식으로 동작한다.
매번 추가로 불필요한 stat() 검사가 필요하고
입출력 감소라는 원래 의도에 반하기때문에 이 모듈은 파일의
변화를 무시한다.
sendfile()에 (윈도우즈에서는
TransmitFile()) 넘긴다.
서버는 시작할때와 재시작할때만 파일 핸들을 캐쉬한다.
그래서 파일시스템에서 캐쉬한 파일중 하나라도 변경되면
서버를 재시작해야 한다 (중단과 재시작 문서 참고).
다시 말해서 파일이 변경되었는데 서버를 재시작하지 않으면
완전히 이상하게 요청을 서비스할지도 모른다. 이전 파일을
지우고(unlink) 그 자리에 새로운 파일을 만드는 방식으로
파일을 수정해야 한다. rdist나 mv와
같은 대다수의 도구가 이런 방식으로 동작한다.
디렉토리의 모든 파일을 재귀적으로 캐쉬에 저장하는 지시어는
없다. 대신 다음과 같이 해보라...
mmap()하기위해 최소한 서버에 HUP이나
USR1 시그널을 보내야 한다.
file-path 아규먼트를 조심해라. 아규먼트는
아파치의 URL-파일명 변환 핸들러가 만든 파일시스템 경로와
정확히 일치해야 한다. 한번 더 불필요한 stat()
시스템호출이 필요하기때문에 inode나 심볼링크 등을
경로를 지정할 수 없다. 이 모듈은
file-path 아규먼트를 조심해라. 아규먼트는
아파치의 URL-파일명 변환 핸들러가 만든 파일시스템 경로와
정확히 일치해야 한다. 한번 더 불필요한 stat()
시스템호출이 필요하기때문에 inode나 심볼링크 등을
경로를 지정할 수 없다. 이 모듈은