2009-07-26 4 views
5

저는 대부분의 요청에 대해 약 100 개의 파일을 포함하는 동적 PHP 코드를 제공하는 트래픽이 많은 웹 서버 팜에서 작업하고 있습니다. APC opcode 캐시가 활성화되어 있고 include_once_override가 활성화되어 있고 캐시에 64MB 램을 할당했지만 아직 아파치 프로세스를 strace 할 때 open() 및 stat()를 모두 볼 때 필요한 모든 요청 캐시에서 꺼냈다. 캐시 통계에서 캐시가 채워지고 100 % hitrate와 함께 사용되는 것을 볼 수 있습니다. 아무도 통찰력을 제공 할 수 있습니까?APC를 사용할 수 있지만 아파치가 파일을 여는 중입니까?

+0

include_once_override를 사용하거나 사용하지 않는 서버를 벤치마킹 해 주시겠습니까? – hobodave

+0

감사합니다. 그래, 내가 벤치마킹을했는지, 그리고 눈에 띄는 차이를 보지 못 했어. 절대 경로를 구현 한 후 stat()를 사용하는 것이 훨씬 적지 만 필자가 포함하는 모든 파일에 대해 access()를 볼 수 있습니다. apc.stat = 0.이게 정상입니까? 왜 파일을 액세스해야합니까? – Will

+0

파일의 초기 포함 만보고 계시겠습니까? 어떤 버전을 사용하고 있습니까? APC는 역사적으로 include_once_override에 문제가있었습니다. 또한 답변을 사용하는 대신 원래의 질문을 응답으로 편집하십시오. – hobodave

답변

7

애플리케이션에 포함 할 때마다 전체 경로 이름을 사용해야합니다. 은 APC 문서 당 :

apc.stat 정수

이 설정을 변경주의해야합니다. 이 기본값은 on으로 설정되어 APC가 각 요청에 대해 스크립트를 수정 (확인)하여 강제로 수정되었는지 확인합니다. 수정 된 경우 새 버전을 다시 컴파일하고 캐시합니다. 이 설정이 꺼져 있으면 APC는 확인하지 않습니다. 이는 APC가 강제로 파일을 다시 검사하도록하고 웹 서버를 다시 시작해야하거나 캐시를 수동으로 지워야 함을 의미합니다. FastCGI 웹 서버 구성은 다시 시작할 때 캐시를 지울 수 없습니다. 스크립트 파일이 거의 변경되지 않는 프로덕션 서버에서는 통계가 비활성화되어 성능이 크게 향상됩니다.

포함/필수 파일의 경우이 옵션도 적용되지만 상대 경로 포함 (Unix에서 /로 시작하지 않는 경로)의 경우 APC는 파일을 고유하게 식별하기 위해 검사해야합니다. 절대 경로 포함을 사용하는 경우 APC는 통계를 건너 뛰고 해당 절대 경로를 파일의 고유 식별자로 사용할 수 있습니다.

PHP를위한 엄지 손가락의 좋은 규칙과 같이 프로젝트의 전체 경로가 포함 된 상수 정의하는 것입니다 :

// Assumes __FILE__ is in the root of your project 
define('PATH_PROJECT', realpath(dirname(__FILE__))); 

다음 사용을 당신과 같이 포함

include_once PATH_PROJECT . '/some/dir/file.php'; 

따라서 상대 경로의 편리 성은 여전히 ​​유지되지만 실제로는 전체 경로가 사용됩니다.

관련 문제