亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

如何解決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

东方市| 朝阳区| 安康市| 新乐市| 瑞金市| 鞍山市| 荃湾区| 南部县| 蚌埠市| 出国| 宁波市| 九龙坡区| 开远市| 建湖县| 西充县| 满洲里市| 利川市| 酉阳| 扎赉特旗| 潢川县| 城口县| 石渠县| 台南县| 呼玛县| 阳谷县| 聂拉木县| 连江县| 惠水县| 十堰市| 浦县| 新邵县| 喀喇沁旗| 乐东| 南昌市| 东辽县| 天等县| 卢龙县| 临泽县| 应用必备| 奉节县| 垫江县|