用于調(diào)整線程池容量的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種用于調(diào)整線程池容量的方法及裝置。
【背景技術(shù)】
[0002]當(dāng)前時(shí)代,網(wǎng)絡(luò)應(yīng)用隨處可見,這些應(yīng)用對(duì)計(jì)算機(jī)系統(tǒng)的響應(yīng)速度、穩(wěn)健性和整體性能都提出了較高的要求。線程池技術(shù)是滿足這些要求而采用的技術(shù)之一,其通過提供若干個(gè)固定線程,輪流為大量的任務(wù)服務(wù),當(dāng)一個(gè)線程完成任務(wù)時(shí),并不馬上銷毀,而是接手另一個(gè)任務(wù),從而減少創(chuàng)建和銷毀線程的消耗,可以最大程度的利用系統(tǒng)的資源。因此現(xiàn)在的應(yīng)用服務(wù)器中大量使用線程池技術(shù)。
[0003]現(xiàn)有的線程池調(diào)整策略都是基于用戶設(shè)定的最小值和最大值,應(yīng)用服務(wù)器根據(jù)線程池的空閑情況在最小值和最大值之間進(jìn)行調(diào)整,不能突破最小值和最大值。用戶通過設(shè)定線程池的最大值來限定線程池的容量。線程池的容量決定了在指定時(shí)間內(nèi)能夠處理的并發(fā)任務(wù)數(shù),線程池的容量太小,導(dǎo)致所有的任務(wù)都在排隊(duì)等待進(jìn)入線程池,造成堵塞,而線程池的容量太大,則造成系統(tǒng)資源的浪費(fèi)。
[0004]在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下技術(shù)問題:
[0005]現(xiàn)有線程池的調(diào)整技術(shù)局限于用戶配置,線程池容量不能進(jìn)行動(dòng)態(tài)調(diào)整,在不能正確估計(jì)并發(fā)任務(wù)數(shù)的情況下會(huì)導(dǎo)致并發(fā)任務(wù)數(shù)超過預(yù)期值的時(shí)候,線程池所在設(shè)備響應(yīng)慢。
【發(fā)明內(nèi)容】
[0006]本發(fā)明提供的用于調(diào)整線程池容量的方法及裝置,能夠使線程池所在設(shè)備提供更強(qiáng)大的服務(wù)支撐能力,解決由于參數(shù)配置不當(dāng)導(dǎo)致的性能瓶頸,能夠提高線程池所在設(shè)備的響應(yīng)速度。
[0007]第一方面,本發(fā)明提供一種用于調(diào)整線程池容量的方法,包括:定期采集線程池使用線程數(shù);計(jì)算預(yù)定時(shí)間內(nèi)連續(xù)多次采集到的線程池使用線程數(shù)的平均值;計(jì)算所述平均值占線程池最優(yōu)最大值的百分比S,其中所述最優(yōu)最大值為當(dāng)前線程池使用的最大值并且所述線程池最優(yōu)最大值的初始值被設(shè)置為用戶配置線程池最大值;根據(jù)所述百分比S以及所述線程池所在設(shè)備的CPU的使用率和內(nèi)存的使用率,調(diào)整線程池最優(yōu)最大值。
[0008]可選地,在所述定期采集線程池使用線程數(shù)之前,還包括:判斷已經(jīng)啟動(dòng)線程池自調(diào)優(yōu)模式。
[0009]可選地,所述根據(jù)所述百分比S以及所述線程池所在設(shè)備的CPU的使用率和內(nèi)存的使用率,調(diào)整線程池最優(yōu)最大值包括:判斷所述百分比S是否大于預(yù)定閾值P;如果是,則判斷所述線程池所在設(shè)備的CPU的使用率和內(nèi)存的使用率是否均小于預(yù)定閾值L;如果是,則增大線程池最優(yōu)最大值。
[0010]可選地,所述根據(jù)所述百分比S以及所述線程池所在設(shè)備的CPU的使用率和內(nèi)存的使用率,調(diào)整線程池最優(yōu)最大值包括:判斷所述百分比S是否大于預(yù)定閾值P,如果否,則判斷所述百分比S是否小于預(yù)定閾值Q,其中P大于Q;如果是,則計(jì)算所述平均值占用戶配置線程池最大值的百分比R;判斷所述百分比R是否小于預(yù)定閾值Q;如果是,則將當(dāng)前線程池最優(yōu)最大值設(shè)置為用戶配置線程池最大值。
[0011]可選地,在所述判斷所述百分比S是否小于預(yù)定閾值Q之前,所述方法還包括:判斷所述當(dāng)前線程池最優(yōu)最大值是否大于用戶配置線程池最大值,若是,則判斷所述百分比S是否小于預(yù)定閾值Q。
[0012]第二方面,本發(fā)明提供一種用于調(diào)整線程池容量的裝置,包括:采集模塊,用于定期采集線程池使用線程數(shù);第一計(jì)算模塊,用于計(jì)算預(yù)定時(shí)間內(nèi)連續(xù)多次采集到的線程池使用線程數(shù)的平均值;第二計(jì)算模塊,用于計(jì)算所述平均值占線程池最優(yōu)最大值的百分比S,其中所述最優(yōu)最大值為當(dāng)前線程池使用的最大值并且所述線程池最優(yōu)最大值的初始值被設(shè)置為用戶配置線程池最大值;調(diào)整模塊,用于根據(jù)所述百分比S以及所述線程池所在設(shè)備的CPU的使用率和內(nèi)存的使用率,調(diào)整線程池最優(yōu)最大值。
[0013]可選地,所述裝置還包括第一判斷模塊;所述第一判斷模塊用于判斷已經(jīng)啟動(dòng)線程池自調(diào)優(yōu)模式。
[0014]可選地,所述裝置還包括第二判斷模塊;所述第二判斷模塊用于判斷所述百分比S是否大于預(yù)定閾值P,如果是,則判斷所述線程池所在設(shè)備的CPU的使用率和內(nèi)存的使用率是否均小于預(yù)定閾值L;所述調(diào)整模塊用于在所述百分比S大于預(yù)定閾值P且所述線程池所在設(shè)備的(PU的使用率和內(nèi)存的使用率均小于預(yù)定閾值L時(shí),增大線程池最優(yōu)最大值。
[0015]可選地,所述裝置還包括第三判斷模塊和第三計(jì)算模塊;所述第三判斷模塊,用于判斷所述百分比S是否大于預(yù)定閾值P,如果否,則判斷所述百分比S是否小于預(yù)定閾值Q,其中P大于Q;所述第三計(jì)算模塊用于在判斷所述百分比S小于預(yù)定閾值Q時(shí),計(jì)算所述平均值占用戶配置線程池最大值的百分比R;所述第三判斷模塊,還用于判斷所述百分比R是否小于預(yù)定閾值Q;所述調(diào)整模塊用于在判斷所述百分比S和所述百分比R均小于預(yù)定閾值Q時(shí),將當(dāng)前線程池最優(yōu)最大值設(shè)置為用戶配置線程池最大值。
[0016]可選地,所述第三判斷模塊用于在判斷所述百分比S不大于預(yù)定閾值P且判斷所述最優(yōu)最大值大于用戶配置最大值時(shí),判斷所述百分比S是否小于預(yù)定閾值Q。
[0017]本發(fā)明實(shí)施例提供的用于調(diào)整線程池容量的方法及裝置,通過采集線程池使用狀況,并結(jié)合服務(wù)器所在設(shè)備的CPU和內(nèi)存使用率,自動(dòng)調(diào)整線程池的最大值,從而使線程池所在設(shè)備提供更強(qiáng)大的服務(wù)支撐能力,解決由于參數(shù)配置不當(dāng)導(dǎo)致的性能瓶頸,能夠提高線程池所在設(shè)備的響應(yīng)速度。
【附圖說明】
[0018]圖1為本發(fā)明一實(shí)施例用于調(diào)整線程池容量的方法的流程圖;
[0019]圖2為本發(fā)明另一實(shí)施例用于調(diào)整線程池容量的方法的流程圖;
[0020]圖3為本發(fā)明另一實(shí)施例用于調(diào)整線程池容量的方法的流程圖;
[0021]圖4為本發(fā)明一實(shí)施例用于調(diào)整線程池容量的裝置的結(jié)構(gòu)示意圖;
【具體實(shí)施方式】
[0022]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0023]本發(fā)明提供一種用于調(diào)整線程池容量的方法,如圖1所示,所述方法包括:
[0024]SI 1、定期采集線程池使用線程數(shù);
[0025]S12、計(jì)算預(yù)定時(shí)間內(nèi)連續(xù)多次采集到的線程池使用線程數(shù)的平均值;
[0026]S13、計(jì)算所述平均值占線程池最優(yōu)最大值的百分比S,其中所述最優(yōu)最大值為當(dāng)前線程池使用的最大值并且所述線程池最優(yōu)最大值的初始值被設(shè)置為用戶配置線程池最大值;
[0027]S14、根據(jù)所述百分比S以及所述線程池所在設(shè)備的CPU的使用率和內(nèi)存的使用率,調(diào)整線程池最優(yōu)最大值。
[0028]本發(fā)明實(shí)施例提供的用于調(diào)整線程池容量的方法,通過采集線程池使用狀況,并結(jié)合服務(wù)器所在設(shè)備的CPU和內(nèi)存使用率,自動(dòng)調(diào)整線程池的最大值,從而使線程池所在設(shè)備提供更強(qiáng)大的服務(wù)支撐能力,解決由于參數(shù)配置不當(dāng)導(dǎo)致的性能瓶頸,能夠提高線程池所在設(shè)備的響應(yīng)速度。
[0029]優(yōu)選,本發(fā)明提供一種用于調(diào)整線程池容量的方法,如圖2所示,所述方法包括:
[0030]S21、應(yīng)用服務(wù)器啟動(dòng)后,確認(rèn)配置中已啟動(dòng)線程池自調(diào)優(yōu)模式。應(yīng)用服務(wù)器啟動(dòng)后,檢測(cè)domain.xml配置中JVM參數(shù)中是否配置了-DThreadPool self Tuning = true,如果為true,則啟動(dòng)線程池自調(diào)優(yōu)模式,如果沒有配置-DThreadPool self Tuning = true或者配置-DThreadPooIseIfTuning = false,則不啟動(dòng)線程池自調(diào)優(yōu)模式,結(jié)束;
[0031]S22、定期采集線程池使用線程數(shù),優(yōu)選地,每20s檢測(cè)一次線程池使用線程數(shù)。
[0032]S23、計(jì)算預(yù)定時(shí)間內(nèi)連續(xù)多次采集到的線程池使用線程數(shù)的平均值,優(yōu)選地,計(jì)算2分鐘采集到的6個(gè)數(shù)據(jù)的平均值。
[0033]S24、計(jì)算所述平均值占線程池最優(yōu)最大值的百分比S,其中所述最優(yōu)最大值為當(dāng)前線程池使用的最大值并且所述線程池最優(yōu)最大值的初始值被設(shè)置為用戶配置線程池最大值。
[0034]S25、判斷所述百分比S是否大于預(yù)定閾值P,如果否,則線程池最優(yōu)最大值不作調(diào)整。
[0035]其中,在應(yīng)用服務(wù)器剛啟動(dòng)時(shí),線程池最優(yōu)最大值的初始值設(shè)置為用戶配置線程池最大值,在線程池最優(yōu)最大值等于用戶配置線程池最大值的情況下,在判斷所述百分比S不大于預(yù)定閾值P時(shí),線程池最優(yōu)最大值不作調(diào)整。優(yōu)選地,所述預(yù)定閾值P為90%。
[0036]S26、如果判斷所述百分比S大于預(yù)定閾值P,判斷所述線程池所在設(shè)備的CPU的使用率和內(nèi)存的使用率是否均小于預(yù)定閾值L,優(yōu)選地,預(yù)定閾值L為75%,如果否,則線程池最優(yōu)最大值不作調(diào)整。
[0037]S27、在判斷所述百分比S大于預(yù)定閾值P且判斷所述線程池所在設(shè)備的CPU的使用率和內(nèi)存的使用率均小于預(yù)定閾值L時(shí),增大線程池最優(yōu)最大值。優(yōu)選地,如果所述平均值占線程池最優(yōu)最大值的百分比大于90%且線程池所在設(shè)備的CHJ和內(nèi)存使用率均小于75%,則將線程池的最大值調(diào)整為原來值的110%。
[0038]進(jìn)一步地,本發(fā)明提供一種用于調(diào)整線程池容量的方法,如圖3所示,所述方法包括:
[0039]S31、定期采集線程池使用線程數(shù),優(yōu)選地,每20s檢測(cè)一次線程池使用線程數(shù);
[0040]S32、計(jì)算預(yù)定時(shí)間內(nèi)連續(xù)多次采集到的線程池使用線程數(shù)的平均值,優(yōu)選地,計(jì)算2分鐘采集到的6個(gè)數(shù)據(jù)的平均值;
[