djl
djl copied to clipboard
Memory Leak
Description
In a SpringBoot Web application, the memory is not released after the method execution is completed.
Expected Behavior
The memory is not released after the method execution is completed.After stopping the application, the memory returns to normal.
Error Message
The JVM does not display any error messages, but the operating system issues memory warning messages
How to Reproduce?
Steps to reproduce
Environment Info
This is expected behavior:
- When you use TensorFlow engine, TensorFlow create native memory. On Java side, we don't have control to make TensorFlow release memory back to system. In general, you won't see system memory usage reduce until you stop the application.
- But this doesn't mean there is memory leak, when close NDArray, TensorFlow will free up internal memory allocation, and reuse the memory to create another NDArray. Usually the total memory will stablize at peak, and won't always increase.
- You need to make sure to close NDArray (or Model, Predictor etc) to ensure no native memory leak.
After I execute this method a few more times, the os will crash and jvm will throw an exception of "EXCEPTION_UNCAUGHT-CXX-EXCEPTION (0xe06d7363) at pc=0x00007ffd468c53ac, pid=25956, tid=27768",is this correct?
Looks like there is something wrong with your code.
Can you take a look our springboot example: https://github.com/deepjavalibrary/djl-spring-boot-starter-demo. That project doesn't have memory leak issue.
I understand what you're saying "But this doesn't mean there is memory leak"! Now,My question is how to implement memory recycling?The meaning is that when I don't need to use these models, they won't take up native memory.