itsource

PHP 메모리 프로파일링

mycopycode 2022. 12. 4. 22:38
반응형

PHP 메모리 프로파일링

PHP 페이지의 메모리 사용량을 프로파일링하는 좋은 방법은 무엇입니까?예를 들어, 데이터가 얼마나 메모리를 사용하고 있는지, 어떤 함수 호출이 가장 많은 메모리를 할당하고 있는지 확인할 수 있습니다.

  • xdebug는 프로파일링 기능에 메모리 정보를 제공하지 않는 것 같습니다.

  • xdebug는 트레이스 기능으로 제공합니다.이 기능은 모든 함수 호출에 대한 메모리 델타를 표시하기 때문에 데이터 양이 엄청나다는 점을 제외하면 원하는 수준에 매우 근접합니다.GUI 툴을 사용하여 콜을 특정 깊이 이하로 숨길 수 있으면 문제가 해결됩니다.

다른 건 없나요?

아시다시피 Xdebug는 2.* 버전 이후 메모리 프로파일링 지원을 중단했습니다.http://www.xdebug.org/updates.php 에서 "functions" 문자열을 검색하십시오.

기능 삭제

메모리 프로파일링이 올바르게 동작하지 않기 때문에, 서포트 해제.

그래서 다른 도구를 써봤는데 잘 작동했어요.

https://github.com/arnaud-lb/php-memory-profiler

Ubuntu 서버에서 이 기능을 활성화하기 위해 다음과 같이 했습니다.

sudo apt-get install libjudy-dev libjudydebian1
sudo pecl install memprof
echo "extension=memprof.so" > /etc/php5/mods-available/memprof.ini
sudo php5enmod memprof
service apache2 restart

그리고 내 코드로:

<?php

memprof_enable();

// do your stuff

memprof_dump_callgrind(fopen("/tmp/callgrind.out", "w"));

으로 '열다'를 .callgrind.outKCachegrind로 파일하다

Google gperftools 사용(권장)

먼저 여기서 최신 패키지를 다운로드하여 Google gperftools를 설치합니다.https://code.google.com/p/gperftools/

그럼 항상 그렇듯이:

sudo apt-get update
sudo apt-get install libunwind-dev -y
./configure
make
make install

이제 코드 입력:

memprof_enable();

// do your magic

memprof_dump_pprof(fopen("/tmp/profile.heap", "w"));

그런 다음 터미널을 열고 다음을 실행합니다.

pprof --web /tmp/profile.heap

pprof는 기존 브라우저 세션에 다음과 같은 새 창을 만듭니다.

memprof 및 gperftools를 사용한 PHP 메모리 프로파일링

Xhprof + Xhgui (CPU와 메모리 양쪽 프로파일링에 최적)

XhprofXhgui를 사용하면 CPU 사용률도 프로파일링할 수 있습니다.또한 현재 문제가 있다면 메모리 사용률만 프로파일링할 수 있습니다.이 솔루션은 매우 완벽한 솔루션으로, 완전한 제어를 제공하며 로그는 mongo 또는 파일 시스템에 모두 쓸 수 있습니다.

상세한 것에 대하여는, 이쪽의 회답을 참조해 주세요.

블랙파이어

Blackfire는 SensioLabs의 PHP 프로파일러로 Symfony2 guys https://blackfire.io/

pupphpet을 사용하여 가상 머신을 셋업하는 경우 지원되는 가상 머신이 있으면 매우 편리합니다;-)

음, 이것이 당신이 찾고 있는 것은 아닐지 모르지만, PHP에는 메모리 사용량을 출력하는 몇 가지 기능이 내장되어 있습니다.함수 호출이 사용하고 있는 메모리의 양을 확인하는 경우 호출 전후로 memory_get_peak_usage()를 사용하여 차분을 취할 수 있습니다.

매우 유사한 memory_get_usage()를 사용하여 데이터에 대해 동일한 기술을 사용합니다.

꽤 세련되지 않은 접근법이지만 코드를 빠르게 확인할 수 있는 방법입니다.xdebug mem delta가 너무 장황해서 도움이 되지 않을 수 있다는 것에 동의합니다.그래서 저는 종종 그것을 코드의 한 부분으로 좁혀서 작은 조각의 특정 메모리 사용량을 수동으로 버립니다.

Xdebug는 2.6(2018-01-29)에서 메모리 트레이스를 재실장하여 Qcachegrind 또는 유사한 툴에서 사용할 수 있습니다.메모리 옵션을 선택하기만 하면 됩니다.

문서에서:

Xdebug 2.6 이후 프로파일러는 메모리 사용량 및 메모리 사용량을 증가시킨 기능 aGnd 메서드에 대한 정보도 수집합니다.

파일 형식은 잘 모르지만 Qcachegrind가 메모리 문제를 추적하는 데 도움이 되었습니다.

qcachegrind 시료

http://geek.michaelgrace.org/2012/04/tracing-php-memory-usage-using-xdebug-and-mamp-on-mac/

Mac을 사용하고 있기 때문에 Windows를 사용하는 경우 테스트해야 하지만, 저는 이 방법이 좋습니다.

trace-file-analyzer.php 파일을 수정하여 php 바이너리에 경로를 추가하여 터미널에서 일반 unix 스크립트로 호출할 수 있도록 하였습니다.

#!/Applications/MAMP/bin/php5.3/bin/php
<?php
if ( $argc <= 1 || $argc > 4 )
{

이 파일을 755로 변경하는 것을 잊지 마세요.

메모리 프로파일파일(*.xt)을 작성할 때마다 자동으로 스크립트를 호출하는 루비 워치 스크립트를 쉽게 작성할 수 있습니다.이렇게 하면 명령을 반복해서 실행할 필요 없이 개선 사항을 테스트하고 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/880458/php-memory-profiling

반응형