How to solve qmail /usr/local/bin/tcpserver:
libc.so.6: failed to map segment from shared object: Cannot
allocate memory
If you're building (compiling) a new qmail server on some Linux
host and after properly installing the qmail binaries and
daemontools, suddenly an you notice in
readproctitle service
errors: or somewhere in in qmail logs for instance
/var/log/qmail/current the error:
/usr/local/bin/tcpserver: error while loading shared
libraries:
libc.so.6: failed to map segment from shared object: Cannot
allocate memory
then
you have hit a bug caused by insufficient memory assigned
for tcpserver in your
/var/qmail/supervise/qmail-smtpd/run daemontools qmail-smtpd
initialize script:
This kind of issue is quite common especially on hardware
architectures that are 64 bit and on Linux installations that are
amd65 (x86_64) e.g. run 64 bit version of Linux.
It relates to the 64 bit architecture different memory distribution
and thus as I said to solve requires increase in memory softlimit
specified in the
run script an example good qmail-smtpd run
script configuration which fixed the
libc.so.6: failed to map
segment from shared object: Cannot allocate memory I use
currently is as follows:
#!/bin/sh QMAILDUID=`id -u vpopmail` NOFILESGID=`id -g
vpopmail` MAXSMTPD=`cat /var/qmail/control/concurrencyincoming` #
softlimit changed from 8000000 exec /usr/local/bin/softlimit -m
32000000 \ /usr/local/bin/tcpserver -v -H -R -l 0 \ -x
/home/vpopmail/etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
/var/qmail/bin/qmail-smtpd \
/home/vpopmail/bin/vchkpw /bin/true 2>&1
The default value which was for softlimit was:
exec /usr/local/bin/softlimit -m 8000000
A good softlimit raise up values which in most cases were solving
the issue for me are:
exec /usr/local/bin/softlimit -m 3000000
or
exec /usr/local/bin/softlimit -m
4000000
The above example run configuration fixed the issue on a amd64
debian 5.0 lenny install, the server hardware was:
CPU: Intel(R) Core(TM)2 Duo CPU @ 2.93GHz
System Memory: 4GB
HDD Disk space: 240GB
The
softlimit configuration which I had to setup on another
server with system parameters:
Intel(R) Core(TM) i7 CPU (8 CPUS) @ 2.80GHz
System Memory: 8GB
HDD Disk Space: 1.4Terabytes
is as follows:
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
exec /usr/bin/softlimit -m 64000000 \
/usr/local/bin/tcpserver -v -H -R -l 0 \
-x /home/vpopmail/etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
/var/qmail/bin/qmail-smtpd \
/home/vpopmail/bin/vchkpw /bin/true 2>&1
If none of the two configurations pointed out in the post works,
for you just try to manually set up the
exec /usr/bin/softlimit
-m to some high value.
To assure that the newly set value is not producing the same error
you will have to, reload completely the daemontools proc monitor
system.
To do so open
/etc/inittab comment out the line:
SV:123456:respawn:/command/svscanboot
to
#SV:123456:respawn:/command/svscanboot
Save again /etc/inittab and issue te cmd:
linux:~# init q
Now again open /etc/inittab and uncomment the commented
line:
#SV:123456:respawn:/command/svscanboot
to
SV:123456:respawn:/command/svscanboot
Lastly reload the inittab script once again with command:
linux:~# init q
To check if the error has disappeared check the
readproctitle
process, like so:
linux:~# ps ax|grep -i readproctitle
The command output should produce something like:
3070 ? S 0:00 readproctitle service errors:
.......................................
Hope that helps.