本發(fā)明涉及到計算機技術領域,特別涉及到計算機運行監(jiān)測方法、裝置和系統(tǒng)。
背景技術:
目前,智能終端已經成為廣大用戶生活中必不可少的設備之一。人們在最求終端的功能多樣性的同時,對終端的響應速度的要求也越來越高。當終端響應速度較慢時,會造成終端界面停滯的現(xiàn)象,影響用戶正常使用。為了查找影響響應速度、造成運行響應遲滯現(xiàn)象的原因,終端內部通常會對系統(tǒng)進行監(jiān)控,初步定位造成運行響應遲滯的代碼來源?,F(xiàn)有的計算機運行監(jiān)測方法通常是在主線程代碼中標記時間點,在遇到運行響應遲滯時,從代碼中獲取遲滯時間段對應的代碼,來定位造成運行響應遲滯的代碼來源。但是現(xiàn)有方法需要到主線程代碼中查找與遲滯時間段匹配的時間標記點,代碼量多,查找起來非常不方便,無法做到快速精確定位。
技術實現(xiàn)要素:
本發(fā)明實施例提供一種計算機運行監(jiān)測方法、裝置和系統(tǒng),能夠快速精確定位造成運行響應遲滯的代碼來源。
本發(fā)明實施例提出一種計算機運行監(jiān)測方法,包括步驟:
終端通過子線程定期獲取主線程代碼堆棧信息和CPU運行負載信息;
在主線程中執(zhí)行指令消息時,在執(zhí)行前后分別標記時間點,并根據(jù)標記的時間點計算所述指令消息對應的代碼堆棧的執(zhí)行時長;
當所述執(zhí)行時長大于時間閾值時,查找子線程在所述第一時間點至第二時間點之間獲取的代碼堆棧信息和CPU運行負載信息,并錄入日志文件中;
將所述日志文件上報至服務器。
本發(fā)明實施例還提出一種計算機運行監(jiān)測方法,包括步驟:
終端通過子線程定期獲取主線程代碼堆棧信息和CPU運行負載信息;
所述終端在主線程中執(zhí)行指令消息時,在執(zhí)行前后分別標記時間點,并根據(jù)標記的時間點計算所述指令消息對應的代碼堆棧的執(zhí)行時長;
當所述執(zhí)行時長大于時間閾值時,所述終端查找子線程在所述第一時間點至第二時間點之間獲取的代碼堆棧信息和CPU運行負載信息,并錄入日志文件中,上報至服務器;
所述服務器接收各終端上報的日志文件,并統(tǒng)計各日志文件中的每一個代碼堆棧信息出現(xiàn)的次數(shù);
當所述代碼堆棧信息出現(xiàn)的次數(shù)大于次數(shù)閾值時,所述服務器將次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源,并返回統(tǒng)計結果給所述終端。
本發(fā)明實施例還提出一種計算機運行監(jiān)測裝置,包括:
子線程獲取模塊,用于通過子線程定期獲取主線程代碼堆棧信息和CPU運行負載信息;
時間標記模塊,用于在主線程中執(zhí)行指令消息時,在執(zhí)行前后分別標記時間點;
時長計算模塊,用于根據(jù)標記的時間點計算所述指令消息對應的代碼堆棧的執(zhí)行時長;
比較模塊,用于判斷所述執(zhí)行時長是否大于時間閾值;
子線程查找模塊,用于當所述執(zhí)行時長大于時間閾值時,查找子線程在所述第一時間點至第二時間點之間獲取的代碼堆棧信息和CPU運行負載信息,并錄入日志文件中;
上報模塊,用于將所述日志文件上報至服務器。
本發(fā)明實施例還提出一種計算機運行監(jiān)測系統(tǒng),包括終端和服務器:
所述終端用于:
通過子線程定期獲取主線程代碼堆棧信息和CPU運行負載信息;
在主線程中執(zhí)行指令消息時,在執(zhí)行前后分別標記時間點,并根據(jù)標記 的時間點計算所述指令消息對應的代碼堆棧的執(zhí)行時長;
當所述執(zhí)行時長大于時間閾值時,查找子線程在所述第一時間點至第二時間點之間獲取的代碼堆棧信息和CPU運行負載信息,并錄入日志文件中,上報至服務器;
所述服務器用于:
接收各終端上報的日志文件,并統(tǒng)計各日志文件中的每一個代碼堆棧信息出現(xiàn)的次數(shù);
當所述代碼堆棧信息出現(xiàn)的次數(shù)大于次數(shù)閾值時,將次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源,并返回統(tǒng)計結果給所述終端。
本發(fā)明實施例采用子線程定期獲取主線程的代碼堆棧信息,并將獲取的信息與獲取時間關聯(lián),在主線程執(zhí)行指令消息時,當執(zhí)行時長大于時間閾值時,將該指令消息執(zhí)行時間段中子線程獲取的代碼堆棧信息提取出來,記錄到日志文件中,如此一來,從日志文件中能一目了然的查看到造成運行響應遲滯的代碼堆棧信息,實現(xiàn)了快速精確定位造成運行響應遲滯的代碼來源。
附圖說明
圖1為本發(fā)明實施例中計算機運行監(jiān)測裝置所在終端的總線圖;
圖2為本發(fā)明終端實現(xiàn)計算機運行監(jiān)測方法的第一實施例的流程圖;
圖3為本發(fā)明終端實現(xiàn)計算機運行監(jiān)測方法的第二實施例的流程圖;
圖4為本發(fā)明終端實現(xiàn)計算機運行監(jiān)測方法的第三實施例的流程圖;
圖5為本發(fā)明終端和服務器實現(xiàn)計算機運行監(jiān)測方法的第一實施例的流程圖;
圖6為本發(fā)明終端和服務器實現(xiàn)計算機運行監(jiān)測方法的第二實施例的流程圖;
圖7為本發(fā)明終端和服務器實現(xiàn)計算機運行監(jiān)測方法的第三實施例的流程圖;
圖8為本發(fā)明計算機運行監(jiān)測裝置的第一實施例的模塊示意圖;
圖9為本發(fā)明計算機運行監(jiān)測裝置的第二實施例的模塊示意圖;
圖10為本發(fā)明計算機運行監(jiān)測系統(tǒng)實施例的運行環(huán)境圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結合實施例,參照附圖做進一步說明。
具體實施方式
應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
參照圖1,圖1為本發(fā)明實施例中計算機運行監(jiān)測裝置所在終端的總線圖。該終端可以包括:至少一個處理器101,例如CPU,至少一個網(wǎng)絡接口104,用戶接口103,存儲器105,至少一個通信總線102。其中,通信總線102用于實現(xiàn)這些組件之間的連接通信。其中,用戶接口103可以包括顯示屏(Display)、鍵盤(Keyboard),還可以包括標準的有線接口、無線接口。網(wǎng)絡接口104可以包括標準的有線接口、無線接口(如WIFI接口)。存儲器105可以是高速RAM存儲器,也可以是非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。存儲器105還可以是至少一個位于遠離前述處理器101的存儲裝置和系統(tǒng)。作為一種計算機存儲介質的存儲器105中可以包括操作系統(tǒng)、網(wǎng)絡通信模塊、用戶接口模塊以及計算機運行監(jiān)測程序。
在圖2所示的計算機運行監(jiān)測裝置所在終端中,網(wǎng)絡接口104主要用于連接服務器或其他終端,與服務器或其他終端進行數(shù)據(jù)通信;而用戶接口103主要用于接收用戶指令,并與用戶進行交互;而處理器101可以用于調用存儲器105中存儲的計算機運行監(jiān)測程序,并執(zhí)行以下操作:
通過子線程定期獲取主線程代碼堆棧信息和CPU運行負載信息;
在主線程中執(zhí)行指令消息時,在執(zhí)行前后分別標記時間點,并根據(jù)標記的時間點計算指令消息對應的代碼堆棧的執(zhí)行時長;
當執(zhí)行時長大于時間閾值時,查找子線程在第一時間點至第二時間點之間獲取的代碼堆棧信息和CPU運行負載信息,并錄入日志文件中;
通過網(wǎng)絡接口104將日志文件上報至服務器。
在一個實施例中,處理器101調用存儲器105中存儲的計算機運行監(jiān)測程 序還可以執(zhí)行以下操作:
在主線程中,當指令消息到達時,在日志文件中標記第一時間點;
在執(zhí)行完成指令消息對應的代碼堆棧后,在日志文件中標記第二時間點;
根據(jù)第一時間點和第二時間點計算時長,作為指令消息對應的代碼堆棧的執(zhí)行時長。
在一個實施例中,處理器101調用存儲器105中存儲的計算機運行監(jiān)測程序還可以執(zhí)行以下操作:
當日志文件中的代碼堆棧信息在日志文件中重復出現(xiàn),且重復次數(shù)大于次數(shù)閾值時,將重復次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源。
本實施例圖1所描述的計算機運行監(jiān)測裝置及其所在終端,采用子線程定期獲取主線程的代碼堆棧信息,并將獲取的信息與獲取時間關聯(lián),在主線程執(zhí)行指令消息時,當執(zhí)行時長大于時間閾值時,將該指令消息執(zhí)行時間段中子線程獲取的代碼堆棧信息提取出來,記錄到日志文件中,如此一來,從日志文件中能一目了然的查看到造成運行響應遲滯的代碼堆棧信息,實現(xiàn)了快速精確定位造成運行響應遲滯的代碼來源。
如圖2所示,圖2為本發(fā)明終端實現(xiàn)計算機運行監(jiān)測方法的第一實施例的流程圖。本實施例提到的計算機運行監(jiān)測方法,包括:
步驟S110,終端通過子線程定期獲取主線程代碼堆棧信息和CPU運行負載信息;
本實施例的終端在運行過程中,單獨用一個子線程定時去獲取當前時刻主線程執(zhí)行的代碼堆棧信息和CPU運行負載信息,并將獲取的信息保存起來。保存的主線程代碼堆棧信息和CPU運行負載信息需與信息獲取的時間相關聯(lián),可在保存信息時將獲取時間與獲取的信息對應存儲。
步驟S120,在主線程中執(zhí)行指令消息時,在執(zhí)行前后分別標記時間點,并根據(jù)標記的時間點計算指令消息對應的代碼堆棧的執(zhí)行時長;
當用戶在終端上進行操作時,例如滑動屏幕、調大音量、打開應用、下載網(wǎng)絡資源等,都會產生指令消息。在一指令消息生成后,主線程會調用對應的代碼執(zhí)行該指令消息。在執(zhí)行前后,分別在日志中標記執(zhí)行前的時間點 和執(zhí)行后的時間點,兩個標記的時間點之差即為執(zhí)行該指令消息對應的代碼堆棧的時長。
步驟S130,當執(zhí)行時長大于時間閾值時,查找子線程在第一時間點至第二時間點之間獲取的代碼堆棧信息和CPU運行負載信息,并錄入日志文件中;
在計算出執(zhí)行某一指令消息所消耗的時長后,將該時長與預設的時間閾值進行比較,例如將時間閾值設為3000毫秒,如果該時長大于該時間閾值,則說明執(zhí)行該指令消息耗時較長,存在運行響應遲滯。為了查找造成運行響應遲滯的代碼來源,從子線程中查找。由于子線程在定時獲取主線程的代碼堆棧,并且獲取的代碼堆棧與獲取時間關聯(lián)存儲,因此可以根據(jù)某一指令消息的執(zhí)行前時間點和執(zhí)行后時間點來確定一個時間段,并從子線程獲取的信息中查找該時間段內獲取的代碼堆棧信息和CPU運行負載信息。將該時間段內子線程獲取的信息保存到日志中,方便一目了然的查看到日志中的造成運行響應遲滯的代碼。
步驟S140,將日志文件上報至服務器。
為了向服務器獲取提高運行響應速度的解決方案,終端可將記錄有造成運行響應遲滯的代碼信息的日志文件上傳到服務器,服務器根據(jù)日志文件中的信息查找提高運行響應速度的解決方案,并返回給終端。此外,終端記錄在日志文件中的信息也可不立即確定為造成運行響應遲滯的代碼來源,而是作為疑似造成運行響應遲滯的代碼上傳給服務器,服務器對各個終端上傳的日志文件中的信息進行統(tǒng)計,統(tǒng)計出各日志文件中的每一個代碼堆棧信息重復出現(xiàn)的次數(shù),如果次數(shù)過多,再將其作為造成運行響應遲滯的代碼來源,并告知終端。另外,服務器還可以統(tǒng)計同一代碼堆棧信息出現(xiàn)次數(shù)相對于總的使用量的占比,或同一終端出現(xiàn)疑似運行響應遲滯的次數(shù)相對于該終端已處理消息的總次數(shù)的占比等信息,或對造成運行響應遲滯的代碼堆棧排序,根據(jù)上述統(tǒng)計的結果,制定出合適的解決方案,返回給終端。
本實施例采用子線程定期獲取主線程的代碼堆棧信息,并將獲取的信息與獲取時間關聯(lián),在主線程執(zhí)行指令消息時,當執(zhí)行時長大于時間閾值時,將該指令消息執(zhí)行時間段中子線程獲取的代碼堆棧信息提取出來,記錄到日志文件中,如此一來,從日志文件中能一目了然的查看到造成運行響應遲滯的代碼堆棧信息,實現(xiàn)了快速精確定位造成運行響應遲滯的代碼來源。
如圖3所示,圖3為本發(fā)明終端實現(xiàn)計算機運行監(jiān)測方法的第二實施例的流程圖。本實施例包括圖2所示實施例的步驟,步驟S120包括:
步驟S121,在主線程中,當指令消息到達時,在日志文件中標記第一時間點;
步驟S122,在執(zhí)行完成指令消息對應的代碼堆棧后,在日志文件中標記第二時間點;
步驟S123,根據(jù)第一時間點和第二時間點計算時長,作為指令消息對應的代碼堆棧的執(zhí)行時長。
本實施例終端在主線程代碼中切入一標記時間點代碼。當用戶在終端上進行操作時,生成指令消息,在某一指令消息生成后,主線程調用對應的代碼執(zhí)行該指令消息,同時,主線程還調用該標記時間點代碼在日志文件中標記第一時間點,即執(zhí)行前時間點。執(zhí)行完該指令消息后,主線程再次調用該標記時間點代碼在日志文件中標記第二時間點,即執(zhí)行后時間點。第一時間點至第二時間點的時長就是執(zhí)行該指令消息的時長。例如,在源碼Looper.loop中,通過代碼Looper.get Main Looper().set Message Logging(logging)傳入logging變量,在logging.println中進行時間打點,完成dispatch Message(msg)后,根據(jù)標記的時間點計算出dispatch Message(msg)消息執(zhí)行的耗時,即執(zhí)行時長。
本實施例通過在主線程中插入標記時間點代碼,將指令消息執(zhí)行前后時間點標記到日志文件中,方便于快速獲得執(zhí)行一指令消息所消耗的時長,進而有利于快速定位耗時過長的造成運行響應遲滯的代碼,提高計算機運行監(jiān)測效率。
如圖4所示,圖4為本發(fā)明終端實現(xiàn)計算機運行監(jiān)測方法的第三實施例的流程圖。本實施例包括圖2所示實施例的步驟,步驟S130之后還包括:
步驟S150,當日志文件中的代碼堆棧信息在日志文件中重復出現(xiàn),且重復次數(shù)大于次數(shù)閾值時,將重復次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源。
本實施例的終端記錄在日志文件中的信息可不立即確定為造成運行響應 遲滯的代碼來源,而是作為疑似造成運行響應遲滯的代碼。對于偶發(fā)性耗時增大的代碼堆棧信息,可不列為造成運行響應遲滯的代碼。因此可對記錄到日志文件中的代碼堆棧信息的重復性進行篩選,當某一個代碼堆棧信息在終端的日志文件中多次重復出現(xiàn)時,且重復次數(shù)已經超過了預設的次數(shù)閾值,則認為該代碼堆棧信息并不是偶發(fā)性的耗時過長,而是持續(xù)性的,則將該代碼堆棧信息確定為造成運行響應遲滯的代碼來源。如此一來,有利于避免將偶發(fā)耗時增大的代碼堆棧信息作為造成運行響應遲滯的代碼,使定位遲滯代碼更加精確。
如圖5所示,圖5為本發(fā)明終端和服務器實現(xiàn)計算機運行監(jiān)測方法的第一實施例的流程圖。本實施例提到的計算機運行監(jiān)測方法,包括:
步驟S210,終端通過子線程定期獲取主線程代碼堆棧信息和CPU運行負載信息;
本實施例的終端在運行過程中,單獨用一個子線程定時去獲取當前時刻主線程執(zhí)行的代碼堆棧信息和CPU運行負載信息,并將獲取的信息保存起來。保存的主線程代碼堆棧信息和CPU運行負載信息需與信息獲取的時間相關聯(lián),可在保存信息時將獲取時間與獲取的信息對應存儲。
步驟S220,終端在主線程中執(zhí)行指令消息時,在執(zhí)行前后分別標記時間點,并根據(jù)標記的時間點計算指令消息對應的代碼堆棧的執(zhí)行時長;
當用戶在終端上進行操作時,例如滑動屏幕、調大音量、打開應用、下載網(wǎng)絡資源等,都會產生指令消息。在一指令消息生成后,主線程會調用對應的代碼執(zhí)行該指令消息。在執(zhí)行前后,分別在日志中標記執(zhí)行前的時間點和執(zhí)行后的時間點,兩個標記的時間點之差即為執(zhí)行該指令消息對應的代碼堆棧的時長。
步驟S230,當執(zhí)行時長大于時間閾值時,終端查找子線程在第一時間點至第二時間點之間獲取的代碼堆棧信息和CPU運行負載信息,并錄入日志文件中;
在計算出執(zhí)行某一指令消息所消耗的時長后,將該時長與預設的時間閾值進行比較,例如將時間閾值設為3000毫秒,如果該時長大于該時間閾值,則說明執(zhí)行該指令消息耗時較長,存在運行響應遲滯。為了查找造成運行響 應遲滯的代碼來源,從子線程中查找。由于子線程在定時獲取主線程的代碼堆棧,并且獲取的代碼堆棧與獲取時間關聯(lián)存儲,因此可以根據(jù)某一指令消息的執(zhí)行前時間點和執(zhí)行后時間點來確定一個時間段,并從子線程獲取的信息中查找該時間段內獲取的代碼堆棧信息和CPU運行負載信息。將該時間段內子線程獲取的信息保存到日志中,方便一目了然的查看到日志中的造成運行響應遲滯的代碼。
步驟S240,終端上報日志文件至服務器;
步驟S250,服務器接收各終端上報的日志文件,并統(tǒng)計各日志文件中的每一個代碼堆棧信息出現(xiàn)的次數(shù);
為了向服務器獲取提高運行響應速度的解決方案,終端可將記錄有造成運行響應遲滯的代碼信息的日志文件上傳到服務器,服務器根據(jù)日志文件中的信息查找提高運行響應速度的解決方案,并返回給終端。此外,終端記錄在日志文件中的信息也可不立即確定為造成運行響應遲滯的代碼來源,而是作為疑似造成運行響應遲滯的代碼上傳給服務器,服務器對各個終端上傳的日志文件中的信息進行統(tǒng)計,統(tǒng)計出各日志文件中的每一個代碼堆棧信息重復出現(xiàn)的次數(shù)。
步驟S260,當代碼堆棧信息出現(xiàn)的次數(shù)大于次數(shù)閾值時,服務器將次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源,并返回統(tǒng)計結果給終端。
如果次數(shù)過多,再將其作為造成運行響應遲滯的代碼來源,并告知終端。另外,服務器還可以統(tǒng)計同一代碼堆棧信息出現(xiàn)次數(shù)相對于總的使用量的占比,或同一終端出現(xiàn)疑似運行響應遲滯的次數(shù)相對于該終端已處理消息的總次數(shù)的占比等信息,或對造成運行響應遲滯的代碼堆棧排序,根據(jù)上述統(tǒng)計的結果,制定出合適的解決方案,返回給終端。
本實施例采用子線程定期獲取主線程的代碼堆棧信息,并將獲取的信息與獲取時間關聯(lián),在主線程執(zhí)行指令消息時,當執(zhí)行時長大于時間閾值時,將該指令消息執(zhí)行時間段中子線程獲取的代碼堆棧信息提取出來,記錄到日志文件中,如此一來,從日志文件中能一目了然的查看到造成運行響應遲滯的代碼堆棧信息,實現(xiàn)了快速精確定位造成運行響應遲滯的代碼來源。同時,服務器對終端上報的日志文件中各代碼堆棧信息的重復次數(shù)進行統(tǒng)計,將重 復次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源,避免了將偶發(fā)耗時增大的代碼堆棧信息作為造成運行響應遲滯的代碼,使定位遲滯代碼更加精確。
如圖6所示,圖6為本發(fā)明終端和服務器實現(xiàn)計算機運行監(jiān)測方法的第二實施例的流程圖。本實施例包括圖5所示實施例的步驟,步驟S220包括:
步驟S221,在主線程中,當指令消息到達時,終端在日志文件中標記第一時間點;
步驟S222,終端在執(zhí)行完成指令消息對應的代碼堆棧后,在日志文件中標記第二時間點;
步驟S223,終端根據(jù)第一時間點和第二時間點計算時長,作為指令消息對應的代碼堆棧的執(zhí)行時長。
本實施例終端在主線程代碼中切入一標記時間點代碼。當用戶在終端上進行操作時,生成指令消息,在某一指令消息生成后,主線程調用對應的代碼執(zhí)行該指令消息,同時,主線程還調用該標記時間點代碼在日志文件中標記第一時間點,即執(zhí)行前時間點。執(zhí)行完該指令消息后,主線程再次調用該標記時間點代碼在日志文件中標記第二時間點,即執(zhí)行后時間點。第一時間點至第二時間點的時長就是執(zhí)行該指令消息的時長。例如,在源碼Looper.loop中,通過代碼Looper.get Main Looper().set Message Logging(logging)傳入logging變量,在logging.println中進行時間打點,完成dispatch Message(msg)后,根據(jù)標記的時間點計算出dispatch Message(msg)消息執(zhí)行的耗時,即執(zhí)行時長。
本實施例通過在主線程中插入標記時間點代碼,將指令消息執(zhí)行前后時間點標記到日志文件中,方便于快速獲得執(zhí)行一指令消息所消耗的時長,進而有利于快速定位耗時過長的造成運行響應遲滯的代碼,提高計算機運行監(jiān)測效率。
如圖7所示,圖7為本發(fā)明終端和服務器實現(xiàn)計算機運行監(jiān)測方法的第三實施例的流程圖。本實施例包括圖5所示實施例的步驟,步驟S230之后還包括:
步驟S270,當日志文件中的代碼堆棧信息在日志文件中重復出現(xiàn),且重復次數(shù)大于次數(shù)閾值時,終端將重復次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源。
本實施例的終端記錄在日志文件中的信息可不立即確定為造成運行響應遲滯的代碼來源,而是作為疑似造成運行響應遲滯的代碼。對于偶發(fā)性耗時增大的代碼堆棧信息,可不列為造成運行響應遲滯的代碼。因此可對記錄到日志文件中的代碼堆棧信息的重復性進行篩選,當某一個代碼堆棧信息在終端的日志文件中多次重復出現(xiàn)時,且重復次數(shù)已經超過了預設的次數(shù)閾值,則認為該代碼堆棧信息并不是偶發(fā)性的耗時過長,而是持續(xù)性的,則將該代碼堆棧信息確定為造成運行響應遲滯的代碼來源。如此一來,有利于避免將偶發(fā)耗時增大的代碼堆棧信息作為造成運行響應遲滯的代碼,使定位遲滯代碼更加精確。
如圖8所示,圖8為本發(fā)明計算機運行監(jiān)測裝置的第一實施例的模塊示意圖。本實施例提到的計算機運行監(jiān)測裝置,包括:
子線程獲取模塊110,用于通過子線程定期獲取主線程代碼堆棧信息和CPU運行負載信息;
時間標記模塊120,用于在主線程中執(zhí)行指令消息時,在執(zhí)行前后分別標記時間點;
時長計算模塊130,用于根據(jù)標記的時間點計算指令消息對應的代碼堆棧的執(zhí)行時長;
比較模塊140,用于判斷執(zhí)行時長是否大于時間閾值;
子線程查找模塊150,用于當執(zhí)行時長大于時間閾值時,查找子線程在第一時間點至第二時間點之間獲取的代碼堆棧信息和CPU運行負載信息,并錄入日志文件中;
上報模塊160,用于將日志文件上報至服務器。
本實施例的計算機運行監(jiān)測裝置設于終端中。終端在運行過程中,單獨用一個子線程定時去獲取當前時刻主線程執(zhí)行的代碼堆棧信息和CPU運行負載信息,并將獲取的信息保存起來。保存的主線程代碼堆棧信息和CPU運行負載信息需與信息獲取的時間相關聯(lián),可在保存信息時將獲取時間與獲取的 信息對應存儲。
當用戶在終端上進行操作時,例如滑動屏幕、調大音量、打開應用、下載網(wǎng)絡資源等,都會產生指令消息。在一指令消息生成后,主線程會調用對應的代碼執(zhí)行該指令消息。在執(zhí)行前后,分別在日志中標記執(zhí)行前的時間點和執(zhí)行后的時間點,兩個標記的時間點之差即為執(zhí)行該指令消息對應的代碼堆棧的時長。
在計算出執(zhí)行某一指令消息所消耗的時長后,將該時長與預設的時間閾值進行比較,例如將時間閾值設為3000毫秒,如果該時長大于該時間閾值,則說明執(zhí)行該指令消息耗時較長,存在運行響應遲滯。為了查找造成運行響應遲滯的代碼來源,從子線程中查找。由于子線程在定時獲取主線程的代碼堆棧,并且獲取的代碼堆棧與獲取時間關聯(lián)存儲,因此可以根據(jù)某一指令消息的執(zhí)行前時間點和執(zhí)行后時間點來確定一個時間段,并從子線程獲取的信息中查找該時間段內獲取的代碼堆棧信息和CPU運行負載信息。將該時間段內子線程獲取的信息保存到日志中,方便一目了然的查看到日志中的造成運行響應遲滯的代碼。
為了向服務器獲取提高運行響應速度的解決方案,終端可將記錄有造成運行響應遲滯的代碼信息的日志文件上傳到服務器,服務器根據(jù)日志文件中的信息查找提高運行響應速度的解決方案,并返回給終端。此外,終端記錄在日志文件中的信息也可不立即確定為造成運行響應遲滯的代碼來源,而是作為疑似造成運行響應遲滯的代碼上傳給服務器,服務器對各個終端上傳的日志文件中的信息進行統(tǒng)計,統(tǒng)計出各日志文件中的每一個代碼堆棧信息重復出現(xiàn)的次數(shù),如果次數(shù)過多,再將其作為造成運行響應遲滯的代碼來源,并告知終端。另外,服務器還可以統(tǒng)計同一代碼堆棧信息出現(xiàn)次數(shù)相對于總的使用量的占比,或同一終端出現(xiàn)疑似運行響應遲滯的次數(shù)相對于該終端已處理消息的總次數(shù)的占比等信息,或對造成運行響應遲滯的代碼堆棧排序,根據(jù)上述統(tǒng)計的結果,制定出合適的解決方案,返回給終端。
本實施例采用子線程定期獲取主線程的代碼堆棧信息,并將獲取的信息與獲取時間關聯(lián),在主線程執(zhí)行指令消息時,當執(zhí)行時長大于時間閾值時,將該指令消息執(zhí)行時間段中子線程獲取的代碼堆棧信息提取出來,記錄到日志文件中,如此一來,從日志文件中能一目了然的查看到造成運行響應遲滯 的代碼堆棧信息,實現(xiàn)了快速精確定位造成運行響應遲滯的代碼來源。
進一步的,時間標記模塊120還用于,在主線程中,當指令消息到達時,在日志文件中標記第一時間點;在執(zhí)行完成指令消息對應的代碼堆棧后,在日志文件中標記第二時間點;
時長計算模塊130還用于,根據(jù)第一時間點和第二時間點計算時長,作為指令消息對應的代碼堆棧的執(zhí)行時長。
本實施例終端在主線程代碼中切入一標記時間點代碼。當用戶在終端上進行操作時,生成指令消息,在某一指令消息生成后,主線程調用對應的代碼執(zhí)行該指令消息,同時,主線程還調用該標記時間點代碼在日志文件中標記第一時間點,即執(zhí)行前時間點。執(zhí)行完該指令消息后,主線程再次調用該標記時間點代碼在日志文件中標記第二時間點,即執(zhí)行后時間點。第一時間點至第二時間點的時長就是執(zhí)行該指令消息的時長。例如,在源碼Looper.loop中,通過代碼Looper.get Main Looper().set Message Logging(logging)傳入logging變量,在logging.println中進行時間打點,完成dispatch Message(msg)后,根據(jù)標記的時間點計算出dispatch Message(msg)消息執(zhí)行的耗時,即執(zhí)行時長。
本實施例通過在主線程中插入標記時間點代碼,將指令消息執(zhí)行前后時間點標記到日志文件中,方便于快速獲得執(zhí)行一指令消息所消耗的時長,進而有利于快速定位耗時過長的造成運行響應遲滯的代碼,提高計算機運行監(jiān)測效率。
如圖9所示,圖9為本發(fā)明計算機運行監(jiān)測裝置的第二實施例的模塊示意圖。本實施例包括圖8所示實施例的模塊,還包括來源確定模塊170,用于當日志文件中的代碼堆棧信息在日志文件中重復出現(xiàn),且重復次數(shù)大于次數(shù)閾值時,將重復次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源。
本實施例的終端記錄在日志文件中的信息可不立即確定為造成運行響應遲滯的代碼來源,而是作為疑似造成運行響應遲滯的代碼。對于偶發(fā)性耗時增大的代碼堆棧信息,可不列為造成運行響應遲滯的代碼。因此可對記錄到 日志文件中的代碼堆棧信息的重復性進行篩選,當某一個代碼堆棧信息在終端的日志文件中多次重復出現(xiàn)時,且重復次數(shù)已經超過了預設的次數(shù)閾值,則認為該代碼堆棧信息并不是偶發(fā)性的耗時過長,而是持續(xù)性的,則將該代碼堆棧信息確定為造成運行響應遲滯的代碼來源。如此一來,有利于避免將偶發(fā)耗時增大的代碼堆棧信息作為造成運行響應遲滯的代碼,使定位遲滯代碼更加精確。
如圖10所示,圖10為本發(fā)明計算機運行監(jiān)測系統(tǒng)實施例的運行環(huán)境圖。本實施例提到的計算機運行監(jiān)測系統(tǒng),包括終端100和服務器200:
終端100用于:
通過子線程定期獲取主線程代碼堆棧信息和CPU運行負載信息;
在主線程中執(zhí)行指令消息時,在執(zhí)行前后分別標記時間點,并根據(jù)標記的時間點計算指令消息對應的代碼堆棧的執(zhí)行時長;
當執(zhí)行時長大于時間閾值時,查找子線程在第一時間點至第二時間點之間獲取的代碼堆棧信息和CPU運行負載信息,并錄入日志文件中,上報至服務器200;
服務器200用于:
接收各終端100上報的日志文件,并統(tǒng)計各日志文件中的每一個代碼堆棧信息出現(xiàn)的次數(shù);
當代碼堆棧信息出現(xiàn)的次數(shù)大于次數(shù)閾值時,將次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源,并返回統(tǒng)計結果給終端100。
本實施例的終端在運行過程中,單獨用一個子線程定時去獲取當前時刻主線程執(zhí)行的代碼堆棧信息和CPU運行負載信息,并將獲取的信息保存起來。保存的主線程代碼堆棧信息和CPU運行負載信息需與信息獲取的時間相關聯(lián),可在保存信息時將獲取時間與獲取的信息對應存儲。
當用戶在終端上進行操作時,例如滑動屏幕、調大音量、打開應用、下載網(wǎng)絡資源等,都會產生指令消息。在一指令消息生成后,主線程會調用對應的代碼執(zhí)行該指令消息。在執(zhí)行前后,分別在日志中標記執(zhí)行前的時間點和執(zhí)行后的時間點,兩個標記的時間點之差即為執(zhí)行該指令消息對應的代碼 堆棧的時長。
在計算出執(zhí)行某一指令消息所消耗的時長后,將該時長與預設的時間閾值進行比較,例如將時間閾值設為3000毫秒,如果該時長大于該時間閾值,則說明執(zhí)行該指令消息耗時較長,存在運行響應遲滯。為了查找造成運行響應遲滯的代碼來源,從子線程中查找。由于子線程在定時獲取主線程的代碼堆棧,并且獲取的代碼堆棧與獲取時間關聯(lián)存儲,因此可以根據(jù)某一指令消息的執(zhí)行前時間點和執(zhí)行后時間點來確定一個時間段,并從子線程獲取的信息中查找該時間段內獲取的代碼堆棧信息和CPU運行負載信息。將該時間段內子線程獲取的信息保存到日志中,方便一目了然的查看到日志中的造成運行響應遲滯的代碼。
為了向服務器獲取提高運行響應速度的解決方案,終端可將記錄有造成運行響應遲滯的代碼信息的日志文件上傳到服務器,服務器根據(jù)日志文件中的信息查找提高運行響應速度的解決方案,并返回給終端。此外,終端記錄在日志文件中的信息也可不立即確定為造成運行響應遲滯的代碼來源,而是作為疑似造成運行響應遲滯的代碼上傳給服務器,服務器對各個終端上傳的日志文件中的信息進行統(tǒng)計,統(tǒng)計出各日志文件中的每一個代碼堆棧信息重復出現(xiàn)的次數(shù)。
如果次數(shù)過多,再將其作為造成運行響應遲滯的代碼來源,并告知終端。另外,服務器還可以統(tǒng)計同一代碼堆棧信息出現(xiàn)次數(shù)相對于總的使用量的占比,或同一終端出現(xiàn)疑似運行響應遲滯的次數(shù)相對于該終端已處理消息的總次數(shù)的占比等信息,或對造成運行響應遲滯的代碼堆棧排序,根據(jù)上述統(tǒng)計的結果,制定出合適的解決方案,返回給終端。
本實施例采用子線程定期獲取主線程的代碼堆棧信息,并將獲取的信息與獲取時間關聯(lián),在主線程執(zhí)行指令消息時,當執(zhí)行時長大于時間閾值時,將該指令消息執(zhí)行時間段中子線程獲取的代碼堆棧信息提取出來,記錄到日志文件中,如此一來,從日志文件中能一目了然的查看到造成運行響應遲滯的代碼堆棧信息,實現(xiàn)了快速精確定位造成運行響應遲滯的代碼來源。同時,服務器對終端上報的日志文件中各代碼堆棧信息的重復次數(shù)進行統(tǒng)計,將重復次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源,避免了將偶發(fā)耗時增大的代碼堆棧信息作為造成運行響應遲滯的代碼,使定 位遲滯代碼更加精確。
進一步的,終端100還用于:
在主線程中,當指令消息到達時,在日志文件中標記第一時間點;
在執(zhí)行完成指令消息對應的代碼堆棧后,在日志文件中標記第二時間點;
根據(jù)第一時間點和第二時間點計算時長,作為指令消息對應的代碼堆棧的執(zhí)行時長。
本實施例終端在主線程代碼中切入一標記時間點代碼。當用戶在終端上進行操作時,生成指令消息,在某一指令消息生成后,主線程調用對應的代碼執(zhí)行該指令消息,同時,主線程還調用該標記時間點代碼在日志文件中標記第一時間點,即執(zhí)行前時間點。執(zhí)行完該指令消息后,主線程再次調用該標記時間點代碼在日志文件中標記第二時間點,即執(zhí)行后時間點。第一時間點至第二時間點的時長就是執(zhí)行該指令消息的時長。例如,在源碼Looper.loop中,通過代碼Looper.get Main Looper().set Message Logging(logging)傳入logging變量,在logging.println中進行時間打點,完成dispatch Message(msg)后,根據(jù)標記的時間點計算出dispatch Message(msg)消息執(zhí)行的耗時,即執(zhí)行時長。
本實施例通過在主線程中插入標記時間點代碼,將指令消息執(zhí)行前后時間點標記到日志文件中,方便于快速獲得執(zhí)行一指令消息所消耗的時長,進而有利于快速定位耗時過長的造成運行響應遲滯的代碼,提高計算機運行監(jiān)測效率。
進一步的,終端100還用于:
當日志文件中的代碼堆棧信息在日志文件中重復出現(xiàn),且重復次數(shù)大于次數(shù)閾值時,將重復次數(shù)大于次數(shù)閾值的代碼堆棧信息確定為造成運行響應遲滯的代碼來源。
本實施例的終端記錄在日志文件中的信息可不立即確定為造成運行響應遲滯的代碼來源,而是作為疑似造成運行響應遲滯的代碼。對于偶發(fā)性耗時增大的代碼堆棧信息,可不列為造成運行響應遲滯的代碼。因此可對記錄到日志文件中的代碼堆棧信息的重復性進行篩選,當某一個代碼堆棧信息在終 端的日志文件中多次重復出現(xiàn)時,且重復次數(shù)已經超過了預設的次數(shù)閾值,則認為該代碼堆棧信息并不是偶發(fā)性的耗時過長,而是持續(xù)性的,則將該代碼堆棧信息確定為造成運行響應遲滯的代碼來源。如此一來,有利于避免將偶發(fā)耗時增大的代碼堆棧信息作為造成運行響應遲滯的代碼,使定位遲滯代碼更加精確。
需要說明的是,在本文中,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置和系統(tǒng)不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置和系統(tǒng)所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置和系統(tǒng)中還存在另外的相同要素。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產品的形式體現(xiàn)出來,該計算機軟件產品存儲在一個存儲介質(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
以上所述僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內。