코드의 임계 위치에 memory_get_usage ()를 삽입하면 응용 프로그램의 메모리 사용을 실시간으로 모니터링하고 메모리 누출 또는 불필요한 메모리 사용을 즉시 감지 할 수 있습니다. 간단한 예는 다음과 같습니다.
<span><span><span class="hljs-comment">// 현재 메모리 사용량을 얻으십시오</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"현재 메모리 사용: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_usage</span></span><span>() . </span><span><span class="hljs-string">" 바이트\n"</span></span><span>;
</span><span><span class="hljs-comment">// 일부 작업을 시뮬레이션하십시오</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1000000</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"작동 후 메모리 사용: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_usage</span></span><span>() . </span><span><span class="hljs-string">" 바이트\n"</span></span><span>;
</span><span><span class="hljs-comment">// 무료 메모리</span></span><span>
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"무료 메모리后的使用量: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_usage</span></span><span>() . </span><span><span class="hljs-string">" 바이트\n"</span></span><span>;
</span></span>
결과를 출력하면 배열 작동 전후에 메모리 변경이 확인되어 일부 작업이 메모리 사용이 비정상적으로 증가하는지 여부를 결정합니다.
일부 성능 튜닝에서는 스크립트 실행 중에 메모리 피크를 이해하는 것이 특히 중요합니다. memory_get_peak_usage ()를 사용하면 코드의 어떤 부분이 메모리 사용이 급증하는지 식별 할 수 있습니다. 예를 들어:
<span><span><span class="hljs-comment">// 메모리 피크 값을 얻으십시오</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"스크립트 실행 중 메모리 피크: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_peak_usage</span></span><span>() . </span><span><span class="hljs-string">" 바이트\n"</span></span><span>;
</span><span><span class="hljs-comment">// 메모리 소비를 시뮬레이션합니다</span></span><span>
</span><span><span class="hljs-variable">$array1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1000000</span></span><span>);
</span><span><span class="hljs-variable">$array2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1000001</span></span><span>, </span><span><span class="hljs-number">2000000</span></span><span>);
</span><span><span class="hljs-comment">// 새로운 메모리 피크를 얻으십시오</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"새로운 메모리 피크: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_peak_usage</span></span><span>() . </span><span><span class="hljs-string">" 바이트\n"</span></span><span>;
</span></span>
이러한 방식으로, 우리는 다양한 작업이 메모리에 미치는 영향, 특히 복잡한 데이터 처리 또는 대규모 배열/객체 작업에 미치는 영향을 분석 할 수 있으며, 이는 링크로 인해 메모리 사용이 급격히 증가했습니다.
Memory_get_usage () 및 memory_get_peak_usage () 에 의해 반환 된 데이터를 분석하여 잠재적 인 메모리 병목 현상을 발견하고 대상 방식으로 최적화 할 수 있습니다. 일반적인 최적화 방법은 다음과 같습니다.
불필요한 변수를 피하십시오 : 더 이상 시간에 사용되지 않는 릴리스 변수, 특히 큰 배열 또는 객체. unset ()를 사용하면 메모리 사용량을 줄일 수 있습니다.
생성기 사용 : 다량의 데이터를 처리 할 때 전통적인 배열 대신 PHP의 발전기를 사용하면 메모리 소비를 크게 줄일 수 있습니다. 생성기는 모든 데이터를 한 번에 메모리에로드하는 대신 주문형 데이터를 생성하기 때문입니다.
데이터 구조 최적화 : 메모리 사용과 관련하여 올바른 데이터 구조를 선택하는 것이 중요합니다. 예를 들어, 배열을 사용하는 경우, 복잡한 객체를 문자열 또는 정수와 같은 청정 데이터 유형으로 교체 할 수 있으면 메모리 사용량을 크게 줄일 수 있습니다.
메모리 누출을 피하십시오 : 메모리 누출은 일반적으로 기준이 제대로 지워지지 않기 때문입니다. 더 이상 사용되지 않는 객체 또는 어레이가 특히 메모리 축적을 피하기 위해 루프 나 장기 실행 스크립트에서 해제되어야합니다.
캐싱 메커니즘 : 일부 고전류 응용 분야에서 캐싱 메커니즘 (예 : Redis, Memcached)은 메모리 사용량을 줄이고 응답 속도를 향상시키는 데 사용됩니다. 이 유형의 캐시 시스템 저장은 메모리에서 데이터에 자주 액세스하여 데이터베이스의 부담을 줄입니다.
많은 양의 데이터를 처리하는 PHP 응용 프로그램에서 Memory_Get_usage 및 Memory_Get_Peak_Usage는 메모리 분석에 사용되므로 메모리 사용에서 병목 현상을 발견하는 데 도움이됩니다. 사용자가 업로드 한 CSV 파일을 처리 할 때 프로그램이 전체 파일을 메모리로 읽어 처리하여 과도한 메모리 소비를 초래하고 결국 메모리 오버 플로우 오류를 초래합니다.
피크 메모리를 분석함으로써 메모리 사용이 파일 크기로 선형으로 증가하는 것으로 나타났습니다. 마지막으로, 우리는 배치로 파일을 읽고 생성기를 사용하여 데이터를 라인별로 처리함으로써 원래 2GB에서 500MB로 메모리 소비를 줄여서 애플리케이션의 안정성과 성능을 크게 향상 시켰습니다.