【異常】JSON.toJSON()によるメモリオーバーフロー

1128 ワード

変換されたオブジェクトのデータ量が大きすぎると、JSON.toJSON()メソッドを使用してメモリがオーバーフローします.具体的なエラーは以下の通りです.
2019-08-05 10:42:28.403 [TxId :  , SpanId : ] ERROR [http-nio-80-exec-8] c.u.f.t.c.e.GlobalExceptionHandler:151- unknown exception = Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1054)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)

コードにログを印刷し、JSON.toJSON()を使用しているため、オブジェクトデータが膨大すぎるためです.解決策は、印刷ログを削除することです.しかし、処理されるデータ量が大きいため、後で他の場所でメモリオーバーフローを放出する可能性があります.
ここでのGC overhead limit exceededはJVMの推定であり,ごみ回収に98%の時間がかかったが,回収メモリが2%未満であると,JVMはOOMが発生し,プログラムを早期に終了させると考えられる.-X:-UseGCOverheadLimitを使用して、このプロパティをオフにできます.しかし、このようにするのは意味がありません.この特性をオフにすると、プログラムは最終的にOOMに報告されます.結局、メモリが不足しているか、メモリが漏れているかのどちらかです.
参照先:https://segmentfault.com/q/1010000017795172/