Opcache를 실행하는 동안 Capistrano를 통해 새 PHP 코드를 배포하려고합니다.Opcache를 실행할 때 새 PHP 코드 배포
Capistrano는 배포 할 때마다 새로운 deploy 디렉토리를 만들고 웹 서버가 새 디렉토리를 가리 키도록 심볼릭 링크를 조정합니다. Opcache는 파일의 실제 경로로 캐시하기 때문에 새로 배포 된 사이트 버전은 이전 버전과 완전히 별도로 캐시됩니다.
우리가 실행하고있는 문제는 각각의 새로운 배포로 인해 전체 코드베이스가 캐싱되고 오래된 코드가 제거되지 않기 때문에 Opcache가 메모리를 모두 소모한다는 것입니다. opcache_reset()
이라고 부를 수는 있지만 캐시가 재설정되면 캐시가 멈추었을 때 간단히 500 개의 오류가 발생합니다. (캐시를 워밍업하지 않고 새로운 배치를 시작하려고해도 같은 오류가 발생합니다.)
더 나은 방법이 있습니까? opcache가 메모리가 부족해질 때까지 (또는 파일이 너무 많아서 비울 때까지) 새로운 코드를 실행하는 방식으로 라이브 사이트에서 opcache_reset()
을 호출하는 것을 피할 수 있습니까? 우리는 PHP 요청을 처리하는 PHP-FPM을 사용하여 Nginx를 웹 서버로 사용하고 있습니다.
T0xicCode의 대답에 대해 설명했듯이 이전 버전의 op_arrays는 재설정으로 회수 할 때까지 데드 스페이스입니다. 그 트릭은 앱의 복사본을 두 장 보유하고 일일로드 사이클의 무덤 이동 부분에서 리셋을 수행 할 수있을만큼 캐시를 크게 차지하게하는 것입니다. – TerryE