백엔드 개발 PHP 튜토리얼 XHProf 및 XHGui를 사용하여 Linux system_php 기술에서 PHP 실행 성능을 분석합니다.

XHProf 및 XHGui를 사용하여 Linux system_php 기술에서 PHP 실행 성능을 분석합니다.

May 16, 2016 pm 08:03 PM
php 성능

성과분석이란?
성능 분석은 코드 수준에서 애플리케이션의 상대적 성능을 측정합니다. 성능 분석에서 캡처하는 이벤트에는 CPU 사용량, 메모리 사용량, 함수 호출 기간 및 횟수, 호출 그래프가 포함됩니다. 프로파일링 동작은 애플리케이션 성능에도 영향을 미칩니다.
성능 분석은 언제 수행해야 합니까?
성능 분석 수행 여부를 고려할 때 먼저 다음 사항을 질문해야 합니다. 애플리케이션에 성능 문제가 있습니까? 그렇다면 다음 사항을 추가로 고려해야 합니다. 문제가 얼마나 큰가요?

이렇게 하지 않으면 성급하게 최적화하는 함정에 빠지게 되어 시간을 낭비하게 될 수 있습니다.

애플리케이션에 성능 문제가 있는지 확인하려면 성능 목표를 결정해야 합니다. 예를 들어 동시 사용자 100명의 응답 시간은 1초 미만입니다. 그런 다음 벤치마크를 통해 이 목표를 달성했는지 확인해야 합니다. 일반적인 실수는 개발 환경에서 벤치마킹을 수행하는 것입니다. 실제로 프로덕션 환경에서 벤치마킹을 해야 합니다. (실제 생산환경 또는 시뮬레이션 생산환경, 후자는 SaaS에서 쉽게 구현 가능합니다.
ab, siege, JMeter 등 벤치마킹용 제품이 많이 있습니다. 저는 개인적으로 JMeter의 기능 세트를 선호하지만 ab와 siege가 사용하기 더 쉽습니다.

애플리케이션에 성능 문제가 있다고 판단되면 성능을 분석하고 개선 사항을 구현한 다음 다시 벤치마킹하여 문제가 해결되었는지 확인해야 합니다. 모든 변경 후에는 이를 벤치마킹하여 효과를 확인해야 합니다. 변경 사항을 많이 적용하고 애플리케이션 성능이 저하되는 것을 발견하면 어떤 변경 사항이 문제를 일으켰는지 정확히 찾아낼 수 없습니다.

다음 그림은 제가 정의한 Performance Life Cycle입니다.

2015128164631254.png (1808×1620)

성능 저하의 일반적인 원인
성능 저하의 일반적인 원인 중 일부는 매우 놀랍습니다. PHP와 같은 고급 언어를 사용하더라도 코드 품질이 문제의 원인이 되는 경우는 거의 없습니다. 오늘날의 하드웨어 구성에서는 CPU가 성능 제한의 원인이 되는 경우가 거의 없습니다. 일반적인 이유는 다음과 같습니다.

데이터 저장

  • 포스트그레SQL
  • MySQL
  • 오라클
  • MSSQL
  • 몽고DB
  • 리악
  • 카산드라
  • 멤캐시
  • 카우치DB
  • 레디스

외부 리소스

  • API
  • 파일 시스템
  • 네트워크 인터페이스
  • 외부 프로세스
  • 잘못된 코드

어떤 성능 분석기를 선택해야 할까요?
PHP에는 활성 프로파일러와 수동 프로파일러라는 두 가지 프로파일러가 있습니다.

액티브 VS 패시브 성능 분석
활성 분석기는 개발 중에 사용되며 개발자가 활성화합니다. 능동 분석기는 수동 분석기보다 더 많은 정보를 수집하며 성능에 더 큰 영향을 미칩니다. 일반적으로 활성 분석기는 프로덕션 환경에서 사용할 수 없습니다. XDebug는 활성 분석기입니다.

생산 환경에서는 능동 분석기를 사용할 수 없기 때문에 Facebook은 수동 분석기인 XHProf를 출시했습니다. XHPrf는 프로덕션 환경에서 사용하도록 제작되었습니다. 성능 문제를 진단하기 위한 충분한 정보를 수집하는 동시에 성능에 미치는 영향은 최소화됩니다. XHProf와 OneAPM은 모두 패시브 프로파일러입니다.

일반적으로 XDebug에서 수집한 추가 정보는 일반적인 성능 문제 분석에 필요하지 않습니다. 이는 개발 환경에서도 지속적인 성능 분석을 위해 패시브 프로파일러가 더 나은 선택임을 의미합니다.

XHProf XHGui
XHProf는 Facebook에서 개발했으며 성능 데이터를 보기 위한 기본 사용자 인터페이스를 포함합니다. 또한 Paul Reinheimer는 성능 데이터를 보고, 비교하고, 분석하기 위한 XHGui와 향상된 사용자 인터페이스(UI)를 개발했습니다.

설치
XHProf 설치
XHProf는 PECL을 통해 설치할 수 있습니다. 다음 단계를 따르세요.

$ pecl install xhprof-beta
로그인 후 복사

pecl 명령은 php.ini 설정을 자동으로 업데이트하려고 시도합니다. pecl이 업데이트하려는 파일은 다음을 사용하여 찾을 수 있습니다:

$ pecl config-get php_ini
로그인 후 복사

지정된 파일(있는 경우) 상단에 새 구성 줄을 추가합니다. 좀 더 적합한 위치로 옮기고 싶을 수도 있습니다.

확장을 컴파일한 후에는 활성화해야 합니다. 이렇게 하려면 PHP INI 파일에 다음 코드를 추가해야 합니다.

[xhprof]
extension=xhprof.so 
로그인 후 복사

이후에는 XHGui를 이용하여 성능 분석 및 점검을 쉽게 수행할 수 있습니다.

XHGui 설치
XHGui를 설치하려면 git에서 직접 가져와야 합니다. 프로젝트는 github(https://github.com/perftools/xhgui

)에서 찾을 수 있습니다.

XHGui 요구 사항:

  • PHP 5.3
  • 내선/몽고
  • 작곡가
  • MongoDB(데이터 수집만 필요한 경우 선택, 데이터 분석이 필요한 경우 필수)

먼저 프로젝트를 원하는 위치에 복제하세요. Debian 기반 Linux 시스템(예: Ubuntu 등)에서는 /var/www일 수 있습니다. Mac OS X에서는 /Library/WebServer/Documents일 수 있습니다.

$ cd /var/www
$ git clone https://github.com/perftools/xhgui.git
$ cd xhgui
$ php install.php
로그인 후 복사

最后一个命令是运行 composer 以安装依赖并检查 XHGui 缓存目录的权限。如果失败,你可以手动运行 composer install。

下一步,你可能需要创建配置文件。这一步很容易实现,可以使用在 /path/to/XHGui/config/config.default.php 下的默认配置文件。

如果你在本地运行 MongoDB,没有身份验证,则可能不需要这样做。因为它将回退为默认值。而在多服务器环境中,你会需要一个所有服务器都能进行存储的远程 MongoDB 服务器,并进行恰当的配置。

为提高 MongoDB 的性能,你可以运行以下指令以添加索引:

$ 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 } ) 
로그인 후 복사

