前言:
由于工作中需要对数据量较大的数据表进行操作时,出现504 time-out报错。于是在开始搭建tideways + xhgui。
我的系统环境:
mac+ +tideways + xhgui+ nginx + php7
搭建过程:
1.安装mongo:(https://www.jianshu.com/p/2d0a1ecd0c82)
安装:brew install mongo(如果没成功,brew search mongo搜下)修改环境变量: 作用是把mongo/bin加入$path,以免每次都输入sudo mongo
$ touch .base_profile
$ vim .base_profile
加入path:
export MONGO_PATH=/usr/local/mongodb
export PATH=$PATH:$MONGO_PATH/bin
启动服务端:(mongod.conf文件中bindIp: 127.0.0.1意思是本机访问,如果是外网访问需要重新设置)
mongod --config /usr/local/etc/mongod.conf
如果要修改数据库路径:输入
mongod --dbpath 路径
2.安装PHP mongodb扩展
注意点:是mongodb的扩展,不是mongo扩展
注意版本。后面下载的xhgui对mongo扩展的版本有要求。
在网上他们都是用brew install php70-mongo之类。但是我brew search也没有,还是乖乖make吧。
下载mongodb扩展包:(我下载的是mongo-1.4.2但是后面执行显示版本太高了。于是就下砸了mongo-1.4.0)
cd
wget http://pecl.php.net/get/mongodb-1.4.0.tgz
tar -zxvf mongodb-1.4.0.tgz
cd mongodb-1.4.0
phpize
./configure --with-php-config=你的php-config路径 我的是在/usr/local/Cellar/php@7.1/7.1.16_1/bin/php-config
make
make install
3.安装tideways扩展:
git clone https://github.com/tideways/php-profiler-extension.git
cd php-profiler-extension
phpize
./configure --with-php-config=你的php-config路径
make(执行这行报错于是重来)
---------------------------------------
git clone https://github.com/tideways/php-profiler-extension.git
cd php-profiler-extension
phpize
./configure --with-openssl-dir=你的openssl路径(我的路径/usr/local/opt/openssl@1.0)
make
make install
配置php.ini:
extension=tideways.so
tideways.auto_prepend_library=0
extension=mongodb.so
重启php-fpm即可(可以使用php -m查看是否安装了mongodb和tideways扩展)
下载项目:
直接使用的是:https://github.com/maxincai/xhgui但是这个7.1之后执行就会报错了。所以就找了另外一个链接
git clone https://github.com/perftools/xhgui.git
cd xhgui
php install.php(看下是否有vendor这个目录)
mongo添加索引:
$ 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.ensureInd
xhgui 默认是采集1% ,如果是排查问题时还是希望能够100%采集会比较方便。进入xhgui源码目录,修改config/config.default.php文件,
平时仍然按1%的采样率采样,防止数据增长过快,当想调试时,就在URL中添加debug=1的参数即可。
在xhgui/config/config.default.php中,找到profiler.enable这里,按如下修改:
mongo
'profiler.enable' => function() {
// url 中包含debug=1则百分百捕获
if(!empty($_GET['debug'])){
return true;
} else {
// 1%采样
return rand(1, 100) === 42;
}
},
在你要查看的项目nginx配置 修改配置:我的目录在/usr/local/etc/nginx/vhost/adb.conf
fastcgi_param TIDEWAYS_SAMPLERATE “100"; #是否采样取决于xhgui的随机数配置和这里的采样率配置,两者必须同时满足,这里简单设置成100,由xhgui>去控制
fastcgi_param PHP_VALUE "auto_prepend_file=/home/wwwroot/xhgui/external/header.php";
执行:
php -S 0:8080 -t webroot(如果你的8080端口有被占用,换个端口即可,我监听的是5678)
访问:127.0.0.1:5678即可(你在访问abd.com的时候。就可以看到127.0.0.1:5678页面中性能了)
错误归纳:
1.安装版本不对:(我安装的是mongo 而不是mongdb)
zend_object_value php_mongoclient_new(zend_class_entry *class_type TSRMLS_DC);
2.openssl不对。phpize之后./configure --with-openssl-dir即可
make: *** [src/libmongoc/src/mongoc/mongoc-crypto-openssl.lo] Error 1
3.下载xhgui不支持7
Uncaught ErrorException: Function mcrypt_module_open() is deprecated
4.最后一个是php install composer不能生成vendor文件。使用composer update发现我的mongo扩展版本太高了