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