Bug#534418: boinc-client: client apps memory leaks cause OOM crashes

Michael R. Crusoe michael at qrivy.net
Wed Jun 24 08:19:52 UTC 2009


Package: boinc-client
Version: 6.2.14-3
Severity: critical
Tags: patch
Justification: causes serious data loss


Client apps can have crufty code leading to OOM conditions. The attached patch prevents this from taking down the system by configuring oom_adj to favor removal.


-- Package-specific info:
-- Contents of /etc/default/boinc-client:
# This file is /etc/default/boinc-client, it is a configuration file for the
# /etc/init.d/boinc-client init script.

# Set this to 1 to enable and to 0 to disable the init script.
ENABLED="1"

# Set this to 1 to enable advanced scheduling of the BOINC core client and
# all its sub-processes (reduces the impact of BOINC on the system's
# performance).
SCHEDULE="1"

# The BOINC core client will be started with the permissions of this user.
BOINC_USER="boinc"

# This is the data directory of the BOINC core client.
BOINC_DIR="/var/lib/boinc-client"

# This is the location of the BOINC core client, that the init script uses.
# If you do not want to use the client program provided by the boinc-client
# package, you can specify here an alternative client program.
BOINC_CLIENT="/home/michael/src/BOINC/boinc"
#BOINC_CLIENT="/usr/bin/boinc"

# Here you can specify additional options to pass to the BOINC core client.
# Type 'boinc --help' or 'man boinc' for a full summary of allowed options.
#BOINC_OPTS="--allow_remote_gui_rpc"
BOINC_OPTS=""

-- System Information:
Debian Release: 5.0.1
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 2.6.18.8-linode16 (SMP w/4 CPU cores)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash

Versions of packages boinc-client depends on:
ii  adduser                3.110             add and remove users and groups
ii  ca-certificates        20080809          Common CA certificates
ii  debconf [debconf-2.0]  1.5.24            Debian configuration management sy
ii  libc6                  2.7-18            GNU C Library: Shared libraries
ii  libcurl3               7.18.2-8lenny2    Multi-protocol file transfer libra
ii  libssl0.9.8            0.9.8g-15+lenny1  SSL shared libraries
ii  libstdc++6             4.3.2-1.1         The GNU Standard C++ Library v3
ii  lsb-base               3.2-20            Linux Standard Base 3.2 init scrip
ii  python                 2.5.2-3           An interactive high-level object-o
ii  zlib1g                 1:1.2.3.3.dfsg-12 compression library - runtime

boinc-client recommends no packages.

Versions of packages boinc-client suggests:
pn  boinc-app-seti                <none>     (no description available)
pn  boinc-manager | kboincspy     <none>     (no description available)
ii  schedtool                     1.2.10-1   Queries/alters process' scheduling

-- debconf information excluded

*** /home/michael/boinc-client.patch
--- /etc/init.d/boinc-client	2009-01-18 20:08:16.000000000 -0700
+++ boinc-client	2009-06-24 00:47:04.000000000 -0700
@@ -27,6 +27,7 @@
 BOINC_USER=boinc
 BOINC_DIR=/var/lib/boinc-client
 BOINC_CLIENT=/usr/bin/boinc
+BOINC_OOM_ADJ=15
 
 # Source defaults file. Edit that file to configure this script.
 if [ -e /etc/default/boinc-client ]; then
@@ -121,10 +122,11 @@
       fi
     fi
 
+    children=`ps --ppid $pid -o pid= | tr '\n' ' '`
+
     if [ ! -x "`which schedtool 2>/dev/null`" ]; then
       log_progress_msg "schedtool not found"
     else
-      children=`ps --ppid $pid -o pid= | tr '\n' ' '`
       (schedtool -n 19 -D $pid $children >/dev/null \
         && log_progress_msg "idleprio") || \
       (schedtool -n 19 -B $pid $children >/dev/null \
@@ -132,6 +134,8 @@
       (schedtool -n 19 -N $pid $children >/dev/null \
         && log_progress_msg "normal")
     fi
+
+    for BPID in ${pid} ${children}; do echo ${BOINC_OOM_ADJ} > /proc/${BPID}/oom_adj; echo; done
   fi
   log_end_msg 0
 }
@@ -141,17 +145,21 @@
   STATUS="Status of $DESC:"
   if is_running; then
     log_success_msg "$STATUS running."
+
+    children=`ps --ppid $pid -o pid= | tr '\n' ' '`
     if [ -x "`which schedtool 2>/dev/null`" ]; then
       log_success_msg "Scheduling of $DESC:"
       schedtool $pid
 
-      children=`ps --ppid $pid -o pid= | tr '\n' ' '`
       if [ -n "$children" ]; then
         log_success_msg "Scheduling of $DESC's children:"
         schedtool $children
       fi
     fi
 
+    log_success_msg "OOM killer status for $DESC:"
+    for BPID in ${pid} ${children}; do echo PID ${BPID}: adj `cat /proc/${BPID}/oom_adj`, score `cat /proc/${BPID}/oom_score`; done
+
     # Display $BOINC_USER's cpu_share:
     uid=`id -u $BOINC_USER`
     cpu_share_file="/sys/kernel/uids/$uid/cpu_share"


-- System Information:
Debian Release: 5.0.1
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 2.6.18.8-linode16 (SMP w/4 CPU cores)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash

Versions of packages boinc-client depends on:
ii  adduser                3.110             add and remove users and groups
ii  ca-certificates        20080809          Common CA certificates
ii  debconf [debconf-2.0]  1.5.24            Debian configuration management sy
ii  libc6                  2.7-18            GNU C Library: Shared libraries
ii  libcurl3               7.18.2-8lenny2    Multi-protocol file transfer libra
ii  libssl0.9.8            0.9.8g-15+lenny1  SSL shared libraries
ii  libstdc++6             4.3.2-1.1         The GNU Standard C++ Library v3
ii  lsb-base               3.2-20            Linux Standard Base 3.2 init scrip
ii  python                 2.5.2-3           An interactive high-level object-o
ii  zlib1g                 1:1.2.3.3.dfsg-12 compression library - runtime

boinc-client recommends no packages.

Versions of packages boinc-client suggests:
pn  boinc-app-seti                <none>     (no description available)
pn  boinc-manager | kboincspy     <none>     (no description available)
ii  schedtool                     1.2.10-1   Queries/alters process' scheduling

-- debconf information excluded





More information about the pkg-boinc-devel mailing list