Centos7安裝配置Xhgui

XhProf是Facebook出品的一個PHP性能監控工具,只包含基本的界面和圖形來分析數據。後來Paul Reinheimer在此基礎上開發了Xhgui,提供了更好的界面和功能,其主頁在https://github.com/perftools/xhgui,其實步驟說的很詳細,可是在CentOS7上安裝並不容易,由於不少程序須要編譯,在這裏記錄一下php

一、CentOS7最小安裝, yum update
二、安裝gcc, yum install net-tools gcc gcc-c++ wget vim
三、安裝php, yum install php php-devel php-fpm git
四、下載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下
五、取消selinux,centos7確實很穩定安全,可是很麻煩,取消以後,避免出現一些奇怪的問題,
     vim /etc/selinux/config
     修改SELINUX=disabled
     上面的方法須要重啓,而且是長期有效的,臨時性的方法是setenforce 0
六、建立nginx的80端口根目錄,mkdir -p /data/html
七、修改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$須要取消註釋
八、ln /usr/local/nginx/sbin/nginx /usr/sbin/nginx
九、systemctl auto php-fpm
     systemctl start php-fpm
十、vim /data/html/info.php
       <?php
              phpinfo();
      curl localhost/info.php
      說明php配置成功,須要注意,若是沒有取消selinux,這裏會出現File not found,若是必定要用selinux,須要賦予/data/html的www運行權限。
十一、配置xhgui的步驟其實很簡單,按照文檔來就能夠了
十二、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已經安裝成功
十二、UpProfiler
       cd ~/download
       cd uprofiler/extension
       phpize
       ./configure
       make 
       make install
       vim /etc/php.ini
       最後加入
       extension=uprofiler.so
       用php -m驗證
1三、tideways
       cd ~/download
       cd php-profiler-extension/
       phpize
       ./configure
       make 
       make install
       vim /etc/php.ini
       最後加入
       extension=tideways.so
       用php -m驗證結果
1四、 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驗證
1五、安裝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
1六、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驗證
1七、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驗證
1九、配置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
1九、對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
2一、 驗證
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,因此能夠訪問
 
2二、測試程序
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看到函數調用的過程,顏色越深,說明運行越慢,須要處理。
2三、其餘
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_*看到服務器信息,能夠用來區分不一樣的主機,因此能夠經過這些信息來過濾,能夠支持多個主機
相關文章
相關標籤/搜索