MATLAB Answers

Memory not being cleared from iteration to iteration?

60 views (last 30 days)
Raul Onrubia
Raul Onrubia on 29 Jan 2021
Commented: Aditya Patil on 11 Feb 2021
Hello all,
I'm having a memory leakage somewhere in my code that I can't find. I have a matlab code that uses objects to read different files, process them and add the results to a database. In pseudocode, let's say:
for ii=1:numfiles
reader.readfile(ii);
processor.process(reader);
database.addresults(processor);
end
The "processor" object uses parfor inside. The pararllel pool is being created and deleted inside the "processor" object in each iteration. I'm running this loop over the same file several time and monitoring the ram usage (using "memory" command in windows, and monitoring the "MemAvailableAllArrays" field), and also the size of each object (using the "GetSize" function). The database is a huge matrix where I accumulate the results.
The MemAvailableAllArrays is decreasing from iteration to iteration. I thought that maybe one of the objects might be concatenating some vectors by mistake, increasing thus its size, but all objects sizes remain contant for iteration to iteration.
Any advise on how to find / solve where this memory "leak" is and/or how to solve it?
Edit: I tried with Matlab 2016b and 2020b, and same issue.
  4 Comments
Raul Onrubia
Raul Onrubia on 4 Feb 2021
Sorry for the delay answering. The machin has 64 GBytes of RAM. MemAvailableAllArrays has negative values since I subtrated the first value to the whole serie.
I let the computer analyzing files the whole night and monitored MemUsedMATLAB:
I am not sure if what it is explained here would be useful, but I added these lines at the end of the loop just in case that could trigger the garbage collector:
java.lang.System.gc()
java.lang.Runtime.getRuntime().gc
pause(1)
Since the GC has the lowest priority, I thought that maybe a pause would push it to start running. Doesn't seem to improve compared with the same experiment (the time series is way shorter without the garbage collector):
I also tried to delete the three objects and then create them again in each iteration, and the result is as follows (with the GC lines still activated):
Which doesn't seem to be increasing with time. I'll let the computer all night analyzing files to see what happens in this case. The MemAvailableAllArrays behaves in the same exact way as in previous situations, though:
The 68 GBytes of ram correspond to the "commited" memory in the task manager, I guess.
I still don't know what to do to solve this issue.

Sign in to comment.

Answers (1)

Aditya Patil
Aditya Patil on 1 Feb 2021
As per my understanding, your code is using more memory than expected.
This might happen if you are creating many temporary variables, or if you are appending new values to a vector. You can look at the following resources for general tips on efficient memory usage in MATLAB.
  8 Comments
Aditya Patil
Aditya Patil on 11 Feb 2021
Using MemUsedMATLAB would be more appropriate than MemAvailableAllArrays. Without the code, it's difficult for me to say what causes the issue.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!