簡體   English   中英

關於內存不足異常

[英]about out of memory Exception

我已將線程池用於新IO服務器設計。 我已經使用newFixedThreadPool作為執行程序工廠創建線程池的方法。 當我執行服務器20到30分鍾時,服務器拋出異常。 如何處理此異常。

java.lang.OutOfMemoryError: Java heap space

顯然您正在使用過多的內存,因此現在您需要找出原因。 沒有源代碼,很難說出問題出在哪里,但是即使有了源代碼,當程序開始變得復雜時,也會有問題。

我發現有幫助的是獲取內存轉儲,並在諸如Memory Analyzer(MAT)之類的工具中查看它們。 它甚至可以比較幾個轉儲,以查看分配了哪種對象。 當您知道哪些對象不存在時,可以使用該工具查看其具有的根源(哪些對象對其具有引用)。

要從正在運行的Java程序中獲取內存轉儲,請使用jmap -dump:format = b,file = heap.bin,並在程序獲取OutOfMemoryError時自動獲取內存轉儲,並且可以使用java -XX:+ HeapDumpOnOutOfMemoryError失敗運行它。 java程序

您可以確定嘗試增加“堆大小”,然后檢查是否遇到問題。

但是,我希望您嘗試對應用程序進行性能分析,以找出為什么您的堆大小以及消耗內存的位置。 您幾乎可以嘗試使用探查器作為開放源代碼。

通常,其java -Xms5m -Xmx15m MyApp -Xms設置初始Java堆大小-Xmx設置最大Java堆大小

並在eclipse下在Java下運行配置為VM參數-Xms128m

-Xmx512m

-XX:permSize = 128M

-XX:MaxPermSize = 384M

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM