在windowsServer2012R2系統的服務器上跑springBoot jar包+tomcat啟動的war包,還有matlab、redis,資料庫是oracle12c。剛啟動沒報錯,跑了兩天然后c盤虛擬記憶體占滿了,Oracle12C服務自動關了,重啟服務器之后c盤恢復了。各位大佬這是什么問題。跪求
uj5u.com熱心網友回復:
那估計是你程式的什么地方有記憶體泄漏了,檢查一下代碼,有沒有被全域參考的物件,導致這些物件無法被垃圾回收。uj5u.com熱心網友回復:
但是我在win10上運行就沒有問題,代碼應該沒什么問題uj5u.com熱心網友回復:
查一下 tomcat , matlab , redis 和 oracle 的具體的版本號,你 Win10 系統 和 WinServer 系統 上面的這些軟體的具體版本號,肯定是不相同的。尤其是老版本的 tomcat 有的版本 時間長了,是會出現問題的。有可能是 tomcat 和 JDK 不兼容引起的。
具體的原因,我也不知道是怎么回事,一般情況下 虛擬記憶體 寫滿硬碟, 肯定是記憶體泄露了 。
Oracle 對記憶體的管理很嚴格的,通常是不會出現記憶體泄漏的狀況。
redis 會有這個可能,你的程式如果快取的資料都是常駐記憶體的,從不清理快取(或者說,資料沒有生存周期),一直往里面存,當然會記憶體溢位了。
matlab 的記憶體溢位,一般情況就是你的實驗資料太大,一步一步的執行程序中,沒有釋放記憶體,一直積累這些中間結果,然后,記憶體溢位了。
tomcat 很少有記憶體溢位的情況,除非你更改了啟動引數,或者,使用 Java Native 方法。
springBoot 的程式,如果要記憶體溢位的話,那也是編程的問題,這個和redis的使用一樣,只能靠編程經驗來避免,要是想查原因的話,下載一些工具,比如 jmap 之類的,查一下記憶體狀況,執行緒的執行情況。
uj5u.com熱心網友回復:
windowsServer2012R2和win10安裝的軟體(比如jdk,orcale之類的)的版本都一樣嗎?如果都一樣,那就可能是作業系統本身有記憶體泄漏(一般windows長期開機會越來越慢也是因為系統本身有記憶體泄漏)。
uj5u.com熱心網友回復:
版本什么的都一樣uj5u.com熱心網友回復:
查一下 tomcat , matlab , redis 和 oracle 的具體的版本號,你 Win10 系統 和 WinServer 系統 上面的這些軟體的具體版本號,肯定是不相同的。
尤其是老版本的 tomcat 有的版本 時間長了,是會出現問題的。有可能是 tomcat 和 JDK 不兼容引起的。
具體的原因,我也不知道是怎么回事,一般情況下 虛擬記憶體 寫滿硬碟, 肯定是記憶體泄露了 。
Oracle 對記憶體的管理很嚴格的,通常是不會出現記憶體泄漏的狀況。
redis 會有這個可能,你的程式如果快取的資料都是常駐記憶體的,從不清理快取(或者說,資料沒有生存周期),一直往里面存,當然會記憶體溢位了。
matlab 的記憶體溢位,一般情況就是你的實驗資料太大,一步一步的執行程序中,沒有釋放記憶體,一直積累這些中間結果,然后,記憶體溢位了。
tomcat 很少有記憶體溢位的情況,除非你更改了啟動引數,或者,使用 Java Native 方法。
springBoot 的程式,如果要記憶體溢位的話,那也是編程的問題,這個和redis的使用一樣,只能靠編程經驗來避免,要是想查原因的話,下載一些工具,比如 jmap 之類的,查一下記憶體狀況,執行緒的執行情況。
uj5u.com熱心網友回復:
Oracle12 一般直接占檔案磁盤,因此我覺得可能是REDIS的問題,你把REDIS的持久化方式由AOF換成RDB試試uj5u.com熱心網友回復:
記憶體泄露+windows的問題,某一時刻流量增加,應用服務器、快取、資料庫都在競爭資源,記憶體泄露很正常,然后windows做服務器天然不靠譜。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/11229.html
標籤:Java EE
上一篇:發送ajax請求到SpringMVC后回傳ModelAndView資料給jsp,jsp接收不到
下一篇:eclipse自動換行
