勢(shì),如該微信應(yīng)用進(jìn)程的內(nèi)存占用值在10點(diǎn)10分到10點(diǎn)20分的時(shí)間段內(nèi)的子變化趨勢(shì)是遞增趨勢(shì),該微信應(yīng)用進(jìn)程的內(nèi)存占用值在10點(diǎn)30分到10點(diǎn)40分的時(shí)間段內(nèi)的子變化趨勢(shì)是遞增趨勢(shì),該微信應(yīng)用進(jìn)程的內(nèi)存占用值在10點(diǎn)50分到11點(diǎn)整的時(shí)間段內(nèi)的子變化趨勢(shì)是非遞增趨勢(shì),該微信應(yīng)用進(jìn)程的內(nèi)存占用值在11點(diǎn)整到11點(diǎn)10分的時(shí)間段內(nèi)的子變化趨勢(shì)是非遞增趨勢(shì),該微信應(yīng)用進(jìn)程的內(nèi)存占用值在11點(diǎn)10分到11點(diǎn)20分的時(shí)間段內(nèi)的子變化趨勢(shì)是遞增趨勢(shì),則認(rèn)為微信應(yīng)用進(jìn)程的內(nèi)存占用值的變化趨勢(shì)為遞增趨勢(shì)。
[0095]參照?qǐng)D6,圖6為本發(fā)明內(nèi)存泄露檢測(cè)裝置的第二實(shí)施例的結(jié)構(gòu)示意圖。
[0096]基于上述內(nèi)存泄露檢測(cè)裝置的第一實(shí)施例,該裝置還包括:獲取模塊13,用于獲取測(cè)試腳本,該測(cè)試腳本為shell腳本;
[0097]該采集模塊10,還用于運(yùn)行shell腳本采集被測(cè)進(jìn)程的內(nèi)存采樣信息。
[0098]該獲取模塊13可直接從該被測(cè)進(jìn)程所在的終端的存儲(chǔ)器中讀取,也可通過(guò)與該被測(cè)進(jìn)程所在的終端進(jìn)行有線(xiàn)連接或無(wú)線(xiàn)連接的其他終端獲取測(cè)試腳本,在一實(shí)施例中,如該被測(cè)進(jìn)程所在的終端為安卓手機(jī),與該安卓手機(jī)連接的終端為平板電腦,該平板電腦上保存有用于進(jìn)行內(nèi)存泄露檢測(cè)的測(cè)試腳本,該獲取模塊13從該平板電腦中獲取測(cè)試腳本,并將該測(cè)試腳本保存在安卓手機(jī)中(如保存在安卓手機(jī)的SD卡中);在另一實(shí)施例中,該獲取模塊13從該被測(cè)進(jìn)程所在的終端的SD卡中讀取測(cè)試腳本。
[0099]該測(cè)試腳本為shell腳本,該測(cè)試腳本運(yùn)行在該被測(cè)進(jìn)程所在的終端的底層。由于該shell腳本運(yùn)行在該被測(cè)進(jìn)程所在的終端的底層,因此可通過(guò)該shell腳本準(zhǔn)確的采集到被測(cè)程序的內(nèi)存采樣信息,具體的,采集模塊10,用于運(yùn)行shell腳本采集被測(cè)進(jìn)程的內(nèi)存采樣信息。
[0100]參照?qǐng)D7,圖7為本發(fā)明內(nèi)存泄露檢測(cè)裝置的第三實(shí)施例的結(jié)構(gòu)示意圖。
[0101]基于上述內(nèi)存泄露檢測(cè)裝置的第一實(shí)施例或第二實(shí)施例,該裝置還包括:
[0102]定位模塊14,用于在該被測(cè)進(jìn)程存在內(nèi)存泄露時(shí),根據(jù)該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)定位該被測(cè)進(jìn)程發(fā)生內(nèi)存泄露的對(duì)象或代碼段。
[0103]在該被測(cè)進(jìn)程存在內(nèi)存泄露時(shí),有可能只是由于該被測(cè)進(jìn)程的某一部分代碼段或?qū)ο笤谶\(yùn)行時(shí)導(dǎo)致內(nèi)存泄露,在該定位模塊14根據(jù)被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)定位該被測(cè)進(jìn)程發(fā)生內(nèi)存泄露的對(duì)象或代碼段,如,從該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)中找到內(nèi)存占用值處于遞增的時(shí)間點(diǎn),再查找到在該時(shí)間點(diǎn)時(shí),用戶(hù)進(jìn)行了一些什么操作,進(jìn)而查找到對(duì)應(yīng)的對(duì)象或代碼段,即查找到發(fā)生內(nèi)存泄露的對(duì)象或代碼段,如在圖5所示的某個(gè)被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)的示意圖,在第169秒到第190秒采集的內(nèi)存占用值明顯增加,且增加后的內(nèi)存占用值比之前采集的內(nèi)存占用值都大,因此可認(rèn)為在第169秒到第190秒運(yùn)行被測(cè)進(jìn)程時(shí)發(fā)生了內(nèi)存泄露,查找在該第169秒到第190秒時(shí),用戶(hù)進(jìn)行了一些什么操作,進(jìn)而查找到對(duì)應(yīng)的對(duì)象或代碼段,對(duì)發(fā)生內(nèi)存泄露的對(duì)象或代碼段進(jìn)行定位。
[0104]參照?qǐng)D8,圖8為本發(fā)明內(nèi)存泄露檢測(cè)裝置的第四實(shí)施例的結(jié)構(gòu)示意圖,該裝置還包括:
[0105]發(fā)送模塊21,用于將所述采集的被測(cè)進(jìn)程的內(nèi)存采樣信息發(fā)送給監(jiān)控終端,以使得所述監(jiān)控終端生成所述被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),并根據(jù)所述被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),判斷所述被測(cè)進(jìn)程是否存在內(nèi)存泄露。
[0106]該被測(cè)進(jìn)程所在的終端與監(jiān)控終端之間建立有線(xiàn)或無(wú)線(xiàn)連接,如在一實(shí)施例中,該被測(cè)進(jìn)程所在的終端為安卓手機(jī),該監(jiān)控終端為平板電腦,該安卓手機(jī)與該平板電腦通過(guò)USB數(shù)據(jù)線(xiàn)連接,或該安卓手機(jī)與該平板電腦通過(guò)無(wú)線(xiàn)通訊技術(shù)連接。
[0107]該發(fā)送模塊21可將采集的被測(cè)進(jìn)程的多個(gè)內(nèi)存采樣信息以日志文件形式發(fā)送給監(jiān)控終端,監(jiān)控終端在接收到被測(cè)進(jìn)程的多個(gè)內(nèi)存采樣信息后,進(jìn)行分析,以確定該被測(cè)進(jìn)程是否存在內(nèi)存泄露,具體的,該監(jiān)控終端首先生成該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),然后根據(jù)該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),判斷該被測(cè)進(jìn)程是否存在內(nèi)存泄露。
[0108]本發(fā)明進(jìn)一步提供一種內(nèi)存泄露檢測(cè)方法。
[0109]參照?qǐng)D9,圖9為本發(fā)明內(nèi)存泄露檢測(cè)方法的第一實(shí)施例的流程示意圖,該方法包括:
[0110]S10、米集被測(cè)進(jìn)程的內(nèi)存米樣彳目息,所述內(nèi)存米樣彳目息包括米樣時(shí)間、被測(cè)進(jìn)程在所述采樣時(shí)間對(duì)應(yīng)的內(nèi)存占用值。
[0111]被測(cè)進(jìn)程所在的終端可為智能手機(jī)、平板電腦等,該被測(cè)進(jìn)程所在的終端的操作系統(tǒng)可為安卓系統(tǒng),在本發(fā)明中,以該被測(cè)進(jìn)程所在的終端為安卓手機(jī)為例。
[0112]該被測(cè)進(jìn)程可以有一個(gè)或多個(gè),如該被測(cè)進(jìn)程為微信應(yīng)用進(jìn)程、微博應(yīng)用進(jìn)程、瀏覽器應(yīng)用進(jìn)程等應(yīng)用中的一個(gè)或多個(gè)。
[0113]該被測(cè)進(jìn)程在正常運(yùn)行時(shí),用戶(hù)通過(guò)該被測(cè)進(jìn)程執(zhí)行各種操作,如當(dāng)該被測(cè)進(jìn)程為微信應(yīng)用進(jìn)程時(shí),用戶(hù)通過(guò)該微信應(yīng)用進(jìn)程進(jìn)行聊天(語(yǔ)音聊天、文字聊天、視頻聊天)、發(fā)朋友圈、創(chuàng)建/刪除聯(lián)系人等。
[0114]在該步驟中,采集被測(cè)進(jìn)程的內(nèi)存采樣信息,具體的,可按照預(yù)設(shè)時(shí)間間隔定時(shí)采集被測(cè)進(jìn)程的多個(gè)內(nèi)存采樣信息,如每隔十秒采集一次被測(cè)進(jìn)程的內(nèi)存采樣信息,則在十分鐘內(nèi)得到60個(gè)內(nèi)存采樣信息。
[0115]在一實(shí)施例中,該被測(cè)進(jìn)程只有一個(gè),如該被測(cè)進(jìn)程為微信應(yīng)用進(jìn)程,在該步驟中,采集該微信應(yīng)用進(jìn)程的內(nèi)存采樣信息,如每隔十秒鐘采集一次微信應(yīng)用進(jìn)程的內(nèi)存采樣信息,則在十分鐘內(nèi)得到60個(gè)內(nèi)存采樣信息。
[0116]在另一實(shí)施例中,該被測(cè)進(jìn)程有多個(gè),如該被測(cè)進(jìn)程包括微信應(yīng)用進(jìn)程和微博應(yīng)用進(jìn)程,則在該步驟中,分別采集該微信應(yīng)用進(jìn)程和微博應(yīng)用進(jìn)程的多個(gè)內(nèi)存采樣數(shù)據(jù),如每隔十秒鐘采集一次微信應(yīng)用進(jìn)程和微博應(yīng)用進(jìn)程的內(nèi)存采樣信息,則在十分鐘內(nèi)分別得到微信應(yīng)用進(jìn)程的60個(gè)內(nèi)存采樣信息和微博應(yīng)用進(jìn)程的60個(gè)內(nèi)存采樣信息。
[0117]該內(nèi)存采樣信息包括采樣時(shí)間、被測(cè)進(jìn)程在該采樣時(shí)間對(duì)應(yīng)的內(nèi)存占用值,即在該步驟中,記錄采樣時(shí)間和被測(cè)進(jìn)程在該采樣時(shí)間對(duì)應(yīng)的內(nèi)存占用值;該內(nèi)存占用值為T(mén)OTAL的Prviate dirty值,如圖4所示,表示一被測(cè)進(jìn)程在某一時(shí)刻所消耗的內(nèi)存情況,該內(nèi)存占用值為15624(對(duì)應(yīng)第2列第12行的數(shù)值)。
[0118]S11、生成該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)。
[0119]根據(jù)在步驟SlO中采集的被測(cè)進(jìn)程的內(nèi)存占用值生成該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),如該被測(cè)進(jìn)程為微信應(yīng)用進(jìn)程,采集的內(nèi)存占用值有60個(gè)時(shí),則在XY坐標(biāo)軸中,X值上表示采樣點(diǎn)編號(hào)(如1、2、3、4.......59,60)或采樣時(shí)間,Y值表示采樣點(diǎn)編號(hào)或采樣時(shí)間對(duì)應(yīng)的內(nèi)存占用值??蛇x的,在XY坐標(biāo)中通過(guò)柱狀圖表示被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),如圖5所示,X軸表示采樣時(shí)間(X軸上的I表示第I秒,8表示第8秒,15表示第15秒,依次類(lèi)推,204表示第204秒),Y軸表示內(nèi)存占用值(單位為KB)??蛇x的,在XY坐標(biāo)中通過(guò)折線(xiàn)圖表示被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)。
[0120]在被測(cè)進(jìn)程只有一個(gè)時(shí),則生成一個(gè)被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),如該被測(cè)進(jìn)程為微信應(yīng)用進(jìn)程,則只生成該微信應(yīng)用進(jìn)程的內(nèi)存占用值的變化趨勢(shì);在該被測(cè)進(jìn)程有多個(gè)時(shí),則分別生成各個(gè)被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),如該被測(cè)進(jìn)程為微信應(yīng)用進(jìn)程和微博應(yīng)用進(jìn)程,則分別生成該微信應(yīng)用進(jìn)程和微博應(yīng)用進(jìn)程的內(nèi)存占用值的變化趨勢(shì)。
[0121]該步驟Sll可在該被測(cè)進(jìn)程所在的終端執(zhí)行,也可在該被測(cè)進(jìn)程所在的終端之外的另一個(gè)終端上執(zhí)行,如該被測(cè)進(jìn)程所在的終端為安卓手機(jī),則該步驟Sll可在該安卓手機(jī)上執(zhí)行,也可在平板電腦上執(zhí)行。
[0122]S12、根據(jù)該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),判斷該被測(cè)進(jìn)程是否存在內(nèi)存泄
Mo
[0123]通常的,在被測(cè)進(jìn)程發(fā)生內(nèi)存泄露時(shí),該被測(cè)進(jìn)程的內(nèi)存占用值會(huì)變大,即該被測(cè)進(jìn)程在使用完某個(gè)分配的內(nèi)存后,沒(méi)有及時(shí)釋放,在需要內(nèi)存時(shí),要重新分配新的內(nèi)存,導(dǎo)致該被測(cè)進(jìn)程的內(nèi)存占用值變大;因此,在該步驟中,可以通過(guò)判斷該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),確定該被測(cè)進(jìn)程是否存在泄露。
[0124]米用上述實(shí)施例,米集被測(cè)進(jìn)程的內(nèi)存米樣?目息,該內(nèi)存米樣?目息包括米樣時(shí)間、被測(cè)進(jìn)程在該采樣時(shí)間對(duì)應(yīng)的內(nèi)存占用值;生成該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì);根據(jù)該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),判斷該被測(cè)進(jìn)程是否存在內(nèi)存泄露;可被測(cè)進(jìn)程根據(jù)該采集的內(nèi)存采樣信息判斷被測(cè)進(jìn)程是否發(fā)生內(nèi)存泄露,可提高內(nèi)存泄露檢測(cè)的準(zhǔn)確性。
[0125]進(jìn)一步的,根據(jù)該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),判斷該被測(cè)進(jìn)程是否存在內(nèi)存泄露的步驟包括:
[0126]若該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)為遞增趨勢(shì),則判斷該被測(cè)進(jìn)程存在內(nèi)存泄露,否則,判斷該被測(cè)進(jìn)程不存在內(nèi)存泄露。
[0127]在該步驟中,判斷該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)是否為遞增趨勢(shì),具體的,當(dāng)該被測(cè)進(jìn)程的內(nèi)存占用值一直處于增加,則認(rèn)為該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)為遞增趨勢(shì),當(dāng)該被測(cè)進(jìn)程的內(nèi)存占用值一會(huì)增大、一會(huì)減小,但是增大的幅度遠(yuǎn)遠(yuǎn)大于減小的幅度,則認(rèn)為被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì)為遞增趨勢(shì)。
[0128]當(dāng)在多個(gè)預(yù)設(shè)時(shí)間采集了該被測(cè)進(jìn)程的多個(gè)內(nèi)存采樣信息時(shí),則分別分析每一個(gè)預(yù)設(shè)時(shí)間采集的該被測(cè)進(jìn)程的多個(gè)內(nèi)存采樣信息的內(nèi)存占用值對(duì)應(yīng)的子變化趨勢(shì),再根據(jù)該被測(cè)進(jìn)程的內(nèi)存占用值在各個(gè)預(yù)設(shè)時(shí)間內(nèi)的子變化趨勢(shì)確定該被測(cè)進(jìn)程的內(nèi)存占用值的變化趨勢(shì),當(dāng)該子變化趨勢(shì)為遞增趨勢(shì)的次數(shù)大于子變化趨勢(shì)為非遞增趨勢(shì)(遞減趨勢(shì)或