本發(fā)明涉及計算機技術領域,特別是涉及一種進程清理的方法及裝置。
背景技術:
在Linux、Unix等操作系統(tǒng)中通常運行有多個進程。目前,在進程出現(xiàn)運行時間長、運行錯誤等問題時,需要通過監(jiān)控進程來分析問題的原因。
現(xiàn)有方案可以將strace和pstack工具結(jié)合起來使用,直接用來找到影響進程運行時間的函數(shù)調(diào)用,再有針對地對相關函數(shù)進行代碼分析和優(yōu)化。其中,strace工具可以跟蹤進程使用的底層系統(tǒng)調(diào)用,可輸出系統(tǒng)調(diào)用被執(zhí)行的時間點以及各個調(diào)用的耗時;pstack工具可以對指定PID(進程ID,Process Identity)的進程輸出函數(shù)調(diào)用棧。
PHP(超文本處理器,Hypertext Preprocessor)腳本是一種由PHP解釋器來執(zhí)行的進程,然而現(xiàn)有strace和pstack僅僅能夠提供PHP解釋器的系統(tǒng)調(diào)用信息,而無法提供PHP腳本的信息,因此,無法滿足PHP腳本的分析需求。
技術實現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種進程清理的方法和裝置。
依據(jù)本發(fā)明的一個方面,提供了一種進程清理的方法,所述方法包括:
在PHP解釋器中創(chuàng)建PHP跟蹤程序;
利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息;
根據(jù)所述函數(shù)信息,檢測與所述函數(shù)信息對應的應用程序中是否存在資源占用率大于預設比率的應用程序;
在檢測到存在所述資源占用率大于所述預設比率的應用程序時,從正在 運行的進程中選取非必要進程,并清除所述非必要進程。
可選的,所述利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息,具體包括:
根據(jù)待監(jiān)控信息對應變量相對預置全局變量的偏移量,獲取所述變量的地址;以及
利用所述PHP跟蹤程序,監(jiān)控所述變量的地址在所述操作的執(zhí)行過程中的信息。
可選的,在所述利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息之前,所述方法還包括:
通過讀取共享內(nèi)存,判斷所述進程對應的監(jiān)控開關是否開啟;
在所述進程對應的監(jiān)控開關開啟時,利用所述PHP跟蹤程序跟蹤所述操作的執(zhí)行過程中的函數(shù)信息;
將所述函數(shù)信息寫入所述共享內(nèi)存,由命令行工具從所述共享內(nèi)存中讀取所述函數(shù)信息。
可選的,所述將所述函數(shù)信息寫入所述共享內(nèi)存的步驟,包括:
將所述函數(shù)信息寫入所述共享內(nèi)存中所述進程對應的內(nèi)存映射文件。
可選的,所述方法還包括:
利用所述PHP跟蹤程序獲取所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的調(diào)用棧信息。
可選的,所述監(jiān)控開關的開啟和關閉由所述命令行工具控制。
依據(jù)本發(fā)明的另一方面,提供了一種進程清理的裝置,所述裝置包括:
函數(shù)創(chuàng)建單元,用于在PHP解釋器中創(chuàng)建PHP跟蹤程序;
監(jiān)控單元,用于利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息;
檢測單元,用于根據(jù)所述函數(shù)信息,檢測與所述函數(shù)信息對應的應用程序中是否存在資源占用率大于預設比率的應用程序;
清除單元,用于在檢測到存在所述資源占用率大于所述預設比率的應用程序時,從正在運行的進程中選取非必要進程,并清除所述非必要進程。
可選的,所述監(jiān)控單元,具體包括:
地址獲取子單元,用于根據(jù)待監(jiān)控信息對應變量相對預置全局變量的偏移量,獲取所述變量的地址;以及
監(jiān)控子單元,用于利用所述PHP跟蹤程序,監(jiān)控所述變量的地址在所述操作的執(zhí)行過程中的信息。
可選的,所述裝置還包括:
判斷單元,用于在所述利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息之前,通過讀取共享內(nèi)存,判斷所述進程對應的監(jiān)控開關是否開啟;
所述監(jiān)控單元,具體用于在所述進程對應的監(jiān)控開關開啟時,利用所述PHP跟蹤程序跟蹤所述操作的執(zhí)行過程中的函數(shù)信息;
則所述裝置還包括:
寫入單元,用于將所述函數(shù)信息寫入所述共享內(nèi)存,由命令行工具從所述共享內(nèi)存中讀取所述函數(shù)信息。
可選的,所述寫入單元,具體用于將所述函數(shù)信息寫入所述共享內(nèi)存中所述進程對應的內(nèi)存映射文件。
可選的,所述裝置還包括:
棧信息獲取單元,用于利用所述PHP跟蹤程序獲取所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的調(diào)用棧信息;。
可選的,所述監(jiān)控開關的開啟和關閉由所述命令行工具控制。
根據(jù)本發(fā)明實施例的一種進程清理的方法及裝置,在PHP解釋器中創(chuàng)建PHP跟蹤程序;利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息,這里的函數(shù)信息可以為PHP函數(shù)在執(zhí)行過程中的所有函數(shù)信息,如函數(shù)名、函數(shù)參數(shù)、行號、文件名等信息,并且,還可以在函數(shù)執(zhí)行完成后獲取函數(shù)返回值、函數(shù)調(diào)用時間等信息,這樣,可以實時獲取操作的執(zhí)行過程中的函數(shù)信息并進行輸出,因此,能夠方便PHP腳本的開發(fā)人員快速定位PHP腳本的問題;而且還可以根據(jù)所述函數(shù)信息實時監(jiān)控處理器中應用程序的資源占用率,在檢測到存在某一應用程 度的資源占用率大于所述預設比率時,則清除所述非必要進程,從而能夠確保資源占用率大于所述預設比率的應用程序的穩(wěn)定運行性能。
上述說明僅是本發(fā)明技術方案的概述,為了能夠更清楚了解本發(fā)明的技術手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
通過閱讀下文可選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出可選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個實施例的一種進程清理的方法的第一種流程圖;
圖2示出了根據(jù)本發(fā)明一個實施例的一種進程清理的方法的第二種流程圖;
圖3示出了根據(jù)本發(fā)明一個實施例的一種進程清理的裝置的結(jié)構圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領域的技術人員。
參見圖1,根據(jù)本發(fā)明一個實施例提供了一種進程清理的方法,具體可以包括如下步驟:
S101、在PHP解釋器中創(chuàng)建PHP跟蹤程序;以及
S102、利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息;
S103、根據(jù)所述函數(shù)信息,檢測與所述函數(shù)信息對應的應用程序中是否 存在資源占用率大于預設比率的應用程序;
S104、在檢測到存在所述資源占用率大于所述預設比率的應用程序時,從正在運行的進程中選取非必要進程,并清除所述非必要進程。
其中,PHP腳本在PHP解釋器中一般會經(jīng)過詞法解析、語法解析、編譯生成中間代碼和執(zhí)行中間代碼等步驟;其中,默認情況下執(zhí)行中間代碼的步驟是通過zend/zend_vm_execute.h文件中的zend_execute函數(shù)調(diào)用執(zhí)行完成,對于所有的中間代碼,默認實現(xiàn)是以按順序執(zhí)行,當遇到函數(shù)等情況時跳出去執(zhí)行,執(zhí)行完后再回到跳出的位置繼續(xù)執(zhí)行。
在步驟S101中,在PHP解釋器中創(chuàng)建PHP跟蹤程序,所述PHP跟蹤程序具體為PHPtrace函數(shù),PHPtrace函數(shù)具體是類strace的一個實現(xiàn),不同的是,strace用來追蹤系統(tǒng)調(diào)用,而PHPtrace函數(shù)能夠用來追蹤PHP函數(shù)調(diào)用,從而使得創(chuàng)建的所述PHP跟蹤程序能夠?qū)崟r監(jiān)控PHP函數(shù)調(diào)用信息。
在具體實施過程中,由于PHPtrace函數(shù)具體可以是類strace的一個實現(xiàn),從而可以直接根據(jù)strace的架構,來創(chuàng)建所述PHP跟蹤程序。
接下來執(zhí)行步驟S102,在該步驟中,利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息。
在具體實施過程中,由于所述PHP跟蹤程序具體是類strace的一個實現(xiàn),從而可以利用所述PHP跟蹤程序來監(jiān)控所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息。
具體的,通過所述PHP跟蹤程序?qū)崟r監(jiān)控所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的所有函數(shù)調(diào)用信息,當然,也可以監(jiān)控所述PHP解釋器中執(zhí)行的其它腳本的所有函數(shù)調(diào)用信息,本申請不作具體限制。
本發(fā)明實施例的核心構思之一在于,在PHP解釋器中創(chuàng)建PHP跟蹤程序,所述PHP跟蹤程序具體為PHPtrace函數(shù),PHPtrace函數(shù)具體可以是類strace的一個實現(xiàn),不同的是,strace用來追蹤系統(tǒng)調(diào)用,而PHPtrace函數(shù)能夠用來追蹤PHP函數(shù)調(diào)用,進而使得在創(chuàng)建所述PHP跟蹤程序之后,利用所述PHP跟蹤程序所述操作(op,operation)的執(zhí)行過程中的函數(shù)信息,這里的函數(shù)信息可以為PHP函數(shù)在執(zhí)行過程中的所有函數(shù)信息,如函數(shù)名、 函數(shù)參數(shù)、行號、文件名等信息,并且,還可以在函數(shù)執(zhí)行完成后獲取函數(shù)返回值、函數(shù)調(diào)用時間等信息,這樣,可以實時獲取操作的執(zhí)行過程中的函數(shù)信息并輸出,因此,能夠方便PHP腳本的開發(fā)人員快速定位PHP腳本的問題。
在實際應用中,可以將所述獲取的各信息寫入*data文件,并通過該*data文件輸出。當然,本發(fā)明實施例對具體的輸出方式不加以限制。
接下來執(zhí)行步驟S103、根據(jù)所述函數(shù)信息,檢測與所述函數(shù)信息對應的應用程序中是否存在資源占用率大于預設比率的應用程序。
在具體實施過程中,在通過步驟S102獲取到所述操作的執(zhí)行過程中的函數(shù)信息之后,在執(zhí)行步驟S103過程中,由于所述操作是與所述處理器中運行的進程相對應的,而進程與應用程序相對應,從而可以根據(jù)所述函數(shù)信息,能夠檢測出與所述函數(shù)信息對應的應用程序中是否存在資源占用率大于預設比率的應用程序,在檢測到存在資源占用率大于所述預設比率的應用程序時,執(zhí)行步驟S104;在檢測到不存在資源占用率大于所述預設比率的應用程序時,可以繼續(xù)保持該狀態(tài),其中,所述函數(shù)信息中包括調(diào)用函數(shù)名稱、數(shù)量等信息。
具體來講,所述預設比率可以根據(jù)實際情況來設定,具體可以設置為不小于2%的數(shù)值,例如可以為2%、3%等,以確保所述處理器的運行效率,其中,所述資源占用率的取值范圍為0~100%。
例如,利用所述PHP跟蹤程序檢測到所述操作的執(zhí)行過程中的函數(shù)信息之后,對所述函數(shù)信息進行分析,針對每一個檢測到a應用程序的資源占用率為5%時,若所述預設比率為2%,由于2%<3%,則存在資源占用率大于所述預設比率的應用程序,執(zhí)行步驟S104。
在實際應用過程中,在檢測到存在資源占用率大于所述預設比率的應用程序時,而資源占用率大于所述預設比率的應用程序通常是非常重要的應用程序,該應用程序可以為大型運算軟件對應的應用程序例如為AutoCAD,如此,為了確保該應用程序的穩(wěn)定運行性能,通過清除所述非必要進程,為所述處理器清理出更多的空閑資源,以使得該應用程序在運行過程中的資源 得以確保,從而能夠有效提高該應用程序的穩(wěn)定運行性能。
在檢測到存在所述資源占用率大于所述預設比率的應用程序時,執(zhí)行步驟S104,從正在運行的進程中選取非必要進程,并清除所述非必要進程。
在具體實施過程中,在檢測到存在所述資源占用率大于所述預設比率的應用程序時,獲取所述處理器中所有正在運行的進程,然后從其中選取所述非必要進程,并清除所述非必要進程。
具體來講,在選取所述非必要進程時,針對各正在運行的進程,首先檢測進程是否為系統(tǒng)必須進程,若是,則確定該進程不為所述非必要進程,若不是,則檢測與該進程對應的函數(shù)是否被調(diào)用,若未被調(diào)用,則確定該進程為所述非必要進程;當然也可以針對非必要進程建立黑名單,將所述處理器中所有正在運行的進程中的每一個進程與所述黑名單進行比對,從所述處理器中所有正在運行的進程中選取在所述黑名單中的進程作為所述非必要進程,所述黑名單的建立可以通過優(yōu)化工具、例如優(yōu)化大師等進行實時采集進程而建立的。
例如,針對非必要進程建立黑名單中包括的進程為a1、a2、b1和b2,然后將所述處理器中所有正在運行的進程中的每一個進程與所述黑名單進行比對,檢測到所述處理器中所有正在運行的進程中存在a1和b2,由于所述黑名單中也存在a1和b2,如此,可以確定所述處理器中所有正在運行的進程中的非必要進程為a1和b2,并清除a1和b2,使得a1和b2占用的資源被釋放,使得所述處理器的使用率得以降低,為所述處理器清理出更多的空閑資源,以使得該應用程序在運行過程中的資源得以確保,從而能夠有效提高該應用程序的穩(wěn)定運行性能。
在本發(fā)明的一種應用場景中,可以監(jiān)控變量的地址在所述操作的執(zhí)行過程中的信息,以實現(xiàn)分析感興趣信息的PHP代碼的目的。相應地,所述利用所述PHP跟蹤程序跟蹤所述操作的執(zhí)行過程中的函數(shù)信息的步驟,具體可以包括:根據(jù)待監(jiān)控信息對應變量相對預置全局變量的偏移量,獲取所述變量的地址;以及利用所述PHP跟蹤程序,監(jiān)控所述變量的地址在所述操作的執(zhí)行過程中的信息。其中,所述待監(jiān)控信息可以為各種感興趣信息,例 如,可以使用GDB(GNU偵錯器,GNU Debugger)獲取PHP腳本進程的一些核心的預置全局變量,并利用所述PHP跟蹤程序,監(jiān)控所述變量的地址在所述操作的執(zhí)行過程中的信息。
在本發(fā)明的另一種應用場景中,當PHP腳本的線上界面上顯示有“沒有文件”、而文件夾中存在該文件時,可以利用所述PHP跟蹤程序定位上述文件不一致問題的原因。相應地,在監(jiān)控所述操作的執(zhí)行過程中的函數(shù)信息中,發(fā)現(xiàn)函數(shù)opendir()的返回值報錯了,而opendir()為用于打開目錄句柄的函數(shù),故可以定位上述文件不一致問題的原因為:打開目錄出現(xiàn)問題,而不是文件夾中不存在文件。
當然,上述應用場景只是作為示例,本領域技術人員可以根據(jù)實際需求,將本發(fā)明實施例應用于其它應用場景,如用于定位“某函數(shù)執(zhí)行時間過長”的原因,或者,用于定位“PHP腳本執(zhí)行時間長”的原因等等,本發(fā)明實施例對具體的應用場景不加以限制。
綜上,本發(fā)明實施例將PHP解釋器的操作執(zhí)行函數(shù)替換為預置的監(jiān)控函數(shù),并利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息,這里的函數(shù)信息可以為PHP函數(shù)在執(zhí)行過程中的所有函數(shù)信息,如函數(shù)名、函數(shù)參數(shù)、行號、文件名等信息,并且,還可以在函數(shù)執(zhí)行完成后獲取函數(shù)返回值、函數(shù)調(diào)用時間等信息,這樣,可以實時獲取操作的執(zhí)行過程中的函數(shù)信息并進行輸出,因此,能夠方便PHP腳本的開發(fā)人員快速定位PHP腳本的問題;而且還可以根據(jù)所述函數(shù)信息實時監(jiān)控處理器中應用程序的資源占用率,在檢測到存在某一應用程度的資源占用率大于所述預設比率時,則清除所述非必要進程,從而能夠確保資源占用率大于所述預設比率的應用程序的穩(wěn)定運行性能。
參見圖2,本發(fā)明一個實施例提供了一種進程清理的方法,具體可以包括如下步驟:
S201、在PHP解釋器中創(chuàng)建PHP跟蹤程序;
S202、通過讀取共享內(nèi)存,判斷所述進程對應的監(jiān)控開關是否開啟;
S203、在所述進程對應的監(jiān)控開關開啟時,利用所述PHP跟蹤程序跟 蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息;
S204、將所述函數(shù)信息寫入所述共享內(nèi)存,由命令行工具從所述共享內(nèi)存中讀取所述函數(shù)信息;
S205、根據(jù)所述函數(shù)信息,檢測與所述函數(shù)信息對應的應用程序中是否存在資源占用率大于預設比率的應用程序;
S206、在檢測到存在所述資源占用率大于所述預設比率的應用程序時,從正在運行的進程中選取非必要進程,并清除所述非必要進程。
相對于圖1所示實施例,本實施例在PHP解釋器中創(chuàng)建PHP跟蹤程序之后,可以在共享內(nèi)存中存儲進程對應的監(jiān)控開關,并通過讀取共享內(nèi)存判斷所述進程對應的監(jiān)控開關是否開啟,從而可以根據(jù)判斷結(jié)果確定是否開啟或關閉監(jiān)控功能;其中,在所述進程對應的監(jiān)控開關開啟時,可以開啟監(jiān)控功能,并利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息;在所述進程對應的監(jiān)控開關關閉時,可以關閉監(jiān)控功能。
在實際應用中,為存儲操作系統(tǒng)中所有進程的監(jiān)控開關,共享內(nèi)存中可以存儲有預置數(shù)目的監(jiān)控開關,如所述預置數(shù)目可以為216等等,當然,本發(fā)明實施例對所述預置數(shù)目的具體數(shù)值不加以限制。
在本發(fā)明的一種可選實施例中,所述將所述函數(shù)信息寫入所述共享內(nèi)存的步驟,具體可以包括:將所述函數(shù)信息寫入所述共享內(nèi)存中所述進程對應的內(nèi)存映射文件。通過內(nèi)存映射文件可以保留一個地址空間的區(qū)域,同時將物理存儲器提交給此區(qū)域,只是內(nèi)存文件映射的物理存儲器來自一個已經(jīng)存在于磁盤上的文件,而非系統(tǒng)的頁文件,而且在對該文件進行操作之前必須首先對文件進行映射,就如同將整個文件從磁盤加載到內(nèi)存。由此可以看出,使用內(nèi)存映射文件處理存儲于磁盤上的文件時,將不必再對文件執(zhí)行I/O(輸入/輸出,Input/Output)操作,這意味著在對文件進行處理時將不必再為文件申請并分配緩存,所有的文件緩存操作均由操作系統(tǒng)直接管理,由于取消了將文件數(shù)據(jù)加載到內(nèi)存、數(shù)據(jù)從內(nèi)存到文件的回寫以及釋放內(nèi)存塊等步驟,使得內(nèi)存映射文件在處理大數(shù)據(jù)量的文件時能起到寫入速度快和讀取速 度快的作用。Mmap文件為內(nèi)存映射文件的一種示例,當然本發(fā)明實施例對具體的內(nèi)存映射文件不加以限制。
在另一實施例中,本發(fā)明提供了一種進程清理的方法,,所述方法還包括:
利用所述PHP跟蹤程序獲取所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的調(diào)用棧信息。
相對于圖1所示實施例,本實施例除了可以監(jiān)控進程對應操作的執(zhí)行過程中的函數(shù)信息外,還可以利用所述PHP跟蹤程序查找得到PHP解釋器執(zhí)行的各操作執(zhí)行過程中的調(diào)用棧信息,也即能夠提供PHP解釋器執(zhí)行的各操作執(zhí)行過程中的調(diào)用棧信息的快照功能,相對于利用pstack直接得到PHP解釋器的調(diào)用棧信息僅僅能夠反映PHP解釋器的執(zhí)行信息,例如:
pstack 3130
0x00000035ee6accc0 in__nanosleep_nocancel()from/lib64/libc.so.6
0x00000035ee6acb50 in sleep()from/lib64/libc.so.6
0x0000000000714f23 in zif_sleep()
0x00000000008e36cd in execute_internal()
0x00007f27b38b2b77 in phptrace_execute_core()from/home/renyongquan/opt/php5.4.35/lib/php/extensions/debug-non-zts-20100525/phptrace.so
0x00007f27b38b2c04 in phptrace_execute_internal()from/home/renyongq uan/opt/php5.4.35/lib/php/extensions/debug-non-zts-20100525/phptrace.so
0x00000000008e44bc in zend_do_fcall_common_helper_SPEC()
3130為php-fpm的進程ID,通過pstack查看到時PHP解釋器的調(diào)用棧,然而對于一個PHP開發(fā)者來說,需要的是PHP解釋器中PHP腳本的調(diào)用棧,具體可以通過phptrace函數(shù)獲取,具體如下:
./phptrace-p 3130-s
phptrace 0.1demo,published by infra webcore team
process id=3130
script_filename=/home/renyongquan/opt/nginx//webapp/block.php
[0x7f27b9a99dc8] sleep/home/renyongquan/opt/nginx/webapp/block.php:6
[0x7f27b9a99d08] say/home/renyongquan/opt/nginx/webapp/block.php:3
[0x7f27b9a99c50] run/home/renyongquan/opt/nginx/webapp/block.php:10
程序輸出的第一行是版本信息,第二行顯示了其進程PID,第三行是當前執(zhí)行的PHP腳本,從第四行開始就是調(diào)用棧信息,從上述信息可以看出,最外層run函數(shù)調(diào)用了say函數(shù),最終調(diào)用了sleep函數(shù),如此,可以通過所述PHPtrace函數(shù)能夠獲取PHP腳本的運行狀態(tài)信息,因此能夠方便PHP腳本的開發(fā)人員快速定位PHP腳本的問題。
對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明實施例并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明實施例,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于可選實施例,所涉及的動作并不一定是本發(fā)明實施例所必須的。
基于與上述方法相同的技術構思,本發(fā)明一個實施例提供了一種進程清理的裝置,參見圖3,所述裝置包括:
函數(shù)創(chuàng)建單元301,用于在PHP解釋器中創(chuàng)建PHP跟蹤程序;
監(jiān)控單元302,用于利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息;
檢測單元303,用于根據(jù)所述函數(shù)信息,檢測與所述函數(shù)信息對應的應用程序中是否存在資源占用率大于預設比率的應用程序;
清除單元304,用于在檢測到存在所述資源占用率大于所述預設比率的應用程序時,從正在運行的進程中選取非必要進程,并清除所述非必要進程。
具體的,監(jiān)控單元302,具體包括:
地址獲取子單元,用于根據(jù)待監(jiān)控信息對應變量相對預置全局變量的偏移量,獲取所述變量的地址;以及
監(jiān)控子單元,用于利用所述PHP跟蹤程序,監(jiān)控所述變量的地址在所述操作的執(zhí)行過程中的信息。
具體的,所述裝置還包括:
判斷單元,用于在所述利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息之前,通過讀取共享內(nèi)存,判斷所述進程對應的監(jiān)控開關是否開啟;
監(jiān)控單元302,具體用于在所述進程對應的監(jiān)控開關開啟時,利用所述PHP跟蹤程序跟蹤所述操作的執(zhí)行過程中的函數(shù)信息;
則所述裝置還包括:
寫入單元,用于將所述函數(shù)信息寫入所述共享內(nèi)存,由命令行工具從所述共享內(nèi)存中讀取所述函數(shù)信息。
具體的,所述寫入單元,具體用于將所述函數(shù)信息寫入所述共享內(nèi)存中所述進程對應的內(nèi)存映射文件。
具體的,所述裝置還包括:
棧信息獲取單元,用于利用所述PHP跟蹤程序獲取所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的調(diào)用棧信息。
具體的,所述監(jiān)控開關的開啟和關閉由所述命令行工具控制。
在實際應用中,所述裝置和命令行工具還可以通過心跳機制進行通信,其中,所述裝置和命令行工具可以互相發(fā)送心跳信息,其中,當所述裝置在心跳周期內(nèi)未接收命令行工具發(fā)送的心跳信息時,可以認為二者的通信連接斷開,因此可以關閉監(jiān)控功能,以節(jié)省監(jiān)控所需的資源。
根據(jù)本發(fā)明實施例的一種進程清理的方法及裝置,在PHP解釋器中創(chuàng)建PHP跟蹤程序;利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息,這里的函數(shù)信息可以為PHP函數(shù)在執(zhí)行過程中的所有函數(shù)信息,如函數(shù)名、函數(shù)參數(shù)、行號、文件名等信息,并且,還可以在函數(shù)執(zhí)行完成后獲取函數(shù)返回值、函數(shù)調(diào)用時間等信息,這樣,可以實時獲取操作的執(zhí)行過程中的函數(shù)信息并進行輸出,因此,能夠方便PHP腳本的開發(fā)人員快速定位PHP腳本的問題;而且還可以根據(jù)所述函數(shù)信息實時監(jiān)控處理器中應用程序的資源占用率,在檢測到存在某一應用程度的資源占用率大于所述預設比率時,則清除所述非必要進程,從而能夠確保資源占用率大于所述預設比率的應用程序的穩(wěn)定運行性能。
對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設備固有相關。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構造這類系統(tǒng)所要求的結(jié)構是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構和技術,以便不模糊對本說明書的理解。
類似地,應當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權利要求中所明確記載的特征更多的特征。更確切地說,如下面的權利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權利要求書由此明確地并入該具體實施方式,其中每個權利要求本身都作為本發(fā)明的單獨實施例。
本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其 它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的進程清理的方法和裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)平臺上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中,不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞“包括”不排除存在未列在權利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
本發(fā)明公開A1、一種進程清理的方法,其特征在于,所述方法包括:
在PHP解釋器中創(chuàng)建PHP跟蹤程序;
利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息;
根據(jù)所述函數(shù)信息,檢測與所述函數(shù)信息對應的應用程序中是否存在資源占用率大于預設比率的應用程序;
在檢測到存在所述資源占用率大于所述預設比率的應用程序時,從正在運行的進程中選取非必要進程,并清除所述非必要進程。
A2、如A1所述的方法,其特征在于,所述利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息,具體包括:
根據(jù)待監(jiān)控信息對應變量相對預置全局變量的偏移量,獲取所述變量的地址;以及
利用所述PHP跟蹤程序,監(jiān)控所述變量的地址在所述操作的執(zhí)行過程中的信息。
A3、如A1所述的方法,其特征在于,在所述利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息之前,所述方法還包括:
通過讀取共享內(nèi)存,判斷所述進程對應的監(jiān)控開關是否開啟;
在所述進程對應的監(jiān)控開關開啟時,利用所述PHP跟蹤程序跟蹤所述操作的執(zhí)行過程中的函數(shù)信息;
將所述函數(shù)信息寫入所述共享內(nèi)存,由命令行工具從所述共享內(nèi)存中讀取所述函數(shù)信息。
A4、如A3所述的方法,其特征在于,所述將所述函數(shù)信息寫入所述共享內(nèi)存的步驟,包括:
將所述函數(shù)信息寫入所述共享內(nèi)存中所述進程對應的內(nèi)存映射文件。
A5、如A1或A2或A3或A4所述的方法,其特征在于,所述方法還包括:
利用所述PHP跟蹤程序獲取所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的調(diào)用棧信息。
A6、如A3所述的方法,其特征在于,所述監(jiān)控開關的開啟和關閉由所述命令行工具控制。
B7、一種進程清理的裝置,其特征在于,所述裝置包括:
函數(shù)創(chuàng)建單元,用于在PHP解釋器中創(chuàng)建PHP跟蹤程序;
監(jiān)控單元,用于利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息;
檢測單元,用于根據(jù)所述函數(shù)信息,檢測與所述函數(shù)信息對應的應用程序中是否存在資源占用率大于預設比率的應用程序;
清除單元,用于在檢測到存在所述資源占用率大于所述預設比率的應用程序時,從正在運行的進程中選取非必要進程,并清除所述非必要進程。
B8、如B7所述的裝置,其特征在于,所述監(jiān)控單元,具體包括:
地址獲取子單元,用于根據(jù)待監(jiān)控信息對應變量相對預置全局變量的偏移量,獲取所述變量的地址;以及
監(jiān)控子單元,用于利用所述PHP跟蹤程序,監(jiān)控所述變量的地址在所述操作的執(zhí)行過程中的信息。
B9、如B7所述的裝置,其特征在于,所述裝置還包括:
判斷單元,用于在所述利用所述PHP跟蹤程序跟蹤所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的函數(shù)信息之前,通過讀取共享內(nèi)存,判斷所述進程對應的監(jiān)控開關是否開啟;
所述監(jiān)控單元,具體用于在所述進程對應的監(jiān)控開關開啟時,利用所述PHP跟蹤程序跟蹤所述操作的執(zhí)行過程中的函數(shù)信息;
則所述裝置還包括:
寫入單元,用于將所述函數(shù)信息寫入所述共享內(nèi)存,由命令行工具從所述共享內(nèi)存中讀取所述函數(shù)信息。
B10、如B9所述的裝置,其特征在于,所述寫入單元,具體用于將所述函數(shù)信息寫入所述共享內(nèi)存中所述進程對應的內(nèi)存映射文件。
B11、如B7或B8或B9或B10所述的裝置,其特征在于,所述裝置還包括:
棧信息獲取單元,用于利用所述PHP跟蹤程序獲取所述PHP解釋器針對進程編譯得到的操作的執(zhí)行過程中的調(diào)用棧信息。
B12、如B9所述的裝置,其特征在于,所述監(jiān)控開關的開啟和關閉由所述命令行工具控制。