你可能会想,我们的业务运行的好好的,为啥平白无端就涌现性能问题?缘故原由有太多可能,比如代码改动、非常访问、网络颠簸、做事器硬件故障等等。

引起性能问题的缘故原由有这么多,那如何定位呢?本章就来给大家先容一个性能追踪的方法,这个方法在我运维职业生涯里屡试不爽,帮了我不少大忙。

< 1 > PHP-FPM的slow log

php慢PHP网站拜访慢我们应当若何处置 HTML

如果你所运维的网站或者运用为PHP的,那我相信你一定对LAMP或者LNMP不陌生。
我主见利用LNMP,缘故原由无他,就一点 -- 我们可以通过slow log很方便地追踪到问题点。
先来看配置方法吧。

1)编辑配置文件(假设php安装路径为/usr/local/php, 配置文件路径/usr/local/php/etc/php-fpm.conf)

# vim /usr/local/php/etc/php-fpm.conf #变动或增加两行内容slowlog = /data/logs/php-slow.logrequest_slowlog_timeout = 2

解释:slowlog定义日志路径和名字,request_slowlog_timeout定义超时时间,单位秒,即一个php脚本实行韶光超过了该韶光,则会记录日志。

2)重启php-fpm做事

详细重启命令,根据你自己的环境来决定。
配置文件修正后,不重启或者不重载做事是不生效的。

3)测试

在测试站点里新建一个test.php文件,写入如下内容:

<?php echo \"大众1\公众; sleep (5); echo \公众2\"大众;

然后在浏览器里或者利用curl命令去访问

# curl http://ip/test.php

4)结果剖析

访问test.php时,我们能觉得到它短暂卡去世,大概5秒后涌现结果。
此时到/data/logs/php-slow.log里查看,有如下内容:

[pool www] pid 6368script_filename = /data/wwwroot/aminglinux.cc/test.php[0x00007ff8c821f090] sleep() /data/wwwroot/aminglinux.cc/test.php:3

这个slow log,不仅可以记录哪一个文件慢,而且也可以记录详细哪一行的什么函数。
有了它,一旦网站访问卡顿,我们就非常方便地找到问题点了。

< 2 > 线上生产环境演示案例

问题描述:网站访问变卡顿了,不是不能访问,而是变慢了。

办理过程:

1)登录做事器查看负载,结果不到1,并不高

2)vmstat 1查看创造r列时时时涌现不高于5的数字,解释有些进程比较忙

3)用top命令查看,php-fpm进程排在前面

4)查看slow log,结果如下:[29-1月-2019 16:54:59] [pool www] pid 20287script_filename = /data/wwwroot/www.example.com/redirect.php[0x00000000031d83c0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84[0x00000000031d6bb0] query() /data/wwwroot/www.example.com/redirect.php:105[29-1月-2019 16:54:59] [pool www] pid 23066script_filename = /data/wwwroot/www.example.com/redirect.php[0x000000000319b5a0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84[0x0000000003199d90] query() /data/wwwroot/www.example.com/redirect.php:122

通过slow log创造是redirect.php里面有查询数据库的操作慢导致网站访问卡顿。
以是,还须要登录数据库做事器近一步剖析为什么MySQL查询慢,这个就涉及到了MySQL的慢查询日志,详细详细的操作我不再阐述。

< 3 > 利用Xdebug+Webgrind

如果网站跑在了LAMP环境中,就无法利用php-fpm的slow log了,那如何剖析瓶颈点?没紧要你还可以利用这个Xdebug+Webgrind,个中Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和剖析PHP程序的运行状况。
Webgrind是一个网页版的性能剖析工具,它的紧张浸染便是剖析Xdebug天生的cachegrind文件,以一种界面友好详尽的办法来展示性能数据。

Xdebug安装

Xdebug官方网站:http://xdebug.org/.

1)下载源码

如果你用的PHP版本较高,建议下载最新版本

# wget https://xdebug.org/files/xdebug-2.7.0beta1.tgz2)编译安装

# tar zxf xdebug-2.7.0beta1.tgz

# cd xdebug-2.7.0beta1

# /usr/local/php-fpm/bin/phpize

# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

# make && make install

3)配置

# vi /usr/local/php-fpm/etc/php.ini #在末了面增加[xdebug]zend_extension=xdebug.soxdebug.trace_output_dir=/tmp/xdebugxdebug.profiler_output_dir = /tmp/xdebugxdebug.profiler_enable = 1xdebug.profiler_enable_trigger = 14)检讨# /usr/local/php-fpm/bin/php -m |grep -C 1 Xdebug[Zend Modules]Xdebug5)创建Xdebug目录

# mkdir /tmp/xdebug

# chmod 777 !$

6)重启php-fpm或者apache做事

由于修正了php.ini配置文件,须要重启对应的做事,才可以生效,我这里用的是php-fpm

# /etc/init.d/php-fpm restart

Webgrind安装

1)下载

Webgrind官方github地址https://github.com/jokkedk/webgrind

# wget https://codeload.github.com/jokkedk/webgrind/zip/v1.5.0# mv v1.5.0 webgrind-1.5.0.zip# unzip webgrind-1.5.0.zip

2)为Webgrind配置站点

Webgrind实在是一个PHP网站程序,须要为其设置一个虚拟主机,我用的是LNMP环境,以是须要配置Nginx, 当然你也可以直接把webgrind程序目录丢到一个站点内,通过二级目录去访问。
下面是我的Nginx虚拟主机配置文件内容:

server {

listen 80;

server_name webgrind.aminglinux.cc;

root /data/wwwroot/webgrind;

index index.html index.htm index.php;

location ~ \.php$ {

fastcgi_pass 127.0.0.1:9001;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/webgrind$fastcgi_script_name;

include fastcgi_params;

}

3)配置webgrind

如果新配置的虚拟主机目录为/data/wwwroot/webgrind

# mv webgrind-1.5.0/ /data/wwwroot/webgrind/

# vim config.php #修正$storeageDir和$profileDir

static $storageDir = '/tmp/xdebug';

static $profilerDir = '/tmp/xdebug';

4)性能追踪

首先访问要追踪性能的PHP网站,然后查看/tmp/xdebug目录下是否天生文件

# ls /tmp/xdebug/

cachegrind.out.11442 cachegrind.out.11443 cachegrind.out.11443.091dcb

我的已经天生3个文件,然后在浏览器访问即可,不过须要你先选择脚本文件(右上角),点击update之后才会涌现剖析内容。

5)图形显示

我们还可以把PHP代码中的各个函数调用关系以图形的形式展现出来,这样更加直不雅观。
条件是须要python和dot两个工具的支持,python默认机器上自带,但是dot须要安装

# yum install -y graphviz

点击右上角的“show call graph”按钮,就会涌现俊秀的调用图

关注微信公众年夜众号:安徽思恒信息科技有限公司,理解更多技能内容……