DB에서 일부 행에 대해 많은 처리를 수행하는 스크립트가 있습니다. 이 스크립트는 많은 객체와 내부 캐싱 메커니즘을 사용하고 있습니다.내 모든 기억이 PHP로 어떻게 옮겨 졌는지 어떻게 알 수 있습니까?
캐시 된 항목에 대해 사용 가능한 RAM을 모두 사용하지 않도록 모든 사용 된 캐시를 해제하지만 사용 된 메모리는 줄이지 않습니다.
나는 스크립트가 얼마나 많은 RAM을 가지고 있는지를 결정하기 위해 memory_get_usage(true)
을 사용했지만, 어떤 객체가 여전히 RAM에 있고 여전히 메모리를 먹고 있는지를 감지하는 방법이 없다.
간단한 해결책은 모든 개체를 거슬러 올라가서 변수가 아직 살아 있는지 확인하고 모든 내부 캐시가 실제로 free'd되어 있는지 테스트하고 다시 테스트하고 테스트하는 것입니다. 도구 나 함수 호출을 찾으십시오.이 스크립트에서 사용하는 개체의 모든 내부 구조를 알고 혼란스럽게하지 않고도 "Z 클래스의 변수 Y에 RAM의 90 %가 있음"이라고 알릴 수 있습니다.
PHP의 가비지 컬렉터가 실행되지 않는 한 변수를 설정 해제하거나 null로 설정해도 메모리가 즉시 해제되지 않습니다. GC 실행은 비용이 많이 들고 PHP는 실행해야 할 때까지 실행하지 않습니다. 작업에 현재 사용 가능한 것보다 많은 메모리가 필요할 때 –