19
$\begingroup$

Apparently my CPU or GPU overheats when Blender renders more than a few minutes. The computer suddenly powers down, taking down all running apps, email I'm writing, etc. This is almost never a problem with still scenes, which finish soon enough, but often with animation renders.

The problem occurs with either Cycles or BI renders. I'm running on a custom-built quad core 64-bit linux desktop system. (I'm not the one who built it. I am a knuckle-dragging caveman with hardware issues.) (Yes, all the fans are blowing and dust has been cleaned off.)

So far the only way to prevent this for now is to choose in camera properties: Performance, Threads, Fixed, 1.

Someday, I'll get better hardware, but in the meantime, I suspect Blender could run indefinitely, even with multiple threads, if I could make it pause for perhaps one minute between each frame when animating, just to cool down. How to make this happen? At least, a way to run an arbitrary Python script between frames, or once per minute during any rendering. Such a script could contain a sleep stat

Even better, if Blender could throttle its rendering effort based on readings of the CPU temperature sensor. Is that possible?

UPDATE: I've nearly forgotten about this issue, since writing a quick Python script to watch the CPU temperature, sending SIGSTOP and SIGCONT as gandalf3 describes. Zero crashes ever since. I reboot my machine once or twice per year for kernel upgrades, otherwise it's 100% up.

ANOTHER UPDATE: I took the machine apart, popped off the CPU heatsink, and applied fresh thermal paste. Ever since, the CPU temperature has been running something like 30deg (C) cooler all the time. Zero shutdowns, and I don't use the Python script any more unless I'm feeling paranoid.

$\endgroup$
7
  • 12
    $\begingroup$ Suggest to look into better cooling for your system, and if that isn't an option, under-clocking, since its clearly not able to run at the speed its set at. Also, this may be of interest to you: cpulimit.sourceforge.net $\endgroup$
    – ideasman42
    Commented Jul 6, 2013 at 4:53
  • $\begingroup$ Issues with faulty hardware do not belong here. Also see: How can I pause a render in progress and then resume it at a later time? $\endgroup$
    – Aldrik
    Commented Jul 6, 2013 at 12:55
  • 2
    $\begingroup$ I think this question is worded badly, You ask about pausing in between rendering but really you want to throttle blender to prevent overheating on Linux - these are very different things. $\endgroup$
    – ideasman42
    Commented Jul 8, 2013 at 2:18
  • $\begingroup$ Indeed, it is purely a problem of checking temperature every minute or so, nothing to do with frames. $\endgroup$
    – DarenW
    Commented Jul 8, 2013 at 7:48
  • $\begingroup$ Sounds like your only guessing at the cause of the shutdown. Have you watched the temperature readings as it starts to shutdown? If your power supply can't provide enough power you can also get a shutdown, probably more so while GPU rendering. $\endgroup$
    – sambler
    Commented Jul 13, 2013 at 6:12

8 Answers 8

8
$\begingroup$

If you are on Linux, you could use killall to send SIGSTOP and SIGCONT (see this post) signals based on CPU temperature readings from sensors.
This would have the added advantage of pausing the render even mid-frame, as well as working for baking and other processing intensive jobs besides rendering.

Another thing you could try is nice values, however they are only relevant if you are using the computer for other things at the same time.

$\endgroup$
2
  • $\begingroup$ I like this. Sometimes single frames do crash when samples>=500. $\endgroup$
    – DarenW
    Commented Jul 6, 2013 at 20:54
  • $\begingroup$ Manually, those signals work great. Implementation of something practical takes us out of scope for this SE site, but enlightenment can be found at unix.stackexchange.com/a/40645/2874 $\endgroup$
    – DarenW
    Commented Jul 6, 2013 at 23:51
10
$\begingroup$

Edit, The original question was "How to pause between rendering frames", if my answer seems out of place.

Yes, to sleep in-between rendering frames you can use a Python script to add a render_post handler, it will sleep in-between rendering frames of an animation.

import time
def sleep(scene, seconds=2.0):
    print("Sleep start")
    time.sleep(seconds)
    print("Sleep stop")

import bpy
bpy.app.handlers.render_post.append(sleep)

If you want this to always be enabled, copy it into render_sleep.py and put it in blenders scripts/startup/ path.


Note: I have serious doubts about this as being a GOOD solution to the problem you describe, a frame that takes a long time to render could overheat your system - so relying on sleeping between frames seems very precarious, on Linux there are tools to throttle process CPU use, check on nice and cpulimit (if under-clocking or better cooling isnt an option).

$\endgroup$
3
$\begingroup$

Try using smaller Tiles like 16*16 or even 8*8 and use fewer Threads. However I think it would be the wrong approach to tackle this problem on the softare side of things. It might be safer to invest in a new CPU fan or another fan for the computer case (will be easier to install)

$\endgroup$
2
$\begingroup$

Modern CPUs throttle (reduce clock frequency) when they get too hot. That means you loose performance that is the last thing you want if you payed for a processor. Besides that the lifetime might be shortened when permanently running overheated (>65°)

You should unmount the fan and remove any remaining thermal paste. Add new thermal paste and re-mount the fan, after that measure temperature while rendering (minimum 15 minutes).

If the CPU gets still too hot, buy a bigger fan, and check that the case fans are able to transport the heat to the outside.

There might be also a tiny gap between your processor and the heat sink, you can see this when the thermal paste isn't decently distributed over the surface of both CPU and heat sink. In this case you should get another model.

See this HowTo: http://www.wikihow.com/Apply-Thermal-Paste

$\endgroup$
2
$\begingroup$

If you're rendering with CPU, you can use cpulimit program available in most distribution repositories to limit Blenders impact on CPU load.

sudo apt-get install cpulimit -y

It'll make sure that CPU usage of a certain process won't exceed a given limit.

It won't help much with GPU rendering though, because there isn't much process control functionality present for CUDA jobs yet.

You could then use it like this:

cpulimit -e blender -l 15

The -e is used to define the executed process name. The -l switch is used to define the CPU usage limit in %.

Read more in the man page:

man cpulimit

Another approach could be underclocking your CPU, to make it run slower, so it's more reliable. A properly built and configured modern PC shouldn't exhibit random shutdowns when under load.

$\endgroup$
2
$\begingroup$

If you are using GPUs, you can use Precision X to control the voltage and temperature speed so that it keeps to a lower temperature.

If you are using CPUs, you probably have a muti-core CPU. Just use "fixed" instead of "automatic" number of threads, then lower the number of threads. This will have the additional benefit that your computer will respond better while rendering. Of course the render will take more time, so if you are doing it all the time, maybe finding a way to cool down your machine will be the best solution. Even if we are talking about a laptop, there are bases with fans that for \$10-\$20 might solve your problem and save you hours... Also some utility to adjust the fan speed might help

$\endgroup$
1
$\begingroup$

If you start Blender from a terminal, you can press Ctrl + Z in the terminal to pause it, and type fg and hit Enter to resume it.

$\endgroup$
0
$\begingroup$

Sepero has written a temp-throttle script to automatically check the temperature and throttle the CPU whenever it exceeds some threshold.

To use it, clone the repository and run in the background:

sudo ./temp-throttle/temp_throttle.sh 80

(where 80 is your desired maximum temperature). Once started, the script is completely automatic (it also un-throttles if the temperature falls).

Note that this works by lowering the maximum CPU frequency, which will slow down all applications. If you need it to only throttle Blender, you could probably modify the script to call cpulimit on the Blender process (which will alternately send SIGSTOP and SIGCONT to limit its average CPU utilization).

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .