1、Tomcat內(nèi)存溢出,直接崩潰 定位:查看崩潰日志,線程數(shù)正常;然后因?yàn)閠omcat已經(jīng)崩潰了無法查詢其他相關(guān)信息,第一次簡(jiǎn)單粗暴解決;直接將內(nèi)存從900+M調(diào)整為2G(我們?cè)O(shè)備內(nèi)存4G),然后重啟tomcat;重啟后持續(xù)觀察內(nèi)存是否增長(zhǎng),查看內(nèi)存回收情況、查看內(nèi)存分配情況、dump內(nèi)存文件進(jìn)行分析,后來發(fā)現(xiàn)老生代持續(xù)增長(zhǎng)且回收時(shí)消耗了很長(zhǎng)時(shí)間只回收很少的內(nèi)存;分析dump文件發(fā)現(xiàn)時(shí)有些靜態(tài)的map持續(xù)增長(zhǎng)沒有清空導(dǎo)致的。 2、線程數(shù)過多導(dǎo)致內(nèi)存溢出后無法創(chuàng)建新的線程從而程序崩潰 懷疑原因:(1)線程執(zhí)行過慢,導(dǎo)致最后阻塞過多;(2)在高峰期時(shí),內(nèi)存不夠創(chuàng)建這么多線程(我們?cè)O(shè)備內(nèi)存4G,后來調(diào)整成了2G;導(dǎo)致線程從最開始可以創(chuàng)建5000+后達(dá)到頂峰崩潰到只能創(chuàng)建2000+就崩潰了,具體開始為什么從1G調(diào)整成2G參考問題1),發(fā)現(xiàn)這個(gè)內(nèi)存分配總是有利有弊的,需要長(zhǎng)時(shí)間驗(yàn)證給出合理的分配才行,因?yàn)閱栴}1已經(jīng)解決,考慮到2G內(nèi)存太大后來還是調(diào)整成了默認(rèn)值;然后重啟tomcat,實(shí)時(shí)觀察線程數(shù)文件,看是否有阻塞問題,后來發(fā)現(xiàn)XStream將xml轉(zhuǎn)對(duì)象時(shí)在進(jìn)行new()操作時(shí)非常耗時(shí)從而導(dǎo)致阻塞。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注