문제

여기에 내 첫 번째 질문에 그래서.

나는 내부 응용 프로그램 내 회사는 나는 최근에 요청을 유지합니다.응용 프로그램에 내장되어 PHP 와 상당히 잘 코딩(OO,DB 추상화,스마티)아무것도네 틱.

문제 응용 프로그램 매우 느리.

어떻게 내가 찾는 것에 대해 무엇을 둔 응용 프로그램을까?나는 최적화된 코드를 매우 몇 가지 DB 쿼리,그래서 나는 것을 알고 있 PHP 코드를 복용하는 동안 실행됩니다.가 몇 가지 도구를 더욱 쉽게 확인할 수 있게 되었습니다 이고요 전략을 고안하는 검사를 위한 나의 코드입니다.

내가 할 수 있는 검사/작업 전략,자신만이 많이 필요해 PHP 도구는 내 응용 프로그램은 엿니다.

생각?

도움이 되었습니까?

해결책

XDebug 프로파일링 최근에는 유사한 상황입니다.그것은 출력의 전체 프로필 보고서는 읽을 수 있습으로 많은 일반적인 응용 프로그램 프로파일링(수 없는 목록을 줄지만,그와 함께 제공되는 것을 slackware).

다른 팁

로 Juan 언급 xDebug 이 우수합니다.는 경우 윈도우에서, WinCacheGrind 은 당신이 찾을 통해 보고합니다.

이 프리젠테이션에 의해 라스무스 Lerdorf 어(PHP).그는 몇 가지 좋은 예를 테스트 PHP 속도 그리고 무엇을 찾기 위해뿐만 아니라 어떤 내부 감속할 수 있는 것이다.XDebug 은 하나의 도구가 그를 사용합니다.그는 또한 매우 단단점에 대해 알면 성능 비용으로 얻고 있으로 프레임워크.

비디오:http://www.archive.org/details/simple_is_hard

슬라이드(때문에 그것을보십시오에 비디오):http://talks.php.net/show/drupal08/1

많은 변수에 영향을 미칠 수 있는 응용 프로그램의 성능을 제공합니다.나는 당신이하지 않는 것이 좋습니다 가 즉시 PHP 문제입니다.

첫째,당신은 어떻게 봉사 PHP?당신은 시도 기본적인 최적화의 아파치 또는 IIS 까?서버가 다른 종류의 요청이 있으십니까?당신은 당신의 장점 PHP 의 코드를 가속기?방법 중 하나는지 여부를 테스트하는 서버가 귀하의 병목현상을 응용 프로그램을 실행해 보십시오에는 또 다른 서버입니다.

두 번째,은 성능의 전체 응용 프로그램을 느리게,또는 그것만에 영향을 미치는 것으로 보이 특정 페이지?이를 줄 수 있는 표시의 시작 위치를 분석하는 성능이다.는 경우 전체 응용 프로그램의 속도가 느려지,문제의 근본적인 서버/플래트홈 또는 글로벌 SQL 쿼리 부분의 모든 요구(사용자 인증,예를 들어).

셋째,당신이 언급한 수를 최소화하의 SQL 쿼리에 대해 무엇을 최적화하는 기존의 쿼리가?를 사용하는 경우 MySQL,당신은 당신의 활용한 다양한 각각의 장점을 모두 활용 스토리지 시스템?당신은 실행 설명 에서 가장 중요한 쿼리를 수 있는지 확인하기 위해 제대로 인덱싱?이것은 중요에 액세스하는 쿼리 큰 테이블큰 집합,더 당신이 통지의 효과를 불쌍한 색인.다행히도,많은 기사 이와 같은 는 설명하는 방법을 사용하여 설명하고 있습니다.

넷째,일반적인 실수를 추정하는 데이터베이스 서버가 자동으로는 모든 자원을 이용하여 시스템에 사용할 수 있습니다.당신이해야하는지 확인을 명시적으로 할당하기에 충분한 리소스의 데이터베이스 응용 프로그램.에서 MySQL,예를 들어,당신을 추가하려는 사용자 설정(에 my.cnf 파일)같은 것들에 대한 열쇠 버퍼 임시 테이블 크기,쓰레드 동시성 innodb buffer pool size,etc.

당신확인의 모든 위고는 아직도 할 수 없을 찾기 위해 병목 현상,코드 프로파일러는 다음과 같 Xdebug 은 확실히 도움이 될 수 있습니다.개인적으로 선호하 젠드 스튜디오 프로파일러,하지만 최선의 선택이 될지 않는 한 당신은 당신의 나머지의 젠드 플랫폼 스택입니다.그러나 내 경험에서 그것은 매우 드문 PHP 자신의 근본 원인 성능이 저하될 수 있습니다.종종 코드 프로파일러 결정할 수 있도록 도울 수 있으로 더 많은 정밀도는 DB 쿼리를 비난하는 것입니다.

