本發明專利技術提供了一種進程關鍵數據采集方法及裝置,本發明專利技術通過以進程標識和類型標識為進程關鍵數據中不同統計數據的索引,減少了每個數據塊的訪問進程數。對于進程關鍵數據的采集來講,減小了后臺服務進程與agent進程,以及后臺服務進程之間發生沖突的幾率,有效避免了后臺服務進程和agent進程的互斥,增強了進程關鍵數據采集的可靠性。
【技術實現步驟摘要】
本專利技術涉及為海量用戶提供服務的后臺服務進程技術,尤指一種后臺服務進程的 進程關鍵數據采集方法及裝置。
技術介紹
后臺服務進程的進程關鍵數據是指,形如后臺服務進程的接收請求量、成功應答 量、異常失敗量等關鍵統計數據。這些數據是衡量后臺服務質量如效率、性能、穩定性等的 重要依據,也是問題排查的著手點,對于海量用戶產品有著深遠意義。然而,由于某些原因, 現有的數據采集方式存在缺陷,導致采集效果并不理想。通過數據采集,將后臺服務進程的進程關鍵數據搜集起來,再結合Web展示、短信 報警等方式,業務負責人可以輕松掌握業務的運行狀況。目前在數據采集方面,比較成熟的 是公司級代理(agent)上報。圖1為現有后臺進程關鍵數據采集的系統組成示意圖,如圖1所示,數據采集動作 分散在業務端的每臺服務器上,采集到的進程關鍵數據上傳至數據中心,然后可以結合Web 展示、短信報警等方式,通過顯示系統向業務負責人顯示業務的運行狀況,還可以通過報警 系統對采集到的異常采集到的進程關鍵數據進行報警處理。每臺服務器上除了后臺服務進 程(這些進程為用戶提供相同的服務),還會部署一個agent進程,后臺服務進程與agent 進程通過讀寫同一塊共享內存空間來實現對進程關鍵數據的采集。圖2為后臺服務進程與agent進程通過讀寫同一塊共享內存空間來實現對進程關 鍵數據的采集的邏輯關系示意圖,如圖2所示,后臺服務進程的進程關鍵數據會有很多種 類的統計數據,每種統計數據分別用一個唯一的類型標識(Id)來標識,如類型Id為1代表 收到的請求量、類型Id為2代表成功應答量等,也就是說,有多少種統計數據,就對應多少 個類型Id。共享內存是一塊大的哈希(hash)表,以統計類型Id為索引,value字段存放具 體統計值。可用偽代碼表示其算法value = Hash (id)。當后臺服務進程要更新某個統計數據時,根據該數據對應的類型Id索引到相應 的數據塊,然后執行更新操作;同時,agent進程每分鐘遍歷一次共享內存,并將所有有效 的進程關鍵數據上報到數據中心,然后把當前統計值清零。這樣,數據中心就能搜集到業務 端每臺服務器以分鐘為單位的統計值。對于共享內存空間中的某一個數據塊,由于后臺服務進程和agent進程都會有寫 操作,必然涉及到互斥問題。目前,對于互斥的最好解決方案是利用鎖機制,但出于效率和 穩定性方面的考慮,后臺服務進程并不希望使用鎖機制。因此,目前后臺服務進程和agent 進程都是直接對數據塊進行讀寫的,沒有采取任何保護措施。以對接收請求量的采集為例, 共享內存中會有一個數據塊,記錄到目前為止收到的請求的個數;每個后臺服務進程每收 到一個新請求,都會找到該數據塊,并對數據塊中存儲的收到的請求的個數執行加1操作; 同時,當agent進程掃描到該數據塊時,上報當前值,然后清零。現有技術中,在后臺服務進程與agent進程通過讀寫同一塊共享內存空間來實現對進程關鍵數據的采集時,后臺服務進程和agent進程都是直接對數據塊進行讀寫的,而 沒有采取任何保護措施,這樣會存在以下問題(1)由于沒有采取任何保護措施,如果agent代理清零和后臺服務進程加1發生的 時刻很近,而調度順序正好為agent代理讀取統計值、后臺服務進程讀取統計值、agent代 理清零、后臺服務進程將加1后的值寫入內存中的數據塊,那么,會導致agent代理的清零 動作失效,這樣,下一分鐘的統計值將會嚴重偏大。(2)對于相同的統計數據,所有的后臺服務進程共享同一個內存塊,也同樣存在 ⑴中所描述的問題。(3)隨著后臺服務進程數的增加,沖突幾率會越來越大,最終導致統計數據的可靠 性急劇下降。實驗結果表明,在壓力測試環境下,偏差率可達到0. 1%。
技術實現思路
有鑒于此,本專利技術的主要目的在于提供一種進程關鍵數據采集方法及裝置,能夠 避免后臺服務進程和agent進程的互斥,增強進程關鍵數據采集的可靠性。為達到上述目的,本專利技術的技術方案是這樣實現的一種進程關鍵數據采集方法,預先設置以進程標識和類型標識為進程關鍵數據中 不同統計數據的索引,該方法還包括后臺服務進程要更新統計數據時,根據該數據對應的類型標識和進程標識索引到 相應的數據塊,執行更新操作;代理進程按照預設周期遍歷共享內存,將所有有效的進程關 鍵數據上報到數據中心,并將當前索引到的數據塊的當前統計值清零。所述進程標識為pid%m,其中,m與實際可用空間有關,%為取模運算符,pid表 示進程標識。所述代理進程將當前索引到的數據塊的當前統計值清零為所述代理進程在對所 述當前索引到的數據塊的當前統計值連續執行兩次清零。一種進程關鍵數據采集裝置,至少包括后臺服務進程處理模塊、代理進程處理模 塊和存儲模塊,其中,存儲模塊,位于共享內存中,用于存儲進程關鍵數據,存儲的進程關鍵數據以進程 標識和類型標識為索引;后臺服務進程處理模塊,用于在更新統計數據時,根據該數據對應的類型標識和 進程標識索引到相應的存儲模塊,執行更新操作;代理進程處理模塊,用于按照預設周期遍歷共享內存中的存儲模塊,將所有有效 的進程關鍵數據上報到數據中心,并將當前索引到的存儲模塊中的當前統計值清零。所述代理進程處理模塊,具體用于在對所述數據塊進行清零時,連續執行兩次清零。所述裝置設置在業務端的服務器中。從上述本專利技術提供的技術方案可以看出,本專利技術通過以進程標識和類型標識為進 程關鍵數據中不同統計數據的索引,減少了每個數據塊的訪問進程數。對于進程關鍵數據 的采集來講,減小了后臺服務進程與agent進程,以及后臺服務進程之間發生沖突的幾率, 有效避免了后臺服務進程和agent進程的互斥,增強了進程關鍵數據采集的可靠性。附圖說明圖1為現有后臺進程關鍵數據采集的系統組成示意圖;圖2為現有后臺服務進程與agent進程通過讀寫同一塊共享內存空間來實現對進 程關鍵數據的采集的邏輯關系示意圖;圖3為本專利技術進程關鍵數據采集方法的實施例的流程圖;圖4為本專利技術后臺服務進程與agent進程通過讀寫同一塊共享內存空間來實現對 進程關鍵數據的采集的邏輯關系示意圖;圖5為本專利技術進程關鍵數據采集裝置的實施例的組成結構示意圖。 具體實施例方式圖3為本專利技術進程關鍵數據采集方法的實施例的流程圖,如圖3所示,包括以下步 驟步驟300 預先設置以進程標識和類型標識為進程關鍵數據中不同統計數據的索 引。圖4為本專利技術后臺服務進程與agent進程通過讀寫同一塊共享內存空間來實現對 進程關鍵數據的采集的邏輯關系示意圖,如圖4所示,對于同一塊共享內存,由于各個進程 的進程標識(pid)是互不重復的,這樣,本專利技術進一步將不同后臺進程的同類統計數據盡 量分散到了不同的數據塊中。在內存空間充足的情況下,最理想的狀況是一個數據塊最 多有agent進程和一個后臺服務進程訪問。可用偽代碼表示其算法value = Hash2(Id, pid),其中,Id為類型標識,pid為后臺服務進程的進程標識。本步驟中,在實際應用時,可能會存在內存空間有限的情況,針對這種情況,本步 驟中的進程標識可以使用如Pid% m(取模)的折中方式來取值,即讓若干個進程標識同時 取值為pid% m并共享同一數據塊(即采用pid% m和類型標識來同時標識同一數據塊), 以此本文檔來自技高網...
【技術保護點】
一種進程關鍵數據采集方法,其特征在于,預先設置以進程標識和類型標識為進程關鍵數據中不同統計數據的索引,該方法還包括:后臺服務進程要更新統計數據時,根據該數據對應的類型標識和進程標識索引到相應的數據塊,執行更新操作;代理進程按照預設周期遍歷共享內存,將所有有效的進程關鍵數據上報到數據中心,并將當前索引到的數據塊的當前統計值清零。
【技術特征摘要】
【專利技術屬性】
技術研發人員:舒軍,田明,袁清,萬單領,邢玉東,
申請(專利權)人:騰訊科技深圳有限公司,
類型:發明
國別省市:94
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。