一種基于Linux系統的性能采集分析的方法、裝置及系統的制作方法
【技術領域】
[0001]本發明涉及計算機技術領域,尤其涉及一種基于Linux系統的性能采集分析的方法、裝置及系統。
【背景技術】
[0002]內存泄漏也稱作“存儲滲漏”,用動態存儲分配函數動態開辟的空間,在使用完畢后未釋放,結果導致一直占據該內存單元。直到程序結束。(其實說白了就是該內存空間使用完畢之后未回收)即所謂內存泄漏。內存泄漏形象的比喻是“操作系統可提供給所有進程的存儲空間正在被某個進程榨干”,最終結果是程序運行時間越長,占用存儲空間越來越多,最終用盡全部存儲空間,整個系統崩潰。所以“內存泄漏”是從操作系統的角度來看的。這里的存儲空間并不是指物理內存,而是指虛擬內存大小。
[0003]對于內存泄露需要通過性能采集,評估軟件運行時系統的整體性能,定位到CPU性能熱點,具體定位到是哪段代碼、哪個函數耗時較大,目前性能剖析的采集具體是通過google-PerfTools來進行收集和分析的,就是通過采樣的方式,給程序中cpu的使用情況進行“畫像”,通過它所輸出的結果,可以對程序中各個函數(得到函數之間的調用關系)耗時情況一目了然。在對程序做性能優化的時候,先把最耗時的若干個操作優化好,程序的整體性能提升十分明顯,也是做性能優化的一個最為基本的原則一先優化最耗時的。
[0004]然而,目前常規的通過google-PerfTools來進行性能收集,在去重編譯時,在性能收集之前需要進行環境變量的設置,從而導致了性能收集和分析操作繁瑣的技術問題。
【發明內容】
[0005]本發明實施例提供的一種基于Linux系統的性能采集分析的方法、裝置及系統,解決了目前常規的通過google-PerfTools來進行性能收集,在去重編譯時,在性能收集之前需要進行環境變量的設置,而導致的性能收集和分析操作繁瑣的技術問題。
[0006]本發明實施例提供的一種基于Linux系統的性能采集分析的方法,包括:
[0007]確定選擇的目標主機待性能分析的待注入的進程;
[0008]根據待注入的所述進程找到對應的目標進程的dlopen函數入口地址;
[0009]通過在所述目標進程中附上的ptrace函數,結合所述dlopen函數入口地址將用于動態性能分析的prof iler.so文件加載進所述目標進程;
[0010]通過google-PerfTools調用所述prof iler.SO文件對所述目標進程進行性能采集,并獲取對應的性能分析結果。
[0011]可選地,確定選擇的目標主機待性能分析的待注入的進程具體包括:
[0012]確定選擇的目標主機的IP地址,并進行連接;
[0013]確定目標主機進行對應的待性能分析的待注入的所述進程的注入。
[0014]可選地,根據待注入的所述進程找到對應的目標進程的dlopen函數入口地址具體包括:
[0015]通過運行任意程序調用I ibc.so文件;
[0016]所述任意程序運行時的agent進程通過調用dlsym函數獲取dlopen函數運行時的第一絕對地址;
[00? 7]在所述agent進程內加載所述I ibc.so文件,以確定第一起始地址;
[0018]通過所述第一起始地址和所述第一絕對地址確定所述dlopen函數在所述I ibc.so文件中的偏移量;
[0019]根據待注入的所述進程通過所述libc.so文件確定加載在動態庫中的注入的所述進程對應的起始地址;
[0020]根據所述起始地址與所述偏移量相加得到絕對地址,所述絕對地址為所述目標地址的所述d I op en函數入口地址;
[0021]注入的所述進程調用所述ptrace函數加載到所述目標進程。
[0022]可選地,通過在所述目標進程中附上的P trace函數,結合所述dlopen函數入口地址將用于動態性能分析的prof i Ier.so文件加載進所述目標進程具體包括:
[0023]通過傳遞所述dlopen函數入口地址和所述prof iler.so文件的名稱到寄存器;
[0024]通過所述ptrace函數調用dlopen函數在目標進程中加載用于動態性能分析的所述 profiler.so 文件。
[0025]可選地,通過google-PerfTools調用所述prof iler.so文件對所述目標進程進行性能采集,并獲取對應的性能分析結果具體包括:
[0026]通過在所述prof iler.so文件中加入一個新函數,并對所述新函數注冊兩個用于讓所述目標進程接收性能分析啟停的信號;
[0027]通過google-PerfTools調用所述prof iler.so文件對所述目標進程,并進行預置采集時長的性能采集;
[0028]根據預先選擇的性能分析類型進行對應的性能分析結果展示,所述性能分析類型包括cpu性能分析和/或heap性能分析和/或內存泄露檢查。
[0029]本發明實施例提供的一種基于Linux系統的性能采集分析的裝置,包括:
[0030]確定單元,用于確定選擇的目標主機待性能分析的待注入的進程;
[0031 ]目標進程定位單元,用于根據待注入的所述進程找到對應的目標進程的dlopen函數入口地址;
[0032]性能分析文件加載單元,用于通過在所述目標進程中附上的ptrace函數,結合所述dlopen函數入口地址將用于動態性能分析的prof i Ier.so文件加載進所述目標進程;
[0033]性能采集分析單元,用于通過google-PerfTools調用所述profiler.so文件對所述目標進程進行性能采集,并獲取對應的性能分析結果。
[0034]可選地,確定單元具體包括:
[0035]第一確定子單元,用于確定選擇的目標主機的IP地址,并進行連接;
[0036]第二確定子單元,用于確定目標主機進行對應的待性能分析的待注入的所述進程的注入。
[0037]可選地,目標進程定位單元具體包括:
[0038]調用子單元,用于通過運行任意程序調用Iibc.so文件;
[0039]第一絕對地址獲取子單元,用于所述任意程序運行時的agent進程通過調用dlsym函數獲取dlopen函數運行時的第一絕對地址;
[0040]第一起始地址確定子單元,用于在所述agent進程內加載所述I ibc.so文件,以確定第一起始地址;
[0041 ]偏移量確定子單元,用于通過所述第一起始地址和所述第一絕對地址確定所述dlopen函數在所述I ibc.so文件中的偏移量;
[0042]起始地址確定子單元,用于根據待注入的所述進程通過所述libc.so文件確定加載在動態庫中的注入的所述進程對應的起始地址;
[0043]絕對地址計算單元,用于根據所述起始地址與所述偏移量相加得到絕對地址,所述絕對地址為所述目標地址的所述dlopen函數入口地址;
[0044]ptrace函數加載子單元,用于注入的所述進程調用所述ptrace函數加載到所述目標進程。
[0045]可選地,性能分析文件加載單元具體包括:
[0046]傳遞子單元,用于通過傳遞所述dlopen函數入口地址和所述prof iler.so文件的名稱到寄存器;
[0047]profiler.so文件加載子單元,用于通過所述ptrace函數調用dlopen函數在目標進程中加載用于動態性能分析的所述profiler, so文件。
[0048]可選地,性能采集分析單元具體包括:
[0049]信號注冊子單元,用于通過在所述prof iler.so文件中加入一個新函數,并對所述新函數注冊兩個用于讓所述目標進程接收性能分析啟停的信號;
[0050]性能采集子單元,用于通過800816-?6忖1'0018調用所述口1'0;1^161'.80文件對所述目標進程,并進行預置采集時長的性能采集;
[0051]性能分析子單元,用于根據預先選擇的性能分析類型進行對應的性能分析結果展示,所述性能分析類型包括cpu性能分析和/或heap性能分析和/或內存泄露檢查。
[0052]本發明實施例提供的一種基于Linux系統的性能采集分析的系統,其特征在于,包括:
[0053]后臺agent、TcpProxy,以及本實施例中提及的任意一種所述的基于Linux系統的性能采集分析的裝置;
[0054]所述基于Linux系統的性能采集分析的裝置通過所述TcpProxy與所述后臺agent連接;
[0055]所述后臺agent通過獲取到來自于所述基于Linux系統的性能采集分析的裝置的指令對目標主機進行注入目標進行后的性能的采集,并反饋給所述基于Linux系統的性能采集分析的裝置。
[0056]從以上技術方案可以看出,本發明實施例具有以下優點:
[0057]本發明實施例提供的一種基于Linux系統的性能采集分析的方法、裝置及系統,其中,通過動態注入進行性能采集的方法包括:確定選擇的目標主機待性能分析的待注入的進程;根據待注入的進程找到對應的目標進程的dlopen函數入口地址;通過在目標進程中附上的ptrace函數,結合dlopen函數入口地址將用于動態性能分析的prof iler.so文件加載進目標進程;通過google-PerfTools調用prof iler.so文件對目標進程進行性能采集,并獲取對應的性能分析結果。本實施例中,通過根據待注入的進程找到對應的目標進程的dlopen函數入口地址,然后通過在目標進程中附上的ptrace函數,結合dlopen函數入口地址將用于動態性能分析的prof iler.so文件加載進目標進程,最后通過google-Perf Too I s調用profiler, so文件對目標進程進行性能采集,實現了基于Linux系統的性能采集分析,解決了目前常規的通過google-PerfTools來進行性能收集,在去重編譯時,在性能收集之前需要進行環境變量的設置,而導致的性能收集和分析操作繁瑣的技術問題。