中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決jvm內存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded問題

發布時間:2021-10-23 16:21:20 來源:億速云 閱讀:2425 作者:柒染 欄目:大數據

如何解決jvm內存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded問題,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

錯誤日志信息

java.lang.OutOfMemoryError: GC overhead limit exceeded
2020-06-16 10:44:22.004 [http-nio-8083-exec-91] ERROR o.a.c.core.ContainerBase.[Tomcat].[localhost] - Exception Processing ErrorPage[errorCode=0, location=/error]
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
        at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:394)
        at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:253)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:175)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1639)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

問題原因

用ps命令查出該jar的運行的pid,然后查看java堆的詳細信息,發現確實內存已經99%了。

原因1:初始內存配置確實太小

原因2:相關代碼邏輯問題導致內存溢出

jmap -heap PID

如何解決jvm內存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded問題

問題解決

 這里暫時是先加大Heap Size:

-Xmx4000m -Xms4000m

調整后:

如何解決jvm內存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded問題

總結

重點檢查代碼邏輯問題,如果是代碼的問題, 增加堆內存只能推遲產生java.lang.OutOfMemoryError,最終還是會內存溢出。

JVM參數

JVM啟動參數共分為三類:

  • 標準參數(-),所有的JVM實現都必須實現這些參數的功能,而且向后兼容; 

  • 非標準參數(-X),指的是JVM底層的一些配置參數,這些參數在一般開發中默認即可,不需要任何配置。但是在生產環境中,并不保證所有jvm實現都滿足,所以為了提高性能,往往需要調整這些參數,以求系統達到最佳性能。另外這些參數不保證向后兼容,也即是說“如有變更,恕不在后續版本的JDK通知”(這是官網上的原話);

  • 非Stable參數(-XX),這類參數在jvm中是不穩定的,不適合日常使用的,后續也是可能會在沒有通知的情況下就直接取消了,需要慎重使用。

JVM內存的三個主要的域

三個主要域:新域、舊域以及永久域。 
JVM生成的所有新對象放在新域中。一旦對象經歷了一定數量的垃圾收集循環后,便進入舊域。而在永久域中是用來存儲JVM自己的反射對象的,如class和method對象,而且GC(Garbage Collection)不會在主程序運行期對永久域進行清理(主要原因)。其中新域和舊域屬于堆,永久域是一個獨立域并且不認為是堆的一部分。

各主要參數的作用

  •         -Xms:設置jvm內存的初始大小

  •         -Xmx:設置jvm內存的最大值

  •         -Xmn:設置新域的大小(這個似乎只對 jdk1.4來說是有效的,后來就廢棄了)

  •         -Xss:設置每個線程的堆棧大小(也就是說,在相同物理內存下,減小這個值能生成更多的線程)

  •         -XX:NewRatio :設置新域與舊域之比,如-XX:NewRatio = 4就表示新域與舊域之比為1:4

  •         -XX:NewSize:設置新域的初始值

  •         -XX:MaxNewSize :設置新域的最大值

  •         -XX:PermSize:設置永久域的初始值

  •         -XX:MaxPermSize:設置永久域的最大值

  •         -XX:SurvivorRatio=n:設置新域中Eden區與兩個Survivor區的比值。(Eden區主要是用來存放新生的對象,而兩個 Survivor區則用來存放每次垃圾回收后存活下來的對象)

關于如何解決jvm內存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded問題問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万山特区| 灵宝市| 团风县| 建瓯市| 闵行区| 淳安县| 伊宁县| 湖南省| 浮山县| 江孜县| 芜湖市| 渭源县| 尚义县| 新郑市| 若尔盖县| 昆山市| 西华县| 外汇| 乐亭县| 秦皇岛市| 德庆县| 灵川县| 马关县| 冀州市| 邮箱| 酉阳| 二手房| 吐鲁番市| 富平县| 砚山县| 尤溪县| 呼玛县| 抚顺县| 彰化县| 郑州市| 车致| 那坡县| 友谊县| 石屏县| 额济纳旗| 镇原县|