robotpy / mostrobotpy

Official Repository of python implementation of WPILib components
https://robotpy.github.io
Other
11 stars 14 forks source link

fork_exec: cannot allocate memory #26

Open virtuald opened 4 years ago

virtuald commented 4 years ago
  File "robot.py", line 59, in createObjects
    wpilib.CameraServer.launch()
  File "/usr/local/lib/python3.8/site-packages/wpilib/cameraserver.py", line 83, in launch
    proc = subprocess.Popen(
  File "/usr/local/lib/python3.8/subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/local/lib/python3.8/subprocess.py", line 1637, in _execute_child
    self.pid = _posixsubprocess.fork_exec(
OSError: [Errno 12] Cannot allocate memory

This user is importing rev, ctre, numpy, and lots of things, and my belief is that when we do a subprocess.run it's copying the entire process memory space (because that's what fork does on linux? -- though I thought it was supposed to be copy on write?), and failing to do so.

A workaround is to put the cameraserver launch at the beginning of the robot.py before anything else is imported. A bit of a hack, but it works. Need to think about a better way to address this.

auscompgeek commented 3 years ago

because that's what fork does on linux? -- though I thought it was supposed to be copy on write?

I'm pretty sure it is, but I presume Linux reserves additional memory space so you don't randomly OOM by simply writing to your "existing" memory.