一種快速公共網(wǎng)關(guān)接口文件分析方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實(shí)施方式涉及信息處理技術(shù)領(lǐng)域,更具體地,涉及一種快速公共網(wǎng)關(guān)接口(FastCGI)文件分析方法和裝置。
【背景技術(shù)】
[0002]公共網(wǎng)關(guān)接口(CGI,Common Gateway Interface)是超文本轉(zhuǎn)移協(xié)議(HTTP)服務(wù)器與機(jī)器上程序進(jìn)行溝通的一種工具,其程序須運(yùn)行在網(wǎng)絡(luò)服務(wù)器(Web Server)上。CGI可以用任何一種語言編寫,只要這種語言具有標(biāo)準(zhǔn)輸入、輸出和環(huán)境變量。如php、perl、tcl
坐寸ο
[0003]FastCGI像是一種常駐(long-live)型的CGI。它可以一直執(zhí)行,還支持分布式的運(yùn)算,即FastCGI程序可以在網(wǎng)站服務(wù)器以外的主機(jī)上執(zhí)行并且接受來自其它網(wǎng)站服務(wù)器來的請(qǐng)求。FastCGI是語言無關(guān)的、可伸縮架構(gòu)的CGI開放擴(kuò)展,其主要行為是將CGI解釋器進(jìn)程保持在內(nèi)存中并因此獲得較高的性能。在各種應(yīng)用環(huán)境中,經(jīng)常需要對(duì)FastCGI文件進(jìn)行分析,以獲取FastCGI文件中各函數(shù)的CPU消耗。
[0004]GNU C++編譯器自帶的分析性能工具GP1f,可以通過在編譯鏈接的時(shí)候加入選項(xiàng)_pg,使編譯出來的可執(zhí)行程序在運(yùn)行時(shí)生成中間文件,并通過對(duì)中間文件的分析來獲取程序中各函數(shù)的CPU的消耗。
[0005]然而,GProf必須重新編譯代碼,需要得到CGI文件的源代碼才可以分析CGI文件性能,因此分析效率低下。而且,GProf只適合完整獨(dú)立運(yùn)行的程序,不適合分析網(wǎng)絡(luò)服務(wù)器框架下執(zhí)行的CGI文件。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施方式提出一種快速公共網(wǎng)關(guān)接口文件分析方法,以無需得到源代碼即可分析文件性能,從而提高分析效率。
[0007]本發(fā)明實(shí)施方式還提出了一種快速公共網(wǎng)關(guān)接口文件分析裝置,以以無需得到源代碼即可分析文件性能,從而提高分析效率。
[0008]本發(fā)明實(shí)施方式的具體方案如下:
[0009]一種快速公共網(wǎng)關(guān)接口文件分析方法,該方法包括:
[0010]加載快速公共網(wǎng)關(guān)接口文件,并獲取所述快速公共網(wǎng)關(guān)接口文件的請(qǐng)求參數(shù)和請(qǐng)求方法;
[0011]根據(jù)所述請(qǐng)求參數(shù)和請(qǐng)求方法,在進(jìn)程中運(yùn)行所述快速公共網(wǎng)關(guān)接口文件;
[0012]在所述進(jìn)程的運(yùn)行過程中對(duì)所述進(jìn)程占用資源進(jìn)行采樣,并基于所述進(jìn)程占用資源采樣結(jié)果確定所述快速公共網(wǎng)關(guān)接口文件的性能。
[0013]一種快速公共網(wǎng)關(guān)接口文件分析裝置,包括加載器、公共網(wǎng)關(guān)接口信息數(shù)據(jù)庫和性能分析器,其中:
[0014]加載器,用于加載快速公共網(wǎng)關(guān)接口文件,并從公共網(wǎng)關(guān)接口信息數(shù)據(jù)庫獲取所述快速公共網(wǎng)關(guān)接口文件的請(qǐng)求參數(shù)和請(qǐng)求方法;并根據(jù)所述請(qǐng)求參數(shù)和請(qǐng)求方法,在進(jìn)程中運(yùn)行所述快速公共網(wǎng)關(guān)接口文件;
[0015]公共網(wǎng)關(guān)接口信息數(shù)據(jù)庫,用于保存快速公共網(wǎng)關(guān)接口文件的請(qǐng)求參數(shù)和請(qǐng)求方法;
[0016]性能分析器,用于在所述進(jìn)程的運(yùn)行過程中對(duì)所述進(jìn)程占用資源進(jìn)行采樣,并基于所述進(jìn)程占用資源采樣結(jié)果確定所述快速公共網(wǎng)關(guān)接口文件的性能。
[0017]從上述技術(shù)方案可以看出,在本發(fā)明實(shí)施方式中,加載快速公共網(wǎng)關(guān)接口文件,并獲取所述快速公共網(wǎng)關(guān)接口文件的請(qǐng)求參數(shù)和請(qǐng)求方法;根據(jù)所述請(qǐng)求參數(shù)和請(qǐng)求方法,在進(jìn)程中運(yùn)行所述快速公共網(wǎng)關(guān)接口文件;在所述進(jìn)程的運(yùn)行過程中對(duì)所述進(jìn)程占用資源進(jìn)行采樣,并基于所述進(jìn)程占用資源采樣結(jié)果確定所述快速公共網(wǎng)關(guān)接口文件的性能。由此可見,本發(fā)明實(shí)施方式利用進(jìn)程加載并運(yùn)行快速公共網(wǎng)關(guān)接口文件,再對(duì)進(jìn)程占用資源進(jìn)行采樣,從而通過進(jìn)程占用資源采樣結(jié)果推導(dǎo)出公共網(wǎng)關(guān)接口文件的性能,而無需快速公共網(wǎng)關(guān)接口文件的源代碼,因此顯著提高了性能分析效率。
[0018]還有,本發(fā)明實(shí)施方式可以對(duì)編譯后的快速公共網(wǎng)關(guān)接口文件直接進(jìn)行性能分析,而不局限于只對(duì)可執(zhí)行文件進(jìn)行性能分析。
[0019]另外,本發(fā)明實(shí)施方式通過對(duì)采樣點(diǎn)的數(shù)目進(jìn)行分析,可以對(duì)CPU的耗時(shí)情況予以反映,從而可以對(duì)公共網(wǎng)關(guān)接口文件的性能進(jìn)行體現(xiàn)。
【附圖說明】
[0020]圖1為根據(jù)本發(fā)明實(shí)施方式快速公共網(wǎng)關(guān)接口文件分析方法流程圖;
[0021]圖2為根據(jù)本發(fā)明實(shí)施方式快速公共網(wǎng)關(guān)接口文件分析裝置結(jié)構(gòu)圖;
[0022]圖3為根據(jù)本發(fā)明實(shí)施方式快速公共網(wǎng)關(guān)接口文件分析示意圖;
[0023]圖4為根據(jù)本發(fā)明實(shí)施方式性能分析結(jié)果示意圖。
【具體實(shí)施方式】
[0024]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。
[0025]圖1為根據(jù)本發(fā)明實(shí)施方式快速公共網(wǎng)關(guān)接口(FastCGI)文件分析方法流程圖。
[0026]如圖1所示,該方法包括:
[0027]步驟101:加載快速公共網(wǎng)關(guān)接口文件,并獲取所述快速公共網(wǎng)關(guān)接口文件的請(qǐng)求參數(shù)和請(qǐng)求方法。
[0028]在這里,可以獲取快速公共網(wǎng)關(guān)接口文件的文件名;并利用所述文件名在預(yù)先建立的公共網(wǎng)關(guān)接口信息數(shù)據(jù)庫中查詢對(duì)應(yīng)于該文件名的請(qǐng)求參數(shù)和請(qǐng)求方法。
[0029]在公共網(wǎng)關(guān)接口信息數(shù)據(jù)庫中,以快速公共網(wǎng)關(guān)接口文件的文件名為索引,存儲(chǔ)有快速公共網(wǎng)關(guān)接口文件運(yùn)行所需的請(qǐng)求方法(HTTP協(xié)議的GET/P0ST等)和請(qǐng)求參數(shù)。
[0030]步驟102:根據(jù)所述請(qǐng)求參數(shù)和請(qǐng)求方法,在進(jìn)程中運(yùn)行所述快速公共網(wǎng)關(guān)接口文件。
[0031]在這里,可以獲取該快速公共網(wǎng)關(guān)接口文件的句柄;將查詢得到的請(qǐng)求參數(shù)和請(qǐng)求方法設(shè)置為該進(jìn)程的系統(tǒng)環(huán)境變量,根據(jù)所述句柄獲取該快速公共網(wǎng)關(guān)接口文件的主函數(shù),并在啟用計(jì)時(shí)器時(shí)在該進(jìn)程中同時(shí)運(yùn)行所述主函數(shù),直到所述計(jì)時(shí)器的定時(shí)時(shí)間到。
[0032]比如,可以在加載器中運(yùn)行快速公共網(wǎng)關(guān)接口文件。
[0033]傳統(tǒng)意義上的Webserver系統(tǒng)比較復(fù)雜,通常牽扯很多模塊,如果直接對(duì)Webserver分析很難獲取到快速公共網(wǎng)關(guān)接口文件的性能。因此,通過在加載器中運(yùn)行快速公共網(wǎng)關(guān)接口文件,相當(dāng)于給快速公共網(wǎng)關(guān)接口文件加了一個(gè)殼,使快速公共網(wǎng)關(guān)接口文件可以作為進(jìn)程而運(yùn)行,從而便于后續(xù)對(duì)該進(jìn)行分析以獲取快速公共網(wǎng)關(guān)接口文件的性倉泛。
[0034]步驟103:在所述進(jìn)程的運(yùn)行過程中對(duì)所述進(jìn)程占用資源進(jìn)行采樣,并基于所述進(jìn)程占用資源采樣結(jié)果確定所述快速公共網(wǎng)關(guān)接口文件的性能。
[0035]在這里,在所述進(jìn)程的運(yùn)行過程中,對(duì)所述進(jìn)程占用CPU資源進(jìn)行采樣,并記錄每個(gè)采樣點(diǎn)處CPU所執(zhí)行的函數(shù)名和調(diào)用棧信息;再根據(jù)每個(gè)采樣點(diǎn)所記錄的函數(shù)名確定每個(gè)函數(shù)所調(diào)用的采樣點(diǎn)個(gè)數(shù),并根據(jù)所述調(diào)用棧信息對(duì)由函數(shù)所構(gòu)成的調(diào)用路徑中的采樣點(diǎn)個(gè)數(shù)進(jìn)行排序;最后,按照采樣點(diǎn)個(gè)數(shù)從多到少的排序,確定出預(yù)定數(shù)目個(gè)調(diào)用路徑以作為性能優(yōu)化對(duì)象。
[0036]在一個(gè)實(shí)施方式中,可以采用打開動(dòng)態(tài)鏈接庫dlopen函數(shù)加載快速公共網(wǎng)關(guān)接口文件,并調(diào)用符號(hào)對(duì)應(yīng)地址返回dlsym函數(shù)獲取該快速公共網(wǎng)關(guān)接口文件的主函數(shù)。
[0037]以上雖然詳細(xì)羅列了一些具體函數(shù)用于加載快速公共網(wǎng)關(guān)接口文件和獲取快速公共網(wǎng)關(guān)接口文件的主函數(shù),本領(lǐng)域技術(shù)人員可以意識(shí)到,這種羅列僅是示范性的,并不用于對(duì)本發(fā)明實(shí)施方式進(jìn)行限定。
[0038]基于上述詳細(xì)分析,本發(fā)明實(shí)施方式還提出了一種快速公共網(wǎng)關(guān)接口文件分析裝置。
[0039]圖2為根據(jù)本發(fā)明實(shí)施方式的快速公共網(wǎng)關(guān)接口文件分析裝置結(jié)構(gòu)圖。
[0040]如圖2所示,包括加載器201、公共網(wǎng)關(guān)接口信息數(shù)據(jù)庫202和性能分析器203,其中:
[0041 ] 加載器201,用于加載快速公共網(wǎng)關(guān)接口文件,并從公共網(wǎng)關(guān)接口信息數(shù)據(jù)庫獲取所述快速公共網(wǎng)關(guān)接口文件的請(qǐng)求參數(shù)和請(qǐng)求方法;并根據(jù)所述請(qǐng)求參數(shù)和請(qǐng)求方法,在進(jìn)程中運(yùn)行所述快速公共網(wǎng)關(guān)接口文件;
[0042]公共網(wǎng)關(guān)接口信息數(shù)據(jù)庫202,用于保存快速公共網(wǎng)關(guān)接口文件的請(qǐng)求參數(shù)和請(qǐng)求方法;
[0043]性能分析器203,用于在所述進(jìn)程的運(yùn)行過程中對(duì)所述進(jìn)程占用資源進(jìn)行采樣,并基于所述進(jìn)程占用資源采樣結(jié)果確定所述快速公共網(wǎng)關(guān)接口文件的性能。
[0044]在一個(gè)實(shí)施方式中:
[0045]加載器201,用于獲取快速公共網(wǎng)關(guān)接口文件的文件名;并利用所述文件名在該公共網(wǎng)關(guān)接口信息數(shù)據(jù)庫中查詢對(duì)應(yīng)于該文件名的請(qǐng)求參數(shù)和請(qǐng)求方法。
[0046]在一個(gè)實(shí)施方式中:
[0047]加載器201,獲取該快速公共網(wǎng)關(guān)接口文件的句柄;并將查詢得到的請(qǐng)求參數(shù)和請(qǐng)求方法設(shè)置為該進(jìn)程的系統(tǒng)環(huán)境變量,根據(jù)所述句柄獲取該快速公共網(wǎng)關(guān)接口文件的主函數(shù),并在啟用計(jì)時(shí)器時(shí)在該進(jìn)程中同時(shí)運(yùn)行所述主函數(shù),直到所述計(jì)時(shí)器的定時(shí)時(shí)間到。
[0048]在一個(gè)實(shí)施方式中:
[0049]性能分析器203,用于在所述進(jìn)程的運(yùn)行過程中,對(duì)所述進(jìn)程占用CPU資源進(jìn)行采樣,并記錄每個(gè)采樣點(diǎn)處CPU所執(zhí)行的函數(shù)名和調(diào)用棧信息;根據(jù)每個(gè)采樣點(diǎn)所記錄的函數(shù)名確定每個(gè)函數(shù)所調(diào)用的采樣點(diǎn)個(gè)數(shù),并根據(jù)所述調(diào)用棧信息對(duì)由函數(shù)構(gòu)成的調(diào)用路徑中的采樣點(diǎn)個(gè)數(shù)進(jìn)行排序;按照采樣點(diǎn)個(gè)數(shù)從多到少的排序,確定出預(yù)定數(shù)目個(gè)調(diào)用路徑以作為性能優(yōu)化對(duì)象。
[0050]在一個(gè)實(shí)施方式中:
[0051 ] 加載器201,用于采用打開動(dòng)態(tài)鏈接庫dlopen函數(shù)加載快速公共網(wǎng)關(guān)接口文件,并調(diào)用符號(hào)對(duì)應(yīng)地址返回dlsym函數(shù)獲取該快速公共網(wǎng)關(guān)接口文件的主函數(shù)。
[0052]圖3為根據(jù)本發(fā)明實(shí)施方式快速公共網(wǎng)關(guān)接口文件分析的示意圖。
[0053]在該分析過程中,輸入為編譯好的快速公共網(wǎng)關(guān)接口文件;輸出結(jié)果為:快速公共網(wǎng)關(guān)接口文件的程序中調(diào)用的熱點(diǎn)路徑圖,從中可以得出最耗CPU的調(diào)用路徑作為后續(xù)優(yōu)化參考。
[0054]如圖3所示,其中加載器用于模擬Webserver的功能,即載入快速公共網(wǎng)關(guān)接口文件并運(yùn)燈。
[0055]快速公共網(wǎng)關(guān)接口文件是非可執(zhí)行文件,而性能分析器用于對(duì)運(yùn)行中的進(jìn)程進(jìn)行動(dòng)態(tài)分析的,而常規(guī)意義上的Webserver系統(tǒng)比較復(fù)雜牽扯很多模塊,直接對(duì)WebServer分析很難獲取到快速公共網(wǎng)關(guān)接口文件的性能,因此本發(fā)明實(shí)施方式采用加載器來載入快速公共網(wǎng)關(guān)接口文件