Welcher Linux Admin kennt das nicht, nach einer Gewissen uptime ist fast das gesamte Memory für cache und buffers des Servers verbraucht, eigentlich ist es nicht nötig in das Memory Management des Systems einzugreifen, ist das System jedoch knapp an Arbeitsspeicher, lässt sich mit einem einfachen Script Abhilfe schaffen.

Als root wird folgendes Script editiert:
$ vi /usr/sbin/clearcache.sh
#!/bin/bash
# freeing cache buffers
echo $(date) >> /var/log/clearcache.log
freemem_before=$(cat /proc/meminfo | grep MemFree | tr -s ' ' | cut -d ' ' -f2) && freemem_before=$(echo "$freemem_before/1024.0" | bc)
cachedmem_before=$(cat /proc/meminfo | grep "^Cached" | tr -s ' ' | cut -d ' ' -f2) && cachedmem_before=$(echo "$cachedmem_before/1024.0" | bc)
sync; echo 3 > /proc/sys/vm/drop_caches
freemem_after=$(cat /proc/meminfo | grep MemFree | tr -s ' ' | cut -d ' ' -f2) && freemem_after=$(echo "$freemem_after/1024.0" | bc)
echo -e "This freed $(echo "$freemem_after - $freemem_before" | bc) MiB, so now you have $freemem_after MiB of free RAM." >> /var/log/clearcache.log
Nun das Script ausführbar machen.
$ u+x /usr/sbin/clearcache.sh
und als crontask um 5, 13 und 21 Uhr ausführen lassen.
echo "0 5,13,21 * * * root /usr/sbin/clearcache.sh" >> /etc/crontab
Mit free -m lässt sich vor und nach dem reset das freie Memory beobachten, auch wird der Task unter /var/log/clearcache.log protokolliert und kann mit tail /var/log/clearcache.log
auf stdout ausgegeben.
