PHP 확장 Xhprof 를 사용 하여 프로젝트 성능 분석 실천
프로젝트 가 곧 출시 될 것 입 니 다.일부 도 구 를 통 해 코드 의 안정성 과 효율 을 분석 하고 싶 습 니 다.지난 팀 에서 사 용 했 던 xhprof 확장 을 생각 합 니 다.새 컴퓨터 가 바 뀌 었 기 때문에 이 확장 을 다시 컴 파일 해 야 합 니 다.현재 설치 와 실제 검사 과정 을 완전 하 게 기록 하여 자신 이 더 많은 독 자 를 돌 이 켜 보고 도 울 수 있 습 니 다.
2.조작 절차
xhprof 확장 PHP 는 자체 적 으로 가지 고 있 지 않 습 니 다.필자 가 따로 설치 해 야 설치 한 후에 사용 할 수 있 습 니 다.필 자 는 소스 코드 설치 방식 을 사용 하고 설치 과정 은 다음 과 같 습 니 다.
3.1 소스 코드 다운로드
xhprof 는 PHP 의 PECL 공식 에서 이미 오래 되 었 습 니 다.필자 의 PHP 버 전 은 PHP 7.1 이기 때문에 GitHub 에서 xhprof 의 새로운 소스 코드 를 다운로드 해 야 합 니 다.참고 명령 은 다음 과 같 습 니 다.
git clone https://github.com/longxinH/xhprof
3.2 검 측 환경
컴 파일 된 폴 더 에 들 어가 명령 을 참고 하 십시오.
cd xhprof/extension/
현재 필 자 는 원본 코드 를 컴 파일 해 야 합 니 다.컴 파일 하기 전에 phpze 를 사용 하여 PHP 의 환경 을 탐지 할 수 있 습 니 다.참고 명령 은 다음 과 같 습 니 다.
phpize
결 과 를 다음 과 같이 되 돌려 줍 니 다.
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
3.3 컴 파일 설치
Makefile 생 성,다음 컴 파일 준비
./configure
결 과 를 다음 과 같이 되 돌려 줍 니 다.
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
config.status: config.h is unchanged
컴 파일 을 시작 하고 설치 합 니 다.
make && make install
결 과 를 다음 과 같이 되 돌려 줍 니 다.
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/Cellar/[email protected]/7.1.19/pecl/20160303/
반환 정보 에서 설치 가 완료 되 었 고 확장 파일 이 저 장 된 위 치 를 볼 수 있 습 니 다.
배치
원본 코드 를 컴 파일 한 후에 필 자 는 PHP 의 설정 폴 더 와 xhprof 에 대해 간단 한 설정 을 해 야 합 니 다.작업 과정 은 다음 과 같 습 니 다.
4.1 프로필 위치 찾기
PHP 설정 을 수정 하려 면 먼저 설정 파일 이 어디 에 있 는 지 알 아야 합 니 다.여 기 는 PHP 명령 을 통 해 설정 파일 의 저장 위 치 를 볼 수 있 습 니 다.명령 은 다음 과 같 습 니 다.
php --ini
명령 을 실행 한 후 결 과 를 다음 과 같이 되 돌려 줍 니 다.
Configuration File (php.ini) Path: /usr/local/etc/php/7.1
Loaded Configuration File: /usr/local/etc/php/7.1/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d
Additional .ini files parsed: /usr/local/etc/php/7.1/conf.d/ext-opcache.ini
결 과 를 되 돌려 주 는 과정 에서 여러 프로필 의 경 로 를 볼 수 있 습 니 다.필 자 는 두 번 째 파일
php.ini
이 필요 합 니 다.확장 디 렉 터 리 저장 위 치 를 보 려 면 명령 을 참조 하 십시오.
cat /usr/local/etc/php/7.1/php.ini | grep extension_dir
결 과 를 다음 과 같이 되 돌려 줍 니 다.
extension_dir = "/usr/local/lib/php/pecl/20160303"
; extension_dir = "ext"
; Be sure to appropriately set the extension_dir directive.
;sqlite3.extension_dir =
4.2 설정 수정
되 돌아 온 결과 확 장 된 저장 디 렉 터 리 위 치 는 다음 과 같 습 니 다.
/usr/local/lib/php/pecl/20160303
방금 컴 파일 된 xhprof 확장 을 이 디 렉 터 리 에 복사 해 야 합 니 다.참조 명령 은 다음 과 같 습 니 다.
cp /usr/local/Cellar/[email protected]/7.1.19/pecl/20160303/xhprof.so /usr/local/Cellar/[email protected]/7.1.19/pecl/20160303/
vim 편집 기 를 통 해 프로필 을 편집 합 니 다.명령 은 다음 과 같 습 니 다.
vim /usr/local/etc/php/7.1/php.ini
설정 파일 끝 에 xhprof 설정 을 추가 하고 xhprof 생 성 을 저장 할 원본 파일 을 사용자 정의 합 니 다.참고 설정 은 다음 과 같 습 니 다.
[xhprof]
extension=xhprof.so
xhprof.output_dir=/data/www/xhprof/save_output_dir
4.3 재 부팅 적용
저장 한 후에 필 자 는 phop-fpm 를 다시 시작 하여 설정 을 유효 하 게 합 니 다.재 부팅 명령 은 brew 명령 을 통 해 볼 수 있 습 니 다.참조 명령 은 다음 과 같 습 니 다.
brew info [email protected]
명령 이 실 행 된 후 돌아 오 는 정보 에서 다음 과 같은 정 보 를 볼 수 있 습 니 다.
To have launchd start [email protected] now and restart at login:
brew services start [email protected]
Or, if you don't want/need a background service you can just run:
php-fpm
따라서 필자 가 구성 한 PHP-FPM 재 부팅 명령 은 다음 과 같다.
brew services restart [email protected]
재 부팅 완료 후 결 과 는 다음 과 같 습 니 다.
Stopping `[email protected]`... (might take a while)
==> Successfully stopped `[email protected]` (label: [email protected])
==> Successfully started `[email protected]` (label: [email protected])
4.4 검증 설치
현재 xhprof 확장 이 설치 되 었 는 지 검증 합 니 다.참조 명령 은 다음 과 같 습 니 다.
php -m | grep xhprof
명령 이 실 행 된 후,설치 확장 에 성공 한 반환 결 과 는 xhprof 로 표 시 됩 니 다.아래 그림 과 같 습 니 다.
테스트
위의 조작 을 통 해 필 자 는 이미 성공 적 으로 설치 하고 설정 하 였 으 며,지금 은 PHP 코드 로 xhprof 의 분석 효 과 를 검증 해 야 한다.
5.1 가상 호스트 만 들 기
먼저 가상 호스트 를 만 들 고 사용자 가 브 라 우 저 를 통 해 접근 할 수 있 도록 합 니 다.가상 호스트 를 만 들 려 면 루트 디 렉 터 리 가 필요 하고 nginx 설정 파일 을 편집 해 야 합 니 다.구체 적 인 작업 은 다음 과 같 습 니 다.
5.1.1 프로젝트 디 렉 터 리 만 들 기
프로젝트 루트 디 렉 터 리 를 만 듭 니 다.명령 은 다음 과 같 습 니 다.
mkdir -p /Users/song/mycode/work/test
생 성 에 성공 한 후 필 자 는 이전 git 에서 내 린 일부 코드 를 프로젝트 루트 디 렉 터 리 에 복사 해 야 합 니 다.참조 명령 은 다음 과 같 습 니 다.
cp -r xhprof/xhprof_html /Users/song/mycode/work/test/
cp -r xhprof/xhprof_lib /Users/song/mycode/work/test/
5.1.2 프로필 편집
프로필 추가,명령 참조
/usr/local/etc/nginx/nginx.conf
프로필 추가
server {
listen 80;
server_name test.localhost;
root /Users/song/mycode/work/test;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
/etc/hosts
파일 에 분석 기록 을 추가 하고 기록 내용 은 다음 과 같 습 니 다.127.0.0.1 test.localhost
5.2 새 테스트 코드
git 창고
examples
폴 더 에 demo 코드 가 있 습 니 다.그러나 이 코드 의 주석 은 모두 영어 이 고 조판 방식 도 필자 가 이해 하기 어렵 기 때문에 필 자 는 이 파일 을 다시 편집 하 였 습 니 다.참고 절 차 는 다음 과 같 습 니 다.vim 으로 새 PHP 파일 만 들 기
vim /Users/song/mycode/work/test/test.php
파일 에 다음 코드 를 추가 합 니 다.
save_run($xhprof_data, "xhprof_foo");
echo "
http://test.localhost/xhprof/xhprof_html/index.php?run=$run_id&source=xhprof_foo
";
코드 를 저장 한 후 브 라 우 저 를 통 해 해당 URL 주 소 를 방문 합 니 다.URL 주 소 는 다음 과 같 습 니 다.
http://test.localhost/xhprof/test.php
5.3 결과 분석
실행 후 결 과 는 다음 과 같다.
페이지 에서 URL 주 소 를 볼 수 있 습 니 다.이 URL 주 소 를 복사 하고 열 면 이 코드 의 분석 결 과 를 볼 수 있 습 니 다.아래 그림 과 같 습 니 다.
페이지 에 하나의 목록 이 있 는데 모든 방법 이 소모 하 는 시간 을 보 여 줍 니 다.목록 의 방식 이 뚜렷 하지 않다 고 생각 되면 페이지 에 있 는
View Full Callgraph
링크 를 클릭 하면 그림 을 직접 생 성 할 수 있 습 니 다.아래 그림 과 같 습 니 다.그림 에서 집행 시간 이 모두 test 방법 에 소모 되 는 것 을 뚜렷하게 볼 수 있 기 때문에 필 자 는 이 방법 에 대해 맞 춤 형 최적화 를 할 수 있다.
저자:탕 청송
songboy 8888
날짜:2018-08-27
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.