O.reset() does not free memory

Bug #1290194 reported by Klaus Thoeni
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Yade
New
Low
Unassigned

Bug Description

O.reset() does not free the memory, i.e. if you run a series of simulations in a loop the memory usage is accumulating. Here is a script which reproduces the issue (it should affect all versions):

# -*- coding: utf-8
import subprocess

numberTests = 10

for z in range(numberTests):

 O.reset()

 O.bodies.append(pack.regularHexa(pack.inSphere((Vector3(0.0,0.0,0.0)),0.5),radius=0.01,gap=0))
 print "number of bodies:", len(O.bodies)

 cmd = "ps -o vsz -p `pgrep yade` | grep -v VSZ"
 process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
 meminfo = process.communicate()[0].strip()
 print "Yade memory usage: ", meminfo, "kB"

 cmd = "egrep 'MemFree' /proc/meminfo"
 process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
 meminfo = process.communicate()[0]
 print meminfo

sys.exit(0)

Changed in yade:
importance: Undecided → Low
Revision history for this message
Alexander Eulitz [Eugen] (kubeu) wrote :

I can confirm this bug.
Some time ago I wrote a (python) script which calls yade for performing a sphere drop with changing parameters. IN this script yade way invoked once and after a sphere drop was finished simulation was reset for the next parameter set. It ended up in about 30.000 parameter combinations that were simulated. This took about 5 days and at the end 128 GB Ram plus the same for Swap file was used...

Revision history for this message
Anton Gladky (gladky-anton) wrote :

I tihnk this bug has same roots as LP:1041084 [1].

[1] https://bugs.launchpad.net/yade/+bug/1041084

Revision history for this message
Klaus Thoeni (klaus.thoeni) wrote :

Hi Anton,

you are right, changing the script as follows has the same effect:

# -*- coding: utf-8
import subprocess

numberTests = 10

for z in range(numberTests):
 #O.reset()

 bodies= O.bodies.append(pack.regularHexa(pack.inSphere((Vector3(0.0,0.0,0.0)),0.5),radius=0.01,gap=0))
 print "number of bodies:", len(O.bodies)

 for b in bodies:
  O.bodies.erase(b)

 cmd = "ps -o vsz -p `pgrep yade` | grep -v VSZ"
 process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
 meminfo = process.communicate()[0].strip()
 print "Yade memory usage: ", meminfo, "kB"

 cmd = "egrep 'MemFree' /proc/meminfo"
 process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
 meminfo = process.communicate()[0]
 print meminfo

sys.exit(0)

Revision history for this message
Janek Kozicki (cosurgi) wrote :
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.