日志采集系統(tǒng)線池自適應(yīng)方法
【專利摘要】日志采集系統(tǒng)線池自適應(yīng)方法涉及日志采集系統(tǒng)中有關(guān)線程池的自適應(yīng)問題。在日志采集系統(tǒng)增加基于事件驅(qū)動(dòng)的檢查器,設(shè)置與任務(wù)隊(duì)列相關(guān)的閾值α、日志處理所需理論時(shí)間TE和日志處理時(shí)間容忍度β三個(gè)參數(shù)創(chuàng)建線程池;系統(tǒng)每接受到一個(gè)日志即為一個(gè)事件,驅(qū)動(dòng)檢查器檢測當(dāng)前任務(wù)隊(duì)列大小是否超過α;α=2;如果超過則啟動(dòng)如下線程啟發(fā)方法:計(jì)算tn定義為理論需要增加的線程個(gè)數(shù),TE定義為處理日志所需的理論時(shí)間,AVGTQ定義為最近α次日志到達(dá)系統(tǒng)的平均間隔,PT定義為系統(tǒng)當(dāng)前時(shí)刻線程池中線程的數(shù)目;然后,判斷tn與α大小,然后取較小值最為真正需要增加的線程數(shù)目;最后創(chuàng)建空閑等待時(shí)間大小為TE的非核心線程或則日志做緩存處理。本發(fā)明動(dòng)態(tài)調(diào)整線程池,保證日志快速處理。
【專利說明】日志采集系統(tǒng)線池自適應(yīng)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明主要涉及日志采集系統(tǒng),主要考慮日志采集系統(tǒng)中有關(guān)線程池的自適應(yīng)問 題。
【背景技術(shù)】
[0002] 隨著信息技術(shù)的發(fā)展,各組織機(jī)構(gòu)為了其內(nèi)部網(wǎng)絡(luò)需要,部署了多種多樣的網(wǎng)絡(luò) 設(shè)備和應(yīng)用服務(wù)器。這些應(yīng)用服務(wù)器和網(wǎng)絡(luò)設(shè)備每天都在產(chǎn)生大量的日志,這些日志記錄 了設(shè)備的運(yùn)行情況和用戶對(duì)應(yīng)用服務(wù)器的訪問操作??梢酝ㄟ^分析日志進(jìn)而監(jiān)控網(wǎng)絡(luò)運(yùn) 行,優(yōu)化網(wǎng)絡(luò)設(shè)備和應(yīng)用服務(wù)器。
[0003] 目前,由于日志并無統(tǒng)一的格式規(guī)范要求不利于進(jìn)一步的分析工作,所以需要對(duì) 日志進(jìn)行處理,由此產(chǎn)生了日志采集系統(tǒng)。但隨著網(wǎng)絡(luò)流量的增大,網(wǎng)絡(luò)設(shè)備、應(yīng)用服務(wù) 器等日志發(fā)送端的日志發(fā)送速度遠(yuǎn)大于日志采集系統(tǒng)的日志處理速度,導(dǎo)致大量的日志丟 失,因此對(duì)日志采集系統(tǒng)的響應(yīng)速度、穩(wěn)健性和整體性能都提出了較高的要求。除了對(duì)服務(wù) 器的硬件配置和網(wǎng)絡(luò)等基礎(chǔ)設(shè)施進(jìn)行改進(jìn)提升之外,如何在硬件設(shè)施固定的情況下提升日 志采集系統(tǒng)的性能已經(jīng)成為人們研究的重要方向。固定的硬件配置,其中的各項(xiàng)系統(tǒng)資源 (CPU、內(nèi)存、線程等)是有限的,合理分配和管理這些有限系統(tǒng)資源將會(huì)給日志采集系統(tǒng)的 性能帶來新的提升。如果使用單個(gè)線程技術(shù)來處理所有的日志不能保證CPU等系統(tǒng)資源的 性能充分發(fā)揮,所以在日志采集系統(tǒng)中使用多線程技術(shù)同時(shí)并行處理日志較單線程技術(shù)能 夠充分利用CPU等系統(tǒng)資源,提高系統(tǒng)性能。但是,線程也作為系統(tǒng)資源,對(duì)每一個(gè)日志處 理都生成一個(gè)新的線程進(jìn)行處理也不是一個(gè)理想的選擇。針對(duì)合理使用線程資源的需求, 線程池是信息系統(tǒng)中常用的一種技術(shù)。它通過對(duì)多個(gè)任務(wù)復(fù)用已有線程,減少反復(fù)創(chuàng)建和 銷毀線程的操作,改善了系統(tǒng)的性能并減少了響應(yīng)時(shí)間。
[0004] 在使用線程池中,需要配置線程池運(yùn)行的相關(guān)參數(shù),包括核心線程個(gè)數(shù)、線程池最 大線程個(gè)數(shù)、空閑等待時(shí)間和任務(wù)隊(duì)列大小等,主要依賴經(jīng)驗(yàn)和個(gè)人判斷進(jìn)行手工配置。當(dāng) 前線程池的研究熱點(diǎn)是盡量擺脫以往手工配置的弱點(diǎn)和如何動(dòng)態(tài)調(diào)整線程池中線程的個(gè) 數(shù)。本發(fā)明也是從優(yōu)化線程池的角度,來研究日志采集系統(tǒng)中線程池的自適應(yīng)方法,主要包 括:
[0005] 1.用于動(dòng)態(tài)調(diào)整線程池中的線程個(gè)數(shù)的線程創(chuàng)建的啟發(fā)方法。
[0006] 2.減少手工配置參數(shù)。
[0007] 3.對(duì)個(gè)別需要手工配置的參數(shù)給出更準(zhǔn)確、范圍更小的取值建議。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明不考慮日志發(fā)送端的各種因素,根據(jù)日志到達(dá)日志采集系統(tǒng)的間隔、解析 處理日志的執(zhí)行時(shí)間等因素動(dòng)態(tài)調(diào)整線程池,保證日志快速處理。
[0009] 線程池自適應(yīng)方法中最主要的內(nèi)容為線程啟發(fā)方法。傳統(tǒng)的線程啟發(fā)方法分為兩 種,方法一:每次接收到日志都創(chuàng)建一個(gè)新的線程用于處理。方法二:緩存接收到的日志將 其放在任務(wù)隊(duì)列之中,直到任務(wù)隊(duì)列達(dá)到飽和才創(chuàng)建一個(gè)新的線程用于處理。
[0010] 在傳統(tǒng)方法一的實(shí)際應(yīng)用中會(huì)造成線程頻發(fā)地創(chuàng)建和撤銷。因?yàn)榫€程在創(chuàng)建和撤 銷的過程中需要執(zhí)行許多操作,所以創(chuàng)建和撤銷線程的執(zhí)行時(shí)間要比處理日志的執(zhí)行時(shí)間 長。采用此線程啟發(fā)方法的日志采集系統(tǒng)將會(huì)使大部分時(shí)間都消耗在線程的相關(guān)操作之 上,延緩日志的處理。
[0011] 為了彌補(bǔ)方法一的缺點(diǎn),進(jìn)而提出線程池概念,線程池可以重復(fù)地利用池中線程 處理短小的任務(wù)。線程池中線程的啟發(fā)方法正如方法二的描述。如果采用此線程啟發(fā)方法, 任務(wù)隊(duì)列中的日志因長期等待新線程創(chuàng)建而延緩處理。
[0012] 本發(fā)明解決傳統(tǒng)線程池中線程啟發(fā)方法的缺點(diǎn),保證在不頻繁地創(chuàng)建和撤銷線程 的基礎(chǔ)之上快速處理日志采集系統(tǒng)接受到的日志。本發(fā)明有關(guān)線程啟發(fā)方法的內(nèi)容如下:
[0013] 在日志采集系統(tǒng)之中增加基于事件驅(qū)動(dòng)的檢查器,手工設(shè)置與任務(wù)隊(duì)列相關(guān)的閾 值α、日志處理所需理論時(shí)間Te和日志處理時(shí)間容忍度β三個(gè)參數(shù)創(chuàng)建線程池。系統(tǒng)每 接受到一個(gè)日志即為一個(gè)事件,驅(qū)動(dòng)檢查器檢測當(dāng)前任務(wù)隊(duì)列大小是否超過α。如果超過 則啟動(dòng)線程啟發(fā)方法,首先,計(jì)算加=[7;./4〖/(_;7;」+1-4,訪定義為理論需要增加的線程 個(gè)數(shù),Te定義為處理日志所需的理論時(shí)間,AVGTq定義為最近α次日志到達(dá)系統(tǒng)的平均間 隔,Pt定義為系統(tǒng)當(dāng)前時(shí)刻線程池中線程的數(shù)目。然后,判斷tn與α大小,然后取較小值 最為真正需要增加的線程數(shù)目。最后,計(jì)算AVGT e > (l+β) Te的真假值,AVGTe定義為最近 α次日志處理運(yùn)行的平均值。如果為假值,則創(chuàng)建空閑等待時(shí)間大小為Te的非核心線程, 線程數(shù)目為tn與α的較小值,并從隊(duì)列里取出日志進(jìn)行處理;但是如果為真值,則日志做 緩存處理。
[0014] 具體原理如下:
[0015] 日志到達(dá)系統(tǒng)的間隔定義為TQ,Tq與日志發(fā)送端有關(guān)并不斷變化。處理日志所需 的理論時(shí)間定義為T e,由于每次處理日志所執(zhí)行的系統(tǒng)指令數(shù)目大致相等,所以Te可以近 似為常數(shù)。線程空閑等待時(shí)間定義為T w,任務(wù)隊(duì)列的大小定義為SM,1"和Sm通??梢灾付?為任意大小,稍后給出并說明一個(gè)更小的取值范圍。任務(wù)隊(duì)列任意時(shí)刻的大小定義為S t,系 統(tǒng)任意時(shí)刻的線程數(shù)目定義為PT,St與Pt反向變化。
[0016] 當(dāng)Tq > TE+TwW,表示日志到達(dá)系統(tǒng)的速度很慢,一個(gè)線程即可滿足快速處理, 但是此慢速度造成的副作用是在下一個(gè)日志到達(dá)系統(tǒng)之前唯一的線程已經(jīng)撤銷。當(dāng)T q < TE+TW且Tq > Te時(shí),表示日志到達(dá)系統(tǒng)的速度合理,一個(gè)線程即可滿足快速處理日志,并 且不會(huì)造成任何的副作用。針對(duì)此兩種情況,本發(fā)明提出的線程啟發(fā)方法是在日志采集系 統(tǒng)運(yùn)行之初創(chuàng)一個(gè)核心線程。核心線程的定義為與系統(tǒng)一樣生命周期的線程,并不會(huì)受T w 的影響。非核心線程的定義為在Tw內(nèi)沒有任務(wù)需要執(zhí)行則自動(dòng)銷毀的線程,生命周期受Tw 的影響。
[0017] 當(dāng)Tq < TE+TW且Tq < Te時(shí),表示日志到達(dá)系統(tǒng)的速度很快,一個(gè)線程已經(jīng)不能滿 足快速處理日志的需求同時(shí)伴隨著SwF斷增大,所以當(dāng)S w不斷增大時(shí)需要啟動(dòng)線程啟發(fā)方 法增大Pt。對(duì)于此情況,在日志采集系統(tǒng)之中增加基于事件驅(qū)動(dòng)的檢查器,手工設(shè)置 α、ΤΕ 和β三個(gè)參數(shù)創(chuàng)建線程池。系統(tǒng)每接受到一個(gè)日志即為一個(gè)事件,驅(qū)動(dòng)檢查器檢測當(dāng)前任 務(wù)隊(duì)列大小是否超過α。如果超過則啟動(dòng)線程啟發(fā)方法,首先,計(jì)算加= L7:,,盡 并判斷tn與α大小,然后取較小值最為真正需要增加的線程數(shù)目,此步驟是首先計(jì)算得是 以當(dāng)前的日志到達(dá)系統(tǒng)的速率需要多少個(gè)線程才能使系統(tǒng)處于合理狀態(tài),但是任務(wù)隊(duì)列中 不可能有這么多日志等待處理,所以還需要與α作比較來確定實(shí)際增加的線程數(shù)目。然 后,計(jì)算AVGT e > (1+β ) Te的真假值,此步驟是判斷系統(tǒng)當(dāng)前線程資源是否達(dá)到飽和狀態(tài), 如果線程資源達(dá)到飽和狀態(tài),每個(gè)線程都在等待當(dāng)前執(zhí)行中的線程結(jié)束,此時(shí)日志處理時(shí) 間會(huì)因等待而增加。因此判斷實(shí)際執(zhí)行時(shí)間是否超過日志處理時(shí)間容忍度來決定是否增加 線程。最后,如果上步驟結(jié)果為假值,則設(shè)置T w創(chuàng)建非核心線程,并從隊(duì)列里取出日志進(jìn)行 處理,但是如果為真值,則日志做緩存處理等待系統(tǒng)空閑時(shí)在做處理。
[0018] 線程池自適應(yīng)方法中關(guān)鍵參數(shù)的說明如下:
[0019] 正常情況下,系統(tǒng)有足夠的處理日志能力時(shí),任務(wù)隊(duì)列中的日志數(shù)目應(yīng)該始終保 持為0。一旦任務(wù)隊(duì)列出現(xiàn)日志并且不斷增加就說明當(dāng)前系統(tǒng)處理日志的能力不足,需要啟 動(dòng)新的線程。因?yàn)樾枰WC到達(dá)系統(tǒng)的日志需要快速的得到處理,所以α的值應(yīng)該在[1, +…)范圍內(nèi)盡可能的小。但是α不建議取1,因?yàn)楫?dāng)檢測器檢測的某一時(shí)刻恰好S t的大 小為1,并且有一個(gè)線程正在執(zhí)行最后一個(gè)指令,如果此時(shí)創(chuàng)建一個(gè)非核心線程時(shí)則至少有 一個(gè)線程時(shí)因空閑等待超時(shí)而停止。所以本發(fā)明指定α = 2。
[0020] 保證線程始終存活的充分條件為Tw > Tq,因?yàn)橹挥蠺q < TE+TW且Tq < Te情況下才 會(huì)創(chuàng)建非核心線程,指定Tw的值,所以Tw = Te即可。如果線程在Tw內(nèi)沒有啟動(dòng),則表明日 志到達(dá)系統(tǒng)的速度在減慢,P t較大需要減小,這時(shí)線程因空閑等待超時(shí)而停止正好符合Pt 較小的需求。
[0021] 當(dāng)檢查器檢測St超過α啟動(dòng)線程啟發(fā)方法創(chuàng)建非核心線程增大Pt。因?yàn)闄z查器 是事件驅(qū)動(dòng)的,能夠保證每次S t增加都會(huì)觸發(fā)檢查器,而且St與Pt反向變化,所以St < α <SM,SM略大于α即可,本發(fā)明采用Sm= l+α。
[0022] 日志處理時(shí)間容忍度β是用于判斷當(dāng)前日志采集系統(tǒng)線程資源是否飽和的重要 參數(shù)。線程資源飽和指的是因過多線程競爭資源(主要為CPU資源),處理日志的線程在線 程調(diào)度的就緒隊(duì)列中等待時(shí)間增加進(jìn)而造成日志處理時(shí)間增加到不如執(zhí)行日志緩存的狀 態(tài)。此時(shí)執(zhí)行日志處理的所需時(shí)間大于執(zhí)行日志緩存所需的時(shí)間,為了保證日志采集系統(tǒng) 的快速處理能力,就不應(yīng)該再創(chuàng)建新的線程加劇線程的競爭,而是應(yīng)該緩存日志。緩存日志 就是將日志存儲(chǔ)到先存儲(chǔ)介質(zhì)之上,然后等待系統(tǒng)空閑時(shí)再從存儲(chǔ)介質(zhì)讀出日志,最后處 理日志,即執(zhí)行兩次IO操作(輸入輸出操作)和一次處理日志操作。IO操作包含三步驟, 分別為尋道、旋轉(zhuǎn)和傳送,因此IO操作時(shí)間等于執(zhí)行三個(gè)步驟的時(shí)間總和。IO操作時(shí)間定 義為T ra,存儲(chǔ)介質(zhì)的尋道平均時(shí)間定義為TF,存儲(chǔ)介質(zhì)的旋轉(zhuǎn)速度定義為SPK,存儲(chǔ)介質(zhì)的 傳送速度為SPT,IO操作文件大小定義為Sf。由以上定義可知
【權(quán)利要求】
1.日志采集系統(tǒng)線池自適應(yīng)方法,其特征在于:在日志采集系統(tǒng)之中增加基于事件驅(qū) 動(dòng)的檢查器,設(shè)置與任務(wù)隊(duì)列相關(guān)的閾值α、日志處理所需理論時(shí)間Te和日志處理時(shí)間容 忍度β三個(gè)參數(shù)創(chuàng)建線程池; 系統(tǒng)每接受到一個(gè)日志即為一個(gè)事件,驅(qū)動(dòng)檢查器檢測當(dāng)前任務(wù)隊(duì)列大小是否超過α;α= 2 ;如果超過則啟動(dòng)如下線程啟發(fā)方法: 首先,計(jì)算i? = [_7;/.4KGry」+:l-巧,tn定義為理論需要增加的線程個(gè)數(shù),Te定義為處理 日志所需的理論時(shí)間,AVGTq定義為最近α次日志到達(dá)系統(tǒng)的平均間隔,Pt定義為系統(tǒng)當(dāng) 前時(shí)刻線程池中線程的數(shù)目; 然后,判斷tn與α大小,然后取較小值最為真正需要增加的線程數(shù)目; 最后,計(jì)算AVGTE>(l+i3)TE的真假值,AVGTe定義為最近α次日志處理運(yùn)行的平均值; 如果為假值,則創(chuàng)建空閑等待時(shí)間大小為Te的非核心線程,線程數(shù)目為tn與α的較小值, 并從隊(duì)列里取出日志進(jìn)行處理;但是如果為真值,則日志做緩存處理; 緩存日志就是將日志存儲(chǔ)到先存儲(chǔ)介質(zhì)之上,然后等待系統(tǒng)空閑時(shí)再從存儲(chǔ)介質(zhì) 讀出日志,最后處理日志,即執(zhí)行兩次IO操作即輸入輸出操作,和一次處理日志操作; IO操作包含三步驟,分別為尋道、旋轉(zhuǎn)和傳送,因此IO操作時(shí)間等于執(zhí)行三個(gè)步驟的時(shí) 間總和;IO操作時(shí)間定義為Tra,存儲(chǔ)介質(zhì)的尋道平均時(shí)間定義為TF,存儲(chǔ)介質(zhì)的旋轉(zhuǎn)速 度定義為SPb,存儲(chǔ)介質(zhì)的傳送速度為SPT,IO操作文件大小定義為SF;由以上定義可知,
【文檔編號(hào)】G06F11/34GK104461845SQ201410655727
【公開日】2015年3月25日 申請(qǐng)日期:2014年11月17日 優(yōu)先權(quán)日:2014年11月17日
【發(fā)明者】孫宇, 王斌, 王潤高, 高景生 申請(qǐng)人:中國航天科工集團(tuán)第二研究院七〇六所