
Hi Carl
Running Thunderbird 15.0.1 on Ubuntu 10.4 (Please don't suggest changing my email client or Linux to your current favourites.)
10.04 is very old though (almost 3 years now), and no longer receives even security updates - hasn't for over a year. So just upgrading Ubuntu would be a good idea. But that's as an aside.
Thunderbird is doing a major re-indexing of messages, which is really pushing my CPU to its limits. (i.e. getting over 60C core temperature, email process using 100-160% of CPU usage - dual core CPU)
Full details of my hardware, and the CPU usage are documented here: http://forums.mozillazine.org/viewtopic.php?f=31&t=2399189
That was this time last year. Doing the same thing now with my updated version of TB. (Only happens for a couple days, once a year, when I shift all my Sent messages of the previous calendar year to an "archive" folder.)
Could any of you point me to instructions to get Ubuntu to limit or choke the demand that the Thunderbird process calls upon the CPU?
I use the following script to run RuneScape (a game implemented in Java) on Linux. It figures out how many cores a machine has, and then binds the process to all-but-one. It's not perfect, but as long as you don't do this with more of your apps, it tends to have the desired effect. Script pasted below, adapt to your needs / use as a template for what you need. (for the bash experts among the LUV readers - I'm not one of you so I'm certain the above is less than efficient. It does, however, do the job) === #!/bin/bash # 2012-05-21 by Arjen Lentz <a r j e n (at) l e n t z (dot) c o m (dot) a u> # Note: the following is Linux specific # requires bash 4, taskset, /proc/cpuinfo, egrep, wc # Binding a process to all but N cores using taskset # (note that core numbers are 0 based) # taskset -c 0,1,2 can also be written as -c 0-2 # taskset is either followed by a commandline to start, or --pid N # set this to 1, or higher if you need more spare cores SPARECORES=1 # if successful TASKSET_CMD will contain something like # "/usr/bin/taskset -c 1-3" # If not, TASKSET_CMD will be an empty string. CPUINFO="/proc/cpuinfo" TASKSET_CMD="" # extended grep tool so we can use a decent regex EGREP=`which egrep` if [[ -z $EGREP ]]; then echo "egrep command not installed, skipping taskset" else # wordcount tool WC=`which wc` if [[ -z $WC ]]; then echo "wc command not installed, skipping taskset" else # taskset tool TASKSET=`which taskset` if [[ -z $TASKSET ]]; then echo "taskset command not installed" else if [[ -a $CPUINFO ]]; then # NCORES will be set to the actual number of cores NCORES=`$EGREP "^processor\s" $CPUINFO | $WC -l` if [[ $NCORES > $SPARECORES ]]; then echo "Detected $NCORES CPU cores, keeping $SPARECORES spare" # TASKSET_CMD will set to all except SPARECORES TASKSET_CMD="$TASKSET -c $SPARECORES-$((NCORES-1))" # following echo is just for debug purposes # echo $TASKSET_CMD ... else echo "Detected cores $NCORES <= $SPARECORES requested, skipping taskset" fi else echo "$CPUINFO not found, skipping taskset" fi fi fi fi JAVA=`which java` # initial and maximum amount of memory the Java process is allowed to allocate # note that in the 64bit section below, maxmem is raised INITMEM=1000M MAXMEM=2500M # Default to 32-bit environment, as that always works JAVAOPTS="-server -d32 -Xms$INITMEM -Xmx$MAXMEM -XX:+UseParallelOldGC -XX:ParallelGCThreads=1 -XX:+DoEscapeAnalysis" # uname tool UNAME=`which uname` if [[ -z $UNAME ]]; then echo "uname command not installed, so can't check architecture - defaulting to 32-bit" else ARCH=`$UNAME -m` if [[ $ARCH = 'x86_64' ]]; then echo "Architecture $ARCH, selecting 64-bit environment" MAXMEM=3000M JAVAOPTS="-server -d64 -Xms$INITMEM -Xmx$MAXMEM -XX:+UseParallelOldGC -XX:ParallelGCThreads=1 -XX:+DoEscapeAnalysis -XX:+UseCompressedOops" else echo "Architecture $ARCH, defaulting to 32-bit" fi fi RUNESCAPEDIR="$HOME/runescape" CLASSPATH="$RUNESCAPEDIR/bin/jagexappletviewer.jar" CONFIG=$'http://www.runescape.com/k=3/l=en/jav_config.ws' LOGFILE=$RUNESCAPEDIR/runescape.log CMDLINE="$TASKSET_CMD $JAVA $JAVAOPTS -Djava.class.path=$CLASSPATH -Dcom.jagex.config=$CONFIG jagexappletviewer ./images" echo >>$LOGFILE echo >>$LOGFILE ===== echo >>$LOGFILE `date` echo >>$LOGFILE $CMDLINE echo >>$LOGFILE # we cd to this dir so any Java segfault logs will also be contained there # (rather than getting lost in homedir) cd $RUNESCAPEDIR $CMDLINE >>$LOGFILE 2>&1 === -- Exec.Director @ Open Query (http://openquery.com) MySQL services Sane business strategy explorations at http://upstarta.com.au Personal blog at http://lentz.com.au/blog/