SWAP Bereich vergrössern

Manchmal stosst man mit dem physischen RAM Space an Grenzen. Gerade wenn man z.B. riesige MySQL Queries verarbeiten möchte und eine RAM Disk dafür verwendet. Manchmal muss man schnell handeln können. Und wenn man nicht eine zusätzliche SWAP Partition erstellen möchte, kann man auch mit SWAP Files arbeiten. Hier erstellt man einfach ein File mit einer fixen/reservierten Grösse, die dann als SWAP File verwendet werden kann.

SWAP File erstellen

Achtung! SWAP File auf keinen Fall auf eine NFS Partition legen. Das ist langsam und kann den gesamten Server zum Absturz / Total Crash bringen!

Ich erstelle hier 2 SWAP Files auf zwei verschiedenen Partitionen. Einmal 2GB und einmal 1GB gross:

mkdir /var/swap
mkdir /usr/swap
dd if=/dev/zero of=/var/swap/swapfile.dat bs=1m count=2048
dd if=/dev/zero of=/usr/swap/swapfile.dat bs=1m count=1024
chmod 0600 /var/swap/swapfile.dat
chmod 0600 /usr/swap/swapfile.dat

Nun die SWAP Files im rc.conf eintragen, damit diese beim nächsten Startup wieder Verfügbar sind.

vi /etc/rc.conf

folgendes eintragen:

swapfile="/var/swap/swapfile.dat" 
swapfile="/usr/swap/swapfile.dat"

Nun SWAP aktivieren:

/etc/rc.d/addswap start

Alternativ kann man es auch wie folgt aktiveren. Mit (-u) übergibt man die unit number. Diese wiederum ist dann auch das 0 bzw. 1 nach md.

mdconfig -a -t vnode -f /var/swap/swapfile.dat -u 0 && swapon /dev/md0
mdconfig -a -t vnode -f /usr/swap/swapfile.dat -u 1 && swapon /dev/md1

Swap Info

mit swapinfo kann man den aktuellen Status checken:

 swapinfo -h
Device          1K-blocks     Used    Avail Capacity
/dev/vtbd0p5      2096128     1.9M       2G     0%
/dev/md2          2097152     1.5M       2G     0%
/dev/md0          1048576     1.4M       1G     0%
Total             5241856     4.7M       5G     0%

Swap File entfernen / deaktivieren

Um ein Swap File zu deaktivieren, erst mal die Infos über die SWAP File Location holen:

mdconfig -lv

md0     vnode    1024M  /usr/swap/swapfile.dat
md2     vnode    2048M  /var/swap/swapfile.dat

Jetzt möchte ich z.B. /dev/md0 deaktiveren – hier wieder nachher bei mdconfig: wenn md0, dann -u 0, falls md2, dann -u 2 etc:

swapctl -d /dev/md0
mdconfig -d -u 0

Dann natürlich noch das

  • Swapfile aus rc.conf entfernen
  • sowie das entsprechende File manuell löschen (rm -rf /usr/swap/swapfile.dat).

Weitere Informationen

Fehlermeldungen / Problemlösungen

mysqld got signal 11

Im Zusammenhang mit MySQL und zusätzlichen SWAP Bereichen sind plötzlich ganz viele seltsame Dinge passiert: Der Server war per SSHnicht mehr erreichbar, Mysql ist gestorben und später ist sogar der gesamte Server komplett abgestürzt. Er war nicht einmal mehr über die Konsole ansprechbar.

Das war der MySQL Fehler, nachdem ich eine riesige Table reparieren wollte:

140109 12:13:41 [ERROR] Got an error from thread_id=80565, /usr/ports/databases/mysql55-server/work/mysql-5.5.29/storage/myisam/ha_myisam.cc:912
140109 12:13:41 [ERROR] MySQL thread id 80565, OS thread handle 0x80240ac00, query id 8630549 localhost root Checking table
CHECK TABLE `piwik_log_link_visit_action`
11:46:30 UTC - mysqld got signal 11 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed, 
something is definitely wrong and this may fail.

key_buffer_size=268435456
read_buffer_size=1048576
max_used_connections=43
max_threads=1024
thread_count=6
connection_count=6
It is possible that mysqld could use up to 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 3419256 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

Die Ursache des Problems war, dass ich aus Unachtsamkeit einen SWAP Bereich auf eine NFS Partition legte. Das hat das gesamte System komplett lahmgelegt. Als ich diesen SWAP Bereich entfernte und auf interne Server Platten legten, lief wieder alles stabil und ich konnte endlich die riesige SQL Query durchlaufen lassen.

Flattr this!

  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben