MongoDB 또는 PDO 데이터베이스에 결과를 저장할 수 있는 XHProf 프로파일링 데이터용 그래픽 인터페이스입니다.
애플리케이션이 프로파일링되고 프로파일링 데이터가 XHGui로 전송됩니다. XHGui는 해당 정보를 가져와 MongoDB(또는 PDO 데이터베이스)에 저장하고 작업에 편리한 GUI를 제공합니다.
이 프로젝트는 프로파일링 결과를 표시하고, 애플리케이션을 프로파일링하고, 특정 최소 라이브러리를 사용하기 위한 GUI입니다.
XHGui에는 다음과 같은 요구 사항이 있습니다.
사용할 백엔드를 결정해야 하는 경우 호환성 매트릭스에서 백엔드별로 구현되거나 누락된 기능을 확인할 수 있습니다.
기본 설치에서는 MongoDB 데이터베이스를 사용합니다. 대부분의 문서는 MongoDB에 대해 설명합니다.
pecl install mongodb
XHGui에는 버전 1.3.0 이상이 필요합니다.모든 드라이버 및 관련 데이터베이스:
참고: PDO는 XHGui의 모든 기능을 지원하지 않을 수 있습니다. #320을 참조하세요.
GitHub에서 xhgui
복제하거나 다운로드하세요.
웹서버가 webroot
디렉터리를 가리키도록 하세요.
웹 서버가 파일을 생성할 수 있도록 cache
디렉터리에 대한 권한을 설정합니다. 게으른 경우 0777
작동합니다.
다음 명령은 cache
디렉터리에 대한 권한을 변경합니다.
chmod -R 0777 cache
MongoDB 인스턴스를 시작합니다. XHGui는 MongoDB 인스턴스를 사용하여 프로파일링 데이터를 저장합니다.
MongoDB 설정이 인증을 사용하거나 기본 포트 및 로컬 호스트에서 실행되지 않는 경우 XHGui가 mongod
인스턴스에 연결할 수 있도록 XHGui의 config/config.php
업데이트하세요.
( 선택사항 이지만 권장됨) 성능을 향상하려면 MongoDB에 인덱스를 추가하세요.
XHGui는 MongoDB의 xhprof
데이터베이스에 있는 results
컬렉션에 프로파일링 정보를 저장합니다. 색인을 추가하면 성능이 향상되어 페이지를 더 빠르게 탐색할 수 있습니다.
인덱스를 추가하려면 명령 프롬프트에서 mongo
셸을 엽니다. 그런 다음 MongoDB의 db.collection.ensureIndex()
메서드를 사용하여 다음과 같이 인덱스를 추가합니다.
$ mongo
> use xhprof
> db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } )
> db.results.ensureIndex( { 'profile.main().wt' : -1 } )
> db.results.ensureIndex( { 'profile.main().mu' : -1 } )
> db.results.ensureIndex( { 'profile.main().cpu' : -1 } )
> db.results.ensureIndex( { 'meta.url' : 1 } )
> db.results.ensureIndex( { 'meta.simple_url' : 1 } )
> db.results.ensureIndex( { 'meta.SERVER.SERVER_NAME' : 1 } )
작곡가를 사용하여 종속성 설치
composer install --no-dev
웹서버를 설정하세요. 아래 구성 섹션에서는 nginx와 Apache 모두에 대한 다시 쓰기 규칙을 설정하는 방법을 설명합니다.
이 설정에서는 docker-compose를 사용하여 docker 컨테이너를 조정합니다.
GitHub에서 xhgui
복제하거나 다운로드하세요.
컨테이너 시작: docker-compose up -d
http://xhgui.127.0.0.1.xip.io:8142 또는 http://localhost:8142에서 브라우저를 열거나 터미널 composer open
에 입력하세요.
xhgui를 사용자 정의하려면 config/config.default.php
config/config.php
에 복사하고 해당 파일을 편집하세요.
docker-compose를 사용자 지정하려면 docker-compose.yml
docker-compose.override.yml
에 복사하고 해당 파일을 편집합니다.
XHGui는 URL 재작성을 활성화하는 것을 선호하지만 이 기능 없이도 작동합니다. Apache의 경우 다음을 수행하여 URL 재작성을 활성화할 수 있습니다.
.htaccess 재정의가 허용되고 AllowOverride에 올바른 DocumentRoot에 대해 FileInfo 지시어가 설정되어 있는지 확인하세요.
Apache 2.4의 구성 예:
< Directory /var/www/xhgui/>
Options Indexes FollowSymLinks
AllowOverride FileInfo
Require all granted
</ Directory >
mod_rewrite를 올바르게 로드하고 있는지 확인하세요. 다음과 같은 내용이 표시됩니다.
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
XHGui에는 나머지 다시 쓰기 규칙을 활성화하는 .htaccess
파일이 함께 제공됩니다.
nginx 및 fast-cgi의 경우 다음 스니펫을 시작으로 사용할 수 있습니다.
server {
listen 80 ;
server_name example.com;
# root directive should be global
root /var/www/example.com/public/xhgui/webroot/;
index index.php;
location / {
try_files $uri $uri / /index.php? $args ;
}
location ~ .php$ {
try_files $uri =404 ;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
}
}
애플리케이션을 프로파일링하는 지원되는 방법은 perftools/php-profiler 패키지를 사용하는 것입니다.
해당 패키지를 사용하여 웹 애플리케이션이나 CLI 스크립트에서 데이터를 수집할 수 있습니다.
그런 다음 이 데이터는 XHGui 애플리케이션으로 볼 수 있는 XHGui 데이터베이스로 푸시됩니다.
php-profiler
패키지는 요청이 끝날 때 프로파일링이 완료되면 XHGui 인스턴스에 직접 데이터를 제출하는 기능을 제공합니다.
애플리케이션이 XHGui 인스턴스에 직접 연결할 수 없는 경우 패키지는 나중에 가져오기 스크립트를 사용하여 가져올 수 있는 파일에 프로파일링 데이터를 캡처하는 솔루션을 제공합니다.
경고 : 동일한 파일을 두 번 가져오면 중복 프로필이 생성됩니다.
디스크 사용량은 특히 대규모 코드 기반이 있거나 대규모 프레임워크를 사용하는 애플리케이션을 프로파일링할 때 빠르게 증가할 수 있습니다.
증가를 억제하려면 TTL 인덱스를 생성하여 프로파일링 문서가 특정 기간에 도달하면 자동으로 삭제하도록 MongoDB를 구성하세요.
최대 프로필 문서 수명을 초 단위로 결정합니다. 프로덕션(선택한 문서만 프로필하는 경우)보다 개발(모든 것을 프로필하는 경우)에서 더 낮은 값을 선택할 수 있습니다. 다음 명령은 Mongo에게 5일(432000초)이 지난 문서를 삭제하도록 지시합니다.
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
XHGui의 폭포수 표시의 목표는 동시 요청이 서로 영향을 미칠 수 있다는 것을 인식하는 것입니다. 동시 데이터베이스 요청, CPU 집약적 활동, 심지어 세션 파일 잠금도 관련성이 있을 수 있습니다. Ajax가 많은 애플리케이션에서는 페이지 빌드를 이해하는 것이 단일 로드보다 훨씬 더 복잡합니다. 폭포수가 도움이 되기를 바랍니다. 요청 샘플만 프로파일링하는 경우 폭포수가 무례한 거짓말로 가득 차게 된다는 점을 기억하세요.
일부 참고사항:
request_ts_micro
값의 저장이 도입되었습니다. 서비스 상태 모니터링에 적합한 Prometheus 측정항목은 /metrics
에 노출됩니다. (현재는 PDO를 저장용으로 사용하는 경우에만 작동합니다.)
특징 | 몽고DB | PDO |
---|---|---|
프로메테우스 수출업자 | #305 | |
검색자::최신() | ||
검색자::쿼리() | #384 | |
검색자::get() | ||
검색자::getForUrl() | #436 | |
검색자::getPercentileForUrl() | #436 | |
검색자::getAvgsForUrl() | #384 | |
검색자::getAll(정렬) | #436 | |
검색자::getAll(방향) | #436 | |
검색자::삭제() | ||
검색자::truncate() | ||
검색자::saveWatch() | #435 | |
검색자::getAllWatches() | #435 | |
검색자::truncateWatches() | #435 | |
검색자::통계() | #305 | |
검색자::getAllServerNames() | #460 |
변경 로그 및 릴리스 정보는 릴리스를 참조하세요.
저작권 (c) 2013 Mark Story 및 Paul Reinheimer
본 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람에게 다음 조건에 따라 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.