phpED(http://www.nusphere.com/products/phped.htm 아)또한 제공하는 디버깅 및 프로파일링,그리고 능력을 추가 시계,중단점 등에서 PHP 코드입니다.통합 프로파일을 직접 시간을 제공합의 고장 각 함수 호출하고 클래스 메소드 내에서 IDE 입니다.브라우저 플러그인을 사용하도록 설정한 빠른 통합과 함께 파이어 폭스 또는 IE(i.e방문하는 느린 URL 은 브라우저,다음 버튼을 클릭하여 프로필 또는 디버그).

그것은 매우 유용한 지 응용 프로그램은 느린에 집중하기 위해 대부분의 노력을 코딩;고 방지 시간을 낭비하는 최적화 이미 빠른 코드입니다.을 시도하는 데 젠드 및 Eclipse,내가 지금에 판매되었의 사용의 용이성 phpED.

곰을 마음에 두 Xdebug 및 phpED(을 가진 이 프로그램)의 필요 여분 PHP 모듈은 설치 디버깅할 때에 webserver.phpED 또한 제공합(보여 me)로컬 디버깅 옵션을 너무입니다.

Xdebug 프로파일은 확실히 갈 수있는 방법입니다.또 다른 팁-WincacheGrind 는 좋지만,업데이트되었습니다. http://code.google.com/p/webgrind/ -브라우저에서 수 있는 쉽고 빠른 대안이다.

기회는 하지만,그것은 여전히 어쨌든 데이터베이스.체크에 대한 관련 인덱스-고 있는 충분 캐시 메모리를 많이 일으로 데이터 가능합니다.

또한 사용할 수 있습니 APD (고급 PHP 디버거).

그것은 아주 쉽게 작동합니다.

$ php apd-test.php

$ pprofp -l pprof.SOME_PID

Trace for /Users/martin/develop/php/apd-test/apd-test.php
Total Elapsed Time = 0.12
Total System Time  = 0.01
Total User Time    = 0.07


         Real         User        System             secs/    cumm
%Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
--------------------------------------------------------------------------------------
71.3 0.06 0.06  0.05 0.05  0.01 0.01  10000  0.0000   0.0000            0 in_array
27.3 0.02 0.09  0.02 0.07  0.00 0.01  10000  0.0000   0.0000            0 my_test_function
 1.5 0.03 0.03  0.00 0.00  0.00 0.00      1  0.0000   0.0000            0 apd_set_pprof_trace
 0.0 0.00 0.12  0.00 0.07  0.00 0.01      1  0.0000   0.0000            0 main

가 좋은 튜토리얼을 컴파일하는 방법 APD 과 프로파일링으로 그것: http://martinsikora.com/compiling-apd-for-php-54

ifs 그것의 큰 코드 베이스 시 apc 시되지 않은 경우.

http://pecl.php.net/package/APC

할 수 있도를 사용하 register_tick_function 기능 in php.를 알려줍니다 php 호출하는 특정 기능 periodcally 을 통해 귀하의 코드입니다.할 수 있음을 추적하는 기능에 현재 실행 중인 사이의 시간을 호출합니다.다음 당신이 볼 수있는 무엇인의 대부분의 시간입니다.http://www.php.net/register_tick_function

우리가 사용하 젠 개발 환경(윈도우).우리가 해결되는 메모리 사용량이 스파이크 어제를 단계별로 진행하여 디버거를 실행하는 동안 프로세스 탐험을 시청 메모리/cpu/디스크 작업으로 각 라인이 실행되었습니다.

프로세스 탐색기: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx.

ZDE 포함한 기본적인 성능 프로파일을 표시할 수 있는 시간에는 각 함수 호출 중에 페이지를 요청합니다.

내가 사용하의 조합 배 벤치 마크log4php.

에서 최고의 스크립트하고 싶어 프로파일을 생성하는 개체를 감싸 Benchmark_Timer 체입니다.코드를 통해,나는 추가 $object->setMarker("name");전화,특히 주위의 의심 코드입니다.

래퍼 클래스 메소드를 파괴하는 것은 로깅 정보를 기록하 log4php.나는 일반적으로 이를 syslog(많은 서버를 집계하여 중 하나 로그 파일을 한 서버에서).

디버그,내가 볼 수있는 로그 파일을 참조하고 향상시킬 것이다.에서 나중에 생산,저는 구문 분석할 수 있습 로그 파일과 성능을 분석합니다.

그것은 xdebug,그러나 그것은 항상 그리고 나에게는 능력과 비교하려면 두 가지의 실행 코드입니다.

할 수 있습 또한 볼 HA 프록시 또 다른 부하 분산 솔루션의 경우 서버 성능 저하의 원인이 응용 프로그램을 느리게 처리합니다.서버입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top