新聞中心
這篇文章將為大家詳細講解有關(guān)如何解決Tomcat中應用調(diào)用Libvirt庫進行控制時可能導致線程卡死問題,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于做網(wǎng)站、網(wǎng)站制作、黃驊網(wǎng)絡推廣、微信平臺小程序開發(fā)、黃驊網(wǎng)絡營銷、黃驊企業(yè)策劃、黃驊品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供黃驊建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
最近的項目中有用到libvirt的java包進行l(wèi)ibvirt的遠程命令調(diào)用,進行kvm的管理。我們的測試人員一個偶然的機會下測試出來,在控制連接狀態(tài)的時候,可能存在一個嚴重的bug,由于界面上的flex應用在每次點擊虛擬機節(jié)點的時候,會導致對后臺的remote service進行大約3-4次的調(diào)用,而這些remote service中會利用libvirt的結(jié)構(gòu)進行結(jié)果的獲取,我們?yōu)榱颂岣咝?,將libvirt的鏈接進行了保持,而不是每次都進行重連,以減少性能的損耗。
存在這樣的情況,當網(wǎng)絡正常的時候,建立起來的connection,一直在內(nèi)存中駐留,此時如果拔掉網(wǎng)線,這個鏈接也不會斷開,由于內(nèi)存中這個connection的值也不為空,無法判斷鏈接是否斷開,所以在此點擊界面的時候,一點調(diào)用了libvirt的接口,就會一直卡住界面多點擊幾次后,tomcat的所有可服務線程就都卡住了,導致整個界面無法使用。
解決方法為:啟動一個線程由于實時的檢測主機的斷開連接狀態(tài),當狀態(tài)不正常的時候,在獲取connection的方法中直接拋出異常,阻止后續(xù)的邏輯的執(zhí)行。但是這樣只能解決狀態(tài)問題,不能解決在這個狀態(tài)獲取的間隙中的界面點擊問題,查找到資料發(fā)現(xiàn)tomcat的線程池模型也許可以幫忙,于是將線程池用上了,測試過后,終于發(fā)現(xiàn)可以了。
據(jù)說tomcat7可以檢測哪個線程被卡死了,但是由于條件顯示沒有將產(chǎn)品中的tomcat6環(huán)境升級為tomcat7,所以這個也就不可用了。
具體修改方法:
代碼如下:
通常150應該足夠了,后面的這個參數(shù)呢,表示最小的駐留服務線程數(shù),也就是說這些線程會一直等待服務。
URIEncoding="UTF-8" keepAliveTimeout="15000"
redirectPort="8443" />
修改Connector節(jié)點,增加executor="tomcatThreadPool",maxThreads,minSpareThreads,maxSpareThreads,keepAliveTimeout等參數(shù)的配置
這樣就基本上解決了問題,參數(shù)具體含義呢,其中兩個和上面提到的意義是一樣的,executor表示對上面的那個Executor節(jié)點的引用,所有這個配置的線程都會在那個池中。
keepAliveTimeout表示每個線程能被卡住的最長時間,也就是能存活的最長時間。
有了上述修改后,我們的tomcat就再也不會被libvirt線程卡住了,一旦卡住,也只是15秒的一個線程,除非能同時請求操過500個線程,否則tomcat都能正常的提供服務了,只是上述參數(shù)沒經(jīng)過調(diào)優(yōu),性能各方面都沒有測試,只是臨時解決,具體數(shù)值的大小,還是需要按照實際情況,經(jīng)過多組數(shù)據(jù)的測試對比后然后確定一個值。
關(guān)于如何解決Tomcat中應用調(diào)用Libvirt庫進行控制時可能導致線程卡死問題就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網(wǎng)頁名稱:如何解決Tomcat中應用調(diào)用Libvirt庫進行控制時可能導致線程卡死問題
文章轉(zhuǎn)載:http://fisionsoft.com.cn/article/pcsdhj.html