I don't know about CentOS, but if it's anything like Redhat, the system provided init scripts are very hostile to processes that don't shut down fast enough.
The killproc() function will send a TERM, wait 100k microseconds, then send a KILL.
You're running a large process on a low-memory machine. I strongly suspect CentOS isn't giving slapd enough time to shut down properly.
Instead of using the system scripts, try sending a plain kill to slapd and timing how long it takes to shut down. If it's more than 100 seconds, you'll either need to add memory (I'd recommend that anyway) or stop using the CentOS init scripts to start and stop OpenLDAP.
I tried modifying stop script adding 30 seconds sleep after killproc but the problem remains. Here is the stop script:
function stop() { # Stop daemons. prog=`basename ${slapd}` echo -n $"Stopping $prog: " killproc ${slapd} sleep 30 RETVAL=$? echo if [ $RETVAL -eq 0 ]; then if grep -q "^replogfile" /etc/openldap/slapd.conf; then prog=`basename ${slurpd}` echo -n $"Stopping $prog: " killproc ${slurpd} sleep 30 RETVAL=$? echo fi fi [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ldap /var/run/slapd.args return $RETVAL }