其他配置
如果你不想在生产环境中安装 mongo ,或无法让 Web 服务器访问 mongo 服务器,您可以将性能分析数据保存在磁盘中,再导入到本地 MongoDB 供以后分析。

为此,请在 config.php 中进行以下修改:

<&#63;php 
'save.handler' = 'file', 
'save.handler.filename' => '/path/to/xhgui/xhprof-' .uniqid("", true). '.dat', 
&#63;>
로그인 후 복사

改变文件中的 save.handler,然后取消批注 save.handler.filename ,为其赋一个恰当的值。

注意:默认每天只保存一个分析文件。

一旦分析数据的准备就绪,你就可以使用 XHGui 附带的脚本导入之:

$php /path/to/xhgui/external/import.php /path/to/file.dat
로그인 후 복사

在此之后的步骤都相同。

运行 XHGui
XHGui 是以 PHP 为基础的 Web 应用程序,你可以以 /path/to/xhgui/webroot 为根文件,设置一个标准的虚拟主机。

或者,你可以简单地使用 PHP 5.4+ cli-server 例如:

$ cd /path/to/xhgui
$ php -S 0:8080 -t webroot/

로그인 후 복사
这将使 XHGui 在所有网络接口都可通过 8080 端口进行通信。

运行性能分析器
运行分析器时,你需要在待分析的所有页面包含 external/header.php 脚本。为此,你可以在 PHP ini 文件设置 auto_prepend_file 。你既可以直接在公共 INI 文件进行设置,也可以限制到单一的虚拟主机。

对于 Apache 服务器,添加以下代码:

php_admin_value auto_prepend_file "/path/to/xhgui/external/header.php"
로그인 후 복사

对于 Nginx 服务器,在服务器配置中添加以下代码:

fastcgi_param PHP_VALUE "auto_prepend_file=/path/to/xhgui/external/header.php";
로그인 후 복사

如果您使用 PHP 5.4+ cli-server(PHP -S),则必须通过命令行标记进行设置:

$ php -S 0:8080 -dauto_prepend_file=/path/to/xhgui/external/header.php
로그인 후 복사

默认情况下,分析器运行时只分析(大约) 1% 的请求。这是由以下 external/header.php 代码控制的:

<&#63;php 
if (rand(0, 100) !== 42) { 
  return;
}
&#63;>
로그인 후 복사

如果你想分析每一个请求(例如,在开发阶段),你可以将这段代码注释掉。如果你想让分析 10% 的请求,你可以做如下改动:

<&#63;php
if (rand(0, 10) !== 4) {
  return;
}
&#63;>
로그인 후 복사

这允许你对一小部分用户请求进行分析,而不过多影响单个用户或太多用户。

如果你想在性能分析时进行手动控制,你可以这样做:

<&#63;php 
if (!isset($_REQUEST['A9v3XUsnKX3aEiNsUDZzV']) && !isset($_COOKIE['A9v3XUsnKX3aEiNsUDZzV'])) { 
 return;
} else {
 // Remove trace of the special variable from REQUEST_URI
 $_SERVER['REQUEST_URI'] = str_replace(array('&#63;A9v3XUsnKX3aEiNsUDZzV', '&A9v3XUsnKX3aEiNsUDZzV'), '', $_SERVER['REQUEST_URI']);
 setcookie('A9v3XUsnKX3aEiNsUDZzV', 1);
}
if (isset($_REQUEST['no-A9v3XUsnKX3aEiNsUDZzV'])) { 
 setcookie('A9v3XUsnKX3aEiNsUDZzV', 0, time() - 86400);
 return;
}
&#63;>
로그인 후 복사

这段代码会检查一个随机命名的 GET/POST/COOKIE 变量(在此例中为:A9v3XUsnKX3aEiNsUDZzV),同时创建一个同名的 Cookie ,用于分析该请求的整个过程,例如:表单提交后的重定向,Ajax 请求等等。

此外,它允许一个名为 no-A9v3XUsnKX3aEiNsUDZzV 的 GET/POST 变量来删除 Cookie ,停止分析。

当然,我们欢迎大家尝试使用 OneAPM 来为您的 PHP 和 Java 应用做免费的性能分析。OneAPM 独有的探针能够深入到所有 PHP 和 Java 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。 OneAPM 可以追溯到性能表现差的 SQL 语句 Traces 记录、性能表现差的第三方 API、Web 服务、Cache 等等。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

이전에 몰랐던 후회되는 PHP 함수 7가지 이전에 몰랐던 후회되는 PHP 함수 7가지 Nov 13, 2024 am 09:42 AM

숙련된 PHP 개발자라면 이미 그런 일을 해왔다는 느낌을 받을 것입니다. 귀하는 상당한 수의 애플리케이션을 개발하고, 수백만 줄의 코드를 디버깅하고, 여러 스크립트를 수정하여 작업을 수행했습니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. Apr 05, 2025 am 12:04 AM

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? Feb 07, 2025 am 11:57 AM

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

문자열로 모음을 계산하는 PHP 프로그램 문자열로 모음을 계산하는 PHP 프로그램 Feb 07, 2025 pm 12:12 PM

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). Apr 03, 2025 am 12:04 AM

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

php magic 방법 (__construct, __destruct, __call, __get, __set 등)이란 무엇이며 사용 사례를 제공합니까? php magic 방법 (__construct, __destruct, __call, __get, __set 등)이란 무엇이며 사용 사례를 제공합니까? Apr 03, 2025 am 12:03 AM

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.

See all articles