• Centos7安装配置Xhgui


    XhProf是Facebook出品的一个PHP性能监控工具,只包含基本的界面和图形来分析数据。后来Paul Reinheimer在此基础上开发了Xhgui,提供了更好的界面和功能,其主页在https://github.com/perftools/xhgui,其实步骤说的很详细,但是在CentOS7上安装并不容易,因为很多程序需要编译,在这里记录一下

    1、CentOS7最小安装, yum update
    2、安装gcc, yum install net-tools gcc gcc-c++ wget vim
    3、安装php, yum install php php-devel php-fpm git
    4、下载nginx, 
          mkdir ~/download
           cd ~/download
          tar xvf nginx-1.99.tar.gz
          cd nginx-1.99
          yum install pcre-devel zlib-devel  (否则configure会出现错误)
          ./configure 
          make 
          make install
          nginx安装在/usr/local/nginx下
    5、取消selinux,centos7确实很稳定安全,但是很麻烦,取消之后,避免出现一些奇怪的问题,
         vim /etc/selinux/config
         修改SELINUX=disabled
         上面的方法需要重启,并且是长期有效的,临时性的方法是setenforce 0
    6、创建nginx的80端口根目录,mkdir -p /data/html
    7、修改nginx配置文件,vim /usr/local/nginx/conf/nginx.conf
         修改http->server 80下的内容,如下
             server {
            listen       80;
            server_name  localhost;
            location / {
                root   /data/html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /data/html;
            }
            location ~ .php$ {
                root           /data/html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
        }
        需要修改的地方,黑体字做了标注,location ~ .php$需要取消注释
    8、ln /usr/local/nginx/sbin/nginx /usr/sbin/nginx
    9、systemctl auto php-fpm
         systemctl start php-fpm
    10、vim /data/html/info.php
           <?php
                  phpinfo();
          curl localhost/info.php
          说明php配置成功,需要注意,如果没有取消selinux,这里会出现File not found,如果一定要用selinux,需要赋予/data/html的www运行权限。
    11、配置xhgui的步骤其实很简单,按照文档来就可以了
    12、XHProf
           cd ~/download
           tar xvf xhprof-0.9.4.tgz
           cd xhprof-0.9.4/extension
           phpize
           ./configure
           make
           make install
           vim /etc/php.ini
           在最后加入
           extension=xhprof.so
          通过php -m可以看到xhprof.so已经安装成功
    12、UpProfiler
           cd ~/download
           cd uprofiler/extension
           phpize
           ./configure
           make 
           make install
           vim /etc/php.ini
           最后加入
           extension=uprofiler.so
           用php -m验证
    13、tideways
           cd ~/download
           cd php-profiler-extension/
           phpize
           ./configure
           make 
           make install
           vim /etc/php.ini
           最后加入
           extension=tideways.so
           用php -m验证结果
    14、 MongoDB的PHP驱动
           cd ~/download
           tar xvf  mongo-1.6.12.tgz
           cd mongo-1.6.12
           phpize
           yum install openssl-devel
           ./configure
           make && make install
           vim /etc/php.ini
           最后增加
           extension=mongo.so
           用php -m验证
    15、安装MongoDB
          vim /etc/yum.repose.d/mongodb-org-3.2.repo
          [mongodb-org-3.2]
              name=MongoDB Repository
              baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
             gpgcheck=0
             enabled=1
    安装
       yum install mongodb-org
       systemctl enable mongod
       systemctl start mongod
    16、mcrypt
         cd ~/download
         wget  http://downloads.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
       tar xvf libmcrypt-2.5.8.tar.gz
         cd  libmcrypt-2.5.8
         ./configure
         make
         make install
         cd ~/download
         wget http://museum.php.net/php5/php-5.4.16.tar.gz
       cd php-5.4.16/ext/mcrypt/
       phpize
       ./configure
       make
       make install
       vim /etc/php.ini
       最后增加
       extension=mcrypt.so
       用php -m验证
    17、Dom   
        cd ~/download/php-5.4.16/ext/dom/
           yum install libxml2-devel
           phpize
           ./configure
           make
           make install
           vim /etc/php.ini
           最后增加
           extension=dom.so
           用php -m验证
    19、配置nginx,将xhgui放在88端口
          vim /usr/local/nginx/conf/nginx.conf
          增加
        server{
            listen 88;
            server_name localhost;
     
            root /data/xhgui/webroot;
            index index.php;
     
            location / {
                    try_files $uri $uri/ /index.php?$uri&$args;
            }
     
            location ~ .php$ {
                    try_files $uri =404;
                    include fastcgi_params;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            }
        }
     
    cd /data
    打开防火墙端口
     firewall-cmd --add-service=http
    firewall-cmd --permanent --add-service=http
    firewall-cmd --add-port=88/tcp
    firewall-cmd --permanent --add-port=88/tcp
    19、对80端口注入xhgui文件
            location ~ .php$ {
                root           /data/html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
                fastcgi_param  PHP_VALUE "auto_prepend_file=/data/xhgui/external/header.php";
            }
    nginx -s reload
    20、初始化
    cd /data/xhgui
    php install.php
    这一步包含下载composer,Slim,以及初始化mongodb
    21、 验证
    curl localhost/info.php
    curl localhost:88
    在这里88端口没有输出,是因为默认/etc/php.ini中设置了display_errors=Off,修改为On
    重启php-fpm, systemctl restart php-fpm
    可以看到错误,是没有设置时区,修改/etc/php.ini
    修改date.timezone = Asia/Chongqing
    重启php-fpm, systemctl restart php-fpm
    curl localhost:88
    如果配置正确的话,这里应该是正常的,没有错误
    也可以在浏览器中访问,这台机器的ip为172.16.9.145,所以可以访问
     
    22、测试程序
    vim /data/html/test.php
    <?php
    $n=5000;
    $a = createArray($n);
    $a = sortArray($a);
    echoArray($a);
    function createArray($n){
            $a;
            for($i=0;$i<$n;$i++){
                    $a[$i]=rand(0,$n);
            }
            return $a;
    }
    function echoArray($a){
            for($i=0;$i<count($a);$i++){
                    echo $a[$i]." ";
            }
    }

    function sortArray($a){
            for($i=0;$i<count($a);$i++){
                    for($j=$i+1;$j<count($a);$j++){
                            if($a[$i]<$a[$j]){
                                    $tmp = $a[$i];
                                    $a[$i]=$a[$j];
                                    $a[$j]=$tmp;
                            }
                    }
            }
            return $a;
    }
     
    其实很简单,就是一个创建数组,进行排序的过程,可以在浏览器中运行http://172.16.9.145/test.php,理论上就可以在http://172.16.9.145:88看到结果了,
    但是,刷新88端口,一般是看不到结果的,这里是一个采样问题,xhgui是按照1%采样的,所以对于开发来说,需要100%采样,需要修改
    vim /data/xhgui/config/config.php
    'profiler.enable' => function() {
    //return rand(0,100) == 42
            return rand(0, 100) > 0 ;
        },
    黑体子是修改内容,这就是100%的采样,再运行http://172.16.9.145/test.php,就可以在http://172.16.9.145:88上看到结果了,
    可以看到采样的结果,包括程序的等待时间(wt)、cpu时间、内存等等信息,还可以通过view Graphy看到函数调用的过程,颜色越深,说明运行越慢,需要处理。
    23、其他
    xhgui使用mongodb保存性能数据,数据库连接信息保存在xhgui/config/config.php中,这意味着可以将性能信息保存到远程机器,还可以将多台机器的性能数据放在一起,我们可以看一下性能数据的结构,如下
    mongo
    >use xhprof
    >db.results.find().limit(1).pretty();
    查看一下键meta的信息,如下
                "meta" : {
                    "url" : "/test.php",
                    "SERVER" : {
                            "USER" : "apache",
                            "HOME" : "/usr/share/httpd",
                            "FCGI_ROLE" : "RESPONDER",
                            "SCRIPT_FILENAME" : "/data/html/test.php",
                            "QUERY_STRING" : "",
                            "REQUEST_METHOD" : "GET",
                            "CONTENT_TYPE" : "",
                            "CONTENT_LENGTH" : "",
                            "SCRIPT_NAME" : "/test.php",
                            "REQUEST_URI" : "/test.php",
                            "DOCUMENT_URI" : "/test.php",
                            "DOCUMENT_ROOT" : "/data/html",
                            "SERVER_PROTOCOL" : "HTTP/1.1",
                            "REQUEST_SCHEME" : "http",
                            "GATEWAY_INTERFACE" : "CGI/1.1",
                            "SERVER_SOFTWARE" : "nginx/1.9.9",
                            "REMOTE_ADDR" : "172.16.9.255",
                            "REMOTE_PORT" : "62433",
                            "SERVER_ADDR" : "172.16.9.145",
                            "SERVER_PORT" : "80",
                            "SERVER_NAME" : "localhost",
                            "REDIRECT_STATUS" : "200",
                            "PHP_VALUE" : "auto_prepend_file=/data/xhgui/external/header.php",
                            "HTTP_HOST" : "172.16.9.145",
                            "HTTP_CONNECTION" : "keep-alive",
                            "HTTP_CACHE_CONTROL" : "max-age=0",
                            "HTTP_ACCEPT" : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
                            "HTTP_UPGRADE_INSECURE_REQUESTS" : "1",
                            "HTTP_USER_AGENT" : "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36",
                            "HTTP_ACCEPT_ENCODING" : "gzip, deflate, sdch",
                            "HTTP_ACCEPT_LANGUAGE" : "zh-CN,zh;q=0.8",
                            "HTTP_COOKIE" : "slim_session=1450653227%7CBxhI8%2BKm%2B47xsnTB%2BOZVAv9qjPHQYC1oCIcfWhIblGI%3D%7C3a5b1cf4f47a77302d253b577949544f4ffe627b",
                            "PHP_SELF" : "/test.php",
                            "REQUEST_TIME_FLOAT" : 1450652599.176433,
                            "REQUEST_TIME" : NumberLong(1450652599)
                    },
           可以通过SERVER_*, HTTP_*看到服务器信息,可以用来区分不同的主机,所以可以通过这些信息来过滤,可以支持多个主机
     
     
         
           
        
     
  • 相关阅读:
    [已解决]import pymssql ImportError: libsybdb.so.5
    找出生成json中的error_code,并加以处理
    [转]正则匹配时对象必须为string or bytes-like object
    [转]python执行bash指令,如果指令返回错误,如何优雅的结束python程序
    group()与groups()的区别
    Unsupported major.minor version 51.0解决办法(转)
    谈谈互联网后端基础设施(转)
    java日志体系的思考(转)
    JAVA模块以及未来(转)
    使用Spring Loader或者Jrebel实现java 热部署
  • 原文地址:https://www.cnblogs.com/stone-fly/p/5062389.html
Copyright © 2020-2023  润新知