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.out
KCachegrind로 파일하다
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는 기존 브라우저 세션에 다음과 같은 새 창을 만듭니다.
Xhprof + Xhgui (CPU와 메모리 양쪽 프로파일링에 최적)
Xhprof 및 Xhgui를 사용하면 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가 메모리 문제를 추적하는 데 도움이 되었습니다.
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
'itsource' 카테고리의 다른 글
PHP가 777 권한을 가진 디렉토리를 만들 수 없는 이유는 무엇입니까? (0) | 2022.12.24 |
---|---|
함수가 정의되어 있는 장소를 확인하는 방법 (0) | 2022.12.04 |
node.js에 사용할 수 있는 MySQL 드라이버는 무엇입니까? (0) | 2022.12.04 |
PHP-FPM 및 Nginx: 502 불량 게이트웨이 (0) | 2022.12.04 |
프래그먼트 안에 소프트 키보드를 숨기는 방법 (0) | 2022.12.04 |