爲什麼做了文件監聽功能,內存溢出了?
忙於做項目,現在簡單貼一些代碼和分析原因。
項目裏面有一個配置文件,做了監聽,這個是放數據的。紅線部分是文件修改
這個是文件監聽的方法。文件修改又調用了初始化的方法,初始化裏面最下面又調用了上面的方法。
這個 是初始化的方法,下面又調用了上面文件監聽的方法。循環了。並且初始化方法是同步的。上面監聽是3s
發現問題的過程也是比較難,開始發現啓動了項目。過半個小時左右電腦cpu 100% 卡死了
總結一下。這個地方文件監聽裏創建了線程。文件修改又調用了一個文件監聽器。循環創建了多個線程。而且後創建的線程都是阻塞的。線程越來越多。內存溢出了。
如何確定問題所在。項目啓動,啓動arthas。調用thread -n 10一直查看線程信息。發現線程數量很多。線程棧信息裏面看到代碼位置,發現有一個方法一直在調用配置文件,1s左右修改一次。
解決:如何解決這個問題呢。代碼應該怎麼修改?