成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

xphrof性能分析線上部署實(shí)踐

go4it / 2545人閱讀

摘要:說明將部署在線上環(huán)境,在特定情況下進(jìn)行性能分析,方便快捷的排查線上性能問題。通過參數(shù)指定及添加代碼行觸發(fā)進(jìn)入性能分析,并將結(jié)果保存入。因?yàn)閷?duì)性能的影響,只部署在一臺(tái)機(jī)子上。

說明

將xhprof部署在線上環(huán)境,在特定情況下進(jìn)行性能分析,方便快捷的排查線上性能問題。

通過參數(shù)指定及添加代碼行觸發(fā)進(jìn)入性能分析,并將結(jié)果保存入MongoDB。

因?yàn)閤hprof對(duì)性能的影響,只部署在一臺(tái)機(jī)子上。

環(huán)境配置

PHP 5.5.25
xhprof-0.9.4

xhprof:[email protected]:phacility/xhprof.git

核心入口文件

/PATH/xhprof/config/inject.php

 $clientIp,
            "path" => $path,
            "hostname" => $hostName
        ];
    }
}


//主處理過程
if( !function_exists("xphrof_mainProcess") ){

    function xphrof_mainProcess($cmdName=""){

        if ( extension_loaded("xhprof") ) {

            //xhprof功能統(tǒng)一開關(guān),緊急情況下使用
            $xhprofMainSwitch = true; //true-開, false-關(guān)

            //判斷是否進(jìn)入分析
            $enable = xphrof_checkEnable($cmdName);

            if ( $xhprofMainSwitch && $enable ) {

                $pathData = xphrof_getUniqSign($cmdName);

                //開始性能分析
                // XHPROF_FLAGS_NO_BUILTINS - 使得跳過所有內(nèi)置(內(nèi)部)函數(shù)
                // XHPROF_FLAGS_CPU - 使輸出的性能數(shù)據(jù)中添加 CPU 數(shù)據(jù)
                // XHPROF_FLAGS_MEMORY - 使輸出的性能數(shù)據(jù)中添加內(nèi)存數(shù)據(jù)
                xhprof_enable( XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU );

                //注冊(cè),腳本執(zhí)行完或exit后執(zhí)行
                register_shutdown_function(function() use ($pathData){

                    //xhprof的數(shù)據(jù)
                    $xhprofData = xhprof_disable();

                    //相應(yīng)給客戶端并結(jié)束請(qǐng)求
                    $returnClient = -1;
                    if (function_exists("fastcgi_finish_request")) {
                        $returnClient = fastcgi_finish_request();
                    }

                    //當(dāng)前環(huán)境數(shù)據(jù)及post、get數(shù)據(jù)
                    $envData = [
                        "env" => $_SERVER,
                        "get" => $_GET,
                        "post" => $_POST,
                        "return_client" => intval($returnClient)
                    ];

                    $XHPROF_ROOT = realpath(dirname(__FILE__) ."/..");
                    include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
                    include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs_mongo.php";
                    include_once $XHPROF_ROOT . "/xhprof_lib/service/MongoBaseSvc.php";
                    //加載配置文件
                    $xhprofConfig = include_once $XHPROF_ROOT . "/config/config.php";

                    $xhprofRuns = new XHProfRuns_Mongo($xhprofConfig);
                    
                    $xhprofRuns->save_run($xhprofData, $envData, $pathData);

                });
            }
        }
    }
}

//默認(rèn)啟動(dòng)一次-http,指定服務(wù)器才可執(zhí)行
if( function_exists("php_uname") && in_array(php_uname("n"), [
    "10.10.10.10", //測試開發(fā)服務(wù)器
    "11.11.11.11" //線上執(zhí)行服務(wù)器
    ], true) ){
    xphrof_mainProcess();
}


//comand進(jìn)入分析
if( !function_exists("xphrof_startProcess") ){
    function xphrof_startProcess($cmdName=""){
        xphrof_mainProcess($cmdName);
    }
}
加載入口文件方案

1. 在項(xiàng)目啟動(dòng)的配置文件中加載

//例如:bootstrap/autoload.php
/*
|--------------------------------------------------------------------------
| add xhprof config
|--------------------------------------------------------------------------
|
| inject xhprof config.
|
*/
$xhprofFile = __DIR__."/../xhprof/config/inject.php";
if (file_exists($xhprofFile)) {
    require_once $xhprofFile;
}

2. 在項(xiàng)目nginx的配置中加載

//在 nginx 的fastcgi配置處
set $xhprofconf "auto_prepend_file=/PATH/xhprof/config/inject.php";
fastcgi_param PHP_VALUE $xhprofconf;
觸發(fā)進(jìn)入

對(duì)HTTP請(qǐng)求訪問時(shí)增加參數(shù):showyourbug=1

對(duì)CLI腳本代碼中增加:xphrof_startProcess(__CLASS__);

MongoDB保存結(jié)構(gòu)

解析保存xhprof_disable()返回的數(shù)據(jù)、請(qǐng)求的環(huán)境變量及數(shù)據(jù)??稍O(shè)置過期索引保存指定時(shí)長日志。

{
    "ip" : "10.10.10.10", //訪問客戶端ip
    "path" : "http-", //資源標(biāo)識(shí),http-接口請(qǐng)求,cmd-artisan腳本執(zhí)行
    "hostname" : "machine_host_name", //執(zhí)行機(jī)器名稱
    "run_id" : "5afe795c96a83", //唯一run_id
    "main" : { //整體數(shù)據(jù)
        "ct" : NumberLong(1),
        "wt" : NumberLong(36),
        "cpu" : NumberLong(0),
        "mu" : NumberLong(1856),
        "pmu" : NumberLong(672)
    },
    "xhprof_raw_data" : "a:2:{s:23:"main()==>xhprof_disable";a:5:{s:2:"ct";i:1;s:2:"wt";i:8;s:3:"cpu";i:0;s:2:"mu";i:840;s:3:"pmu";i:96;}s:6:"main()";a:5:{s:2:"ct";i:1;s:2:"wt";i:36;s:3:"cpu";i:0;s:2:"mu";i:1856;s:3:"pmu";i:672;}}", //原始數(shù)據(jù)體
    "env_data" : { //相關(guān)環(huán)境日志
        "env" : { //$_SERVER信息
            "USER" : "nobody",
            "HOME" : "/",
            "FCGI_ROLE" : "RESPONDER",
            "SCRIPT_FILENAME" : "/PATH/public/index.php",
            ......
            "REQUEST_TIME" : NumberLong(1526626652)
        },
        "get" : { //$_GET信息
            "showyourbug" : "1"
        },
        "post" : [], //$_POST信息
        "return_client" : NumberLong(-1) //fastcgi_finish_request相應(yīng)客戶端結(jié)果
    },
    "index_time" : ISODate("2018-05-18T06:57:32.000Z"), //過期索引,保留2天
    "create_time" : "2018-05-18 14:57:32" //創(chuàng)建時(shí)間
}
對(duì)線上性能的影響分析

測試接口

public function getHello(){
    $ret = [
        "errno" => 0,
        "errmsg"    => "success"
    ];
    return json_encode($ret);
}

使用ab請(qǐng)求

ab -n 1000 -c 100 -X 10.10.10.10:80 http://hostname/hello
ab -n 1000 -c 100 -X 10.10.10.10:80 http://hostname/hello?showyourbug=1

測試結(jié)果
批量請(qǐng)求對(duì)服務(wù)器影響:
| 測試類別 | Requests per second (#/sec) | 平均 | Time per request (ms) | 平均 |
| 僅測試接口 | 49.23,50.02,49.41 | 49.55 | 20.312,19.992,20.239 | 20.181 |
| 加載配置(未進(jìn)入) | 46.74,45.48,45.21 | 45.81 (-8.76%) | 21.397,21.987,22.118 | 21.834 (-8.19%) |
| 加載配置(進(jìn)入) | 10.72,10.48,11.46 | 10.88 (-78%) | 93.281,95.452,87.259 | 91.99 (-355.82%) |

對(duì)單個(gè)請(qǐng)求影響:
| 測試類別 | Time per request (ms) | 平均 |
| 僅測試接口 | 66.972,87.029,72.605 | 75.54 |
| 加載配置(未進(jìn)入) | 79.183,80.728,83.101 | 81.004 (-7.23%) |
| 加載配置(進(jìn)入) | 275.186,287.293,291.312 | 284.597 (-271.45%) |

結(jié)論

xhprof會(huì)影響線上性能,所以只部署到一臺(tái)線上機(jī)進(jìn)行監(jiān)控。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29008.html

相關(guān)文章

  • tideways+toolkit對(duì)php代碼進(jìn)行性能分析

    toolkit是tideway官方提供的性能分析的命令行工具。如果你只是本地開發(fā)調(diào)試接口性能,不想安裝xhgui,那么使用toolkit就足夠了 安裝 安裝tideways拓展 git clone https://github.com/tideways/php-xhprof-extension.git cd php-profiler-extension phpize ./configure mak...

    rubyshen 評(píng)論0 收藏0
  • [ 好文分享 ] 美團(tuán)酒店Node全棧開發(fā)實(shí)踐

    摘要:我所在的美團(tuán)酒店事業(yè)部去年月份成立,新的業(yè)務(wù)新的開發(fā)團(tuán)隊(duì),這一切使得我們的前后端分離推進(jìn)的很徹底。日志監(jiān)控平臺(tái)日志監(jiān)控平臺(tái)是美團(tuán)內(nèi)部的一個(gè)日志收集系統(tǒng),目前美團(tuán)統(tǒng)一使用收集日志,具有接收格式日志的能力,而日志監(jiān)控平臺(tái)也是以格式日志來收集。 轉(zhuǎn)自:美團(tuán)技術(shù)團(tuán)隊(duì) 作者:美團(tuán)技術(shù)團(tuán)隊(duì) 分享理由:很好的分享,可見,基于Node的前后端分離的架構(gòu)是越顯流行和重要,前端攻城獅們,No...

    wangdai 評(píng)論0 收藏0
  • 馬蜂窩大交通業(yè)務(wù)質(zhì)量體系建設(shè)初步實(shí)踐

    摘要:大交通研發(fā)質(zhì)量體系建設(shè)為了幫助用戶更好地完成消費(fèi)決策閉環(huán),馬蜂窩上線了大交通業(yè)務(wù),為用戶提供購買機(jī)票火車票等服務(wù)。 質(zhì)量是決定產(chǎn)品能否成功、企業(yè)能否持續(xù)發(fā)展的關(guān)鍵因素之一。如何做好質(zhì)量體系建設(shè),這是個(gè)比較大的話題,包含的范圍很廣,也沒有固定的衡量標(biāo)準(zhǔn)。 打開一個(gè)互聯(lián)網(wǎng)公司招聘網(wǎng)站,搜索「測試工程師」崗位時(shí),你會(huì)發(fā)現(xiàn)幾乎全部 JD 都包含一條要求「建設(shè)或者參與建設(shè)所負(fù)責(zé)業(yè)務(wù)的質(zhì)量體系」。...

    Ilikewhite 評(píng)論0 收藏0
  • 馬蜂窩大交通業(yè)務(wù)質(zhì)量體系建設(shè)初步實(shí)踐

    摘要:大交通研發(fā)質(zhì)量體系建設(shè)為了幫助用戶更好地完成消費(fèi)決策閉環(huán),馬蜂窩上線了大交通業(yè)務(wù),為用戶提供購買機(jī)票火車票等服務(wù)。 質(zhì)量是決定產(chǎn)品能否成功、企業(yè)能否持續(xù)發(fā)展的關(guān)鍵因素之一。如何做好質(zhì)量體系建設(shè),這是個(gè)比較大的話題,包含的范圍很廣,也沒有固定的衡量標(biāo)準(zhǔn)。 打開一個(gè)互聯(lián)網(wǎng)公司招聘網(wǎng)站,搜索「測試工程師」崗位時(shí),你會(huì)發(fā)現(xiàn)幾乎全部 JD 都包含一條要求「建設(shè)或者參與建設(shè)所負(fù)責(zé)業(yè)務(wù)的質(zhì)量體系」。...

    fantix 評(píng)論0 收藏0
  • 企業(yè)互聯(lián)網(wǎng)應(yīng)用高性能解決之道

    摘要:本文介紹了企業(yè)互聯(lián)網(wǎng)開發(fā)及運(yùn)維的一些實(shí)踐,深入剖析了互聯(lián)網(wǎng)項(xiàng)目開發(fā)及上線過程中的各種痛點(diǎn)及解決之道。線上出錯(cuò),我們通過收集服務(wù)器端應(yīng)用性能數(shù)據(jù)的方式,實(shí)時(shí)展示應(yīng)用的調(diào)用拓?fù)鋱D,并根據(jù)出現(xiàn)異常的請(qǐng)求,進(jìn)行下鉆,定位出具體出現(xiàn)問題的代碼。 本文介紹了企業(yè)互聯(lián)網(wǎng)開發(fā)及運(yùn)維的一些實(shí)踐,深入剖析了互聯(lián)網(wǎng)項(xiàng)目開發(fā)及上線過程中的各種痛點(diǎn)及解決之道。一個(gè)互聯(lián)網(wǎng)項(xiàng)目的上線并不是那么容易,需要經(jīng)過很多的環(huán)...

    Alan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<