php7のパフォーマンステスト環境を構築する方法
前言
我之前使用的是xhprof+xhgui
分析线上环境的性能,然而PHP
版本升级到PHP 7
之后,xhprof
已经不可用,于是改用tideways+xhgui
,这实际上也是PHP7
下开源方案的唯一选择,有兴趣的可看下参考资料,有详细说明。
本文主要根据参考资料[1]
配置,因此会有大量重复的地方,我主要其基础上根据实际生产环境的要求多添加了以下额外配置:
mongodb
只绑定到本地xhgui
开启HTTP Basic
认证xhgui
在mongodb
中只保留最近14
天的数据
系统环境
CentOS 7.3 + nginx + mysql + php71
本文假设你的lnmp
环境已经可以正常使用,并且是通过源码安装PHP
,现在只是需要添加性能测试的功能。如果你不熟悉lnmp
环境的配置,推荐使用https://lnmp.org/提供的一键安装包,本文的配置路径均基于该包的默认配置。
安装与配置
分成以下几个部分:
mongodb
tideways
xhgui
应用配置
1.mongodb
安装
#yum install mongodb-server mongodb -y #pecl install mongodb
启动mongodb
服务
#mongod --bind_ip 127.0.0.1
2.tideways
安装
git clone https://github.com/tideways/php-profiler-extension.git cd php-profiler-extension phpize ./configure --with-php-config=`which php-config` make sudo make install
配置
编辑php.ini
文件,添加:
extension=tideways.so tideways.auto_prepend_library=0
重启php-fpm
,执行以下命令看到tideways
的输出表示有生效:
#php -m | grep tide tideways
3.xhgui
xhgui
也是一个网站,最终需要通过web
访问。官方版本是英文版,已经不更新了,有很多BUG
,这里推荐使用中文版:https://github.com/maxincai/xhgui
。
安装(假设在/home/wwwroot/
目录下执行如下命令)
$ git clone https://github.com/maxincai/xhgui.git $ cd xhgui $ php install.php
配置
1.给数据库添加索引,非必须,但是强烈推荐:
$ 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 } )
2.nginx
配置(xhgui
本身没有安全机制,它捕捉的数据中有敏感数据,因此开放到外网后必须开启HTTP Basic认证)
创建/usr/local/nginx/conf/vhost/xhgui.conf
文件,内容如下:
server { listen 8888; # 根据实际情况改成自己的端口 server_name 127.0.0.1; #根据实际情况改成自己的域名 index index.html index.htm index.php; root /home/wwwroot/xhgui/webroot/; location ~ \.php { auth_basic "xhgui needs authentication"; # 开启HTTP Basic认证 auth_basic_user_file htpasswd; # 密码文件 try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ /index.php?$uri&$args; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 30d; } access_log /home/wwwlogs/xhgui.access.log; error_log /home/wwwlogs/xhgui.error.log; }
开启HTTP Basic认证
需要生成密码文件htpasswd
。假设生成一个tester
用户,密码为123456
,则执行以下命令:
printf “tester:$(openssl passwd -crypt 123456)\n" >> /usr/local/nginx/conf/htpasswd
生成后记得检查下文件内容,格式内容应该类似如下:
$cat /usr/local/nginx/conf/htpasswd tester:1qe8kAN82iOyo
完成配置重启,在浏览器中进入http://127.0.0.1:8888
,应该能看到界面了,只是此时还没有数据。
3.进一步优化配置
xhgui
默认是按1%采集的,可是如果是排查问题时还是希望能够100%采集会比较方便。进入xhgui
源码目录,修改config/config.default.php
文件,平时仍然按1%的采样率采样,防止数据增长过快,当想调试时,就在URL
中添加debug=1
的参数即可。
在config/config.default.php
中,找到profiler.enable
这里,按如下修改:
'profiler.enable' => function() { // url 中包含debug=1则百分百捕获 if(!empty($_GET['debug'])){ return true; } else { // 1%采样 return rand(1, 100) === 42; } },
如果不删除采集的数据,很快就会发现mongo
数据库变得很大。因此推荐配置下mongo
数据库,只保留最近14天的数据。
#mongo > use xhprof > db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 3600*24*14 } )
如果想手动全部删除,则执行如下命令:
$ mongo $ use xhprof; $ db.dropDatabase();
4.应用配置
让应用实现采集,需要修改对应的nginx
配置文件,添加:
fastcgi_param TIDEWAYS_SAMPLERATE “100"; #是否采样取决于xhgui的随机数配置和这里的采样率配置,两者必须同时满足,这里简单设置成100,由xhgui去控制 fastcgi_param PHP_VALUE "auto_prepend_file=/home/wwwroot/xhgui/external/header.php";
完整的nginx
示例配置文件如下:
server { listen 80; #根据实际情况修改 server_name test.dev; #根据实际情况修改 index index.html index.htm index.php; root /home/wwwroot/test/web/; location ~ \.php { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index /index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param TIDEWAYS_SAMPLERATE "100”; # 此处为重点 fastcgi_param PHP_VALUE "auto_prepend_file=/home/wwwroot/xhgui/external/header.php”; # 此处为重点 include fastcgi_params; } try_files $uri $uri/ @rewrite; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 30d; } access_log /home/wwwlogs/test.access.log; error_log /home/wwwlogs/test.error.log; }
最终成功配置并采集到数据的界面
以上がphp7のパフォーマンステスト環境を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。
