현재 위치: > 최신 기사 목록> 빅 데이터를 처리 할 때 Memory_Get_usage를 사용하여 PHP 메모리 소비를 실시간으로 모니터링하는 방법은 무엇입니까?

빅 데이터를 처리 할 때 Memory_Get_usage를 사용하여 PHP 메모리 소비를 실시간으로 모니터링하는 방법은 무엇입니까?

gitbox 2025-06-27

메모리 소비는 빅 데이터를 처리 할 때 개발자가 직면하는 가장 일반적인 문제 중 하나입니다. 프로그램이 많은 메모리를 사용하는 경우 서버가 충돌하거나 성능 저하 될 수 있으며 심각한 경우에는 PHP 스크립트의 메모리 제한을 초과하여 스크립트가 종료 될 수 있습니다. 따라서 PHP 프로그램의 메모리 사용량을 실시간으로 모니터링하는 것이 매우 중요하며 Memory_get_usage () 함수는 현재 스크립트에서 메모리를 사용하는 간단하고 효율적인 방법을 제공합니다.

1. memory_get_usage () 함수 소개

memory_get_usage () 는 현재 PHP 스크립트의 메모리 소비를 반환하는 PHP의 내장 기능입니다. 반환 값은 바이트 수이며 현재 스크립트에 의해 할당 된 총 메모리 양을 나타냅니다. 이 값에 따라 프로그램의 메모리 사용량을 모니터링하여 메모리 소비가 기대치를 초과하지 않도록 할 수 있습니다.

 <span><span><span class="hljs-variable">$memoryUsage</span></span><span> = </span><span><span class="hljs-title function_ invoke__">memory_get_usage</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-variable">$memoryUsage</span></span><span> . </span><span><span class="hljs-string">" 바이트"</span></span><span>;
</span></span>

2. 메모리를 실시간으로 모니터링하기 위해 memory_get_usage ()를 사용하는 방법

빅 데이터를 처리 할 때, 특히 많은 메모리 (예 : 데이터베이스 쿼리, 파일 읽기, 대규모 데이터 계산 등)를 소비 할 수있는 작업을 수행 할 때는 실시간으로 메모리 변경을 모니터링하는 것이 특히 중요합니다. 메모리 사용의 변동을 관찰하기 위해 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">$data</span></span><span> = [];
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &lt; </span><span><span class="hljs-number">100000</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
    </span><span><span class="hljs-variable">$data</span></span><span>[] = </span><span><span class="hljs-title function_ invoke__">str_repeat</span></span><span>(</span><span><span class="hljs-string">'a'</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);  </span><span><span class="hljs-comment">// 각 문자열 점유 1024 바이트</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_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">$data</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_usage</span></span><span>() . </span><span><span class="hljs-string">" 바이트\n"</span></span><span>;
</span></span>

이 예에서는 다른 작동 노드에서 메모리 사용량을 인쇄합니다. 이런 식으로, 우리는 실행 중에 메모리 소비가 어떻게 변하는 지 관찰 할 수 있습니다.

3. 메모리 소비를 최적화하기위한 팁

  1. 불필요한 데이터 저장소를 줄이십시오 <br> 다량의 데이터를 처리하려면 불필요한 데이터를 메모리에 저장하지 마십시오. 데이터베이스 쿼리 및 페이징 처리를 사용하여 데이터를 한 번에로드하지 않도록 데이터를 배치로로드하십시오.

  2. 메모리 매핑 파일 사용 <br> 매우 큰 파일의 경우 Fopen ()Fread () 와 같은 함수를 라인 별 읽기에 사용하여 전체 파일을 한 번에 메모리에로드하지 않도록하십시오.

  3. 정기적으로 변수를 정리하십시오 <br> unset ()을 사용하여 더 이상 필요하지 않은 변수를 지우므로 점유 된 메모리를 확보 할 수 있습니다.

  4. 메모리 제한 구성 <br> PHP 구성 파일 또는 스크립트에서 INI_SET ( 'Memory_Limit', '256m')를 통해 메모리 제한을 설정할 수 있습니다. 프로그램 실행 중에 메모리 오버플로를 피하기 위해 메모리 제한을 제 시간에 조정할 수 있습니다.

  5. 메모리 최적화 된 데이터 구조 사용 <br> 적절한 메모리 최적화 알고리즘 및 데이터 구조 (예 : 일반 배열 대신 SplfixedArray 사용)를 사용하면 메모리 소비를 효과적으로 줄일 수 있습니다.

4. memory_get_usage ()gc_collect_cycles () 결합

PHP는 더 이상 사용되지 않는 메모리를 자동으로 재활용하는 쓰레기 수집 메커니즘 (GC)을 제공합니다. 그러나 많은 양의 데이터를 처리 할 때 쓰레기 수집이 사용되지 않은 모든 메모리를 즉시 정리하지 못할 수 있습니다. 현재 쓰레기 수집을 수동으로 트리거 할 수 있으며 메모리 수집 전후의 변경 사항을 관찰하는 데 Memory_Get_usage ()를 사용하여 사용될 수 있습니다.

 <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">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_repeat</span></span><span>(</span><span><span class="hljs-string">'a'</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span> * </span><span><span class="hljs-number">1024</span></span><span> * </span><span><span class="hljs-number">50</span></span><span>);  </span><span><span class="hljs-comment">// 50MB 데이터</span></span><span>

</span><span><span class="hljs-comment">// 수동으로 쓰레기 수집을 트리거합니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">gc_collect_cycles</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>

5. 결론

Memory_get_usage () 함수를 사용하면 PHP 스크립트의 메모리 소비를 실시간으로 모니터링하고 해당 측정 값을 사용하여 메모리 사용을 최적화하여 빅 데이터를 처리 할 때 프로그램이 메모리 제한을 초과하지 않도록합니다. 또한 다른 메모리 최적화 기술과 결합하여 메모리 오버플로 및 성능 저하를 피하기 위해 메모리 리소스를 효과적으로 관리 할 수 ​​있습니다.