Plötzliche hohe MySQL CPU Auslastung ohne aktive Queries

2012-07-01 - 4 Kommentare »

Seite heute morgen (01.07.2012) hatten mehrere meiner MySQL Server folgende CPU Graphen die nicht durch Queries erklärbar waren:

Eine Suche nach "mysql high cpu" hilft natürlich nicht, da es genügend alte Ergebnisse zu diesem Thema gibt. Glücklicherweise bietet Google aber die Möglichkeit sich nur Ergebnisse der letzten 24 Stunden anzeigen lassen zu können und dort wurde ich fündig. Es scheint ein Kernel Bug zu sein bezüglich "Leap Second". Mozilla hat einen Blogpost mit der Lösung veröffentlicht. Wie in einem der Kommentare steht, reicht folgendes anscheinend aus:

$ date -s "`date`"

Ein Neustart des Servers behebt das Problem wohl auch, aber so kann man sich diesen sparen.

Danach sieht es dann wieder normal aus:

MySQL Server 5.5 Upgrade von Version 5.1 auf Debian Squeeze mit dotdeb

2012-05-06 - 2 Kommentare »

Ich setze auf vielen Servern dotdeb ein und seit einiger Zeit gibt es dort auch ein MySQL Server 5.5 Paket. Wie immer bei neuen Versionen, warte ich lieber ein paar Monate mit dem Upgrade, aber heute ist Sonntag und ich hatte etwas Zeit zum testen, also habe ich mich ans Werk gemacht. Zum testen natürlich erst mal auf einem Test-/Entwicklungsserver.
Weiterlesen: MySQL Server 5.5 Upgrade von Version 5.1 auf Debian Squeeze mit dotdeb »

Nginx als Reverse Proxy für statische Inhalte vor Apache

2012-01-02 - 13 Kommentare »

Vor kurzem ergab sich für mich die Möglichkeit einen Nginx als Reverse Proxy vor einen Apache zu setzen. Persönlich setze ich seit ein paar Monaten komplett auf Nginx und bin sehr zufrieden, aber in diesem Fall ist vorerst angedacht beide Server parallel laufen zu lassen. Der Nginx soll zum ausliefern von statischen Inhalten benutzt werden und alles andere an den Apache weiterreichen. Damit ist es möglich ohne Anpassungen an der Webanwendung, Last vom Apache zu nehmen und damit Last vom Server. Auf dem Server läuft Debian Squeeze und da es sich um einen Managed Server handelt, benutze ich die in Squeeze enthaltene Nginx Version 0.7.67. Für aktuellere Versionen kann dotdeb.org benutzt werden.

Ablauf Nginx als Reverse Proxy
Weiterlesen: Nginx als Reverse Proxy für statische Inhalte vor Apache »

Kein Debian 5.0 "Lenny" Support mehr ab Februar 2012

Das Debian Team hat letzte Woche das Ende des Security Supports für Debian 5.0 "Lenny" angekündigt. Ab Februar 2012 soll es keine weiteren Sicherheitsupdates geben.

This is an advance notice that security support for Debian GNU/Linux 5.0
(code name "lenny") will be terminated in two months.

The Debian project released Debian GNU/Linux 6.0 alias "squeeze" on the
6th of February 2011. Users and distributors have been given a one-year
timeframe to upgrade their old installations to the current stable
release. Hence, the security support for the old release of 5.0 is going
to end on the 6th of February 2012 as previously announced.

Previously announced security updates for the old release will continue
to be available on security.debian.org.

Wer also noch Lenny im produktiv Einsatz hat, sollte sehr bald den Umstieg auf Squeeze planen!

Apache Killer Patch steht bereit

2011-08-30 - 3 Kommentare »

Letzte Woche tauchte ein Apache 2.2 Bug auf, der bei vielen Serveradmins für Sorgenfalten sorgte. Mit einem einfachen Perl Script und nur 1 Rechner war es möglich die neueste Version des Apache 2.2 abzuschießen. Dieser verbrauchte nach ein paar Sekunden den kompletten RAM des Servers und das war es dann. Seit heute gibt es nun einen Patch für den Apache, die Debian Pakete für Lenny/Squeeze wurden angepasst und sollten umgehend installiert werden.

$ aptitude update
$ aptitude safe-upgrade
...
The following packages will be upgraded:
  apache2-mpm-worker apache2-suexec apache2-utils apache2.2-common
4 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
...

Wer es selbst testen möchte, kann den Apache Killer hier runter laden.

Related Links

Suhosin - ALERT - script tried to disable memory_limit

2011-08-28 - 2 Kommentare »

Heute fand ich eine seltsame Fehlermeldung in meinen Logfiles die mich sofort in den "dein Server wurde gehackt Modus" versetzt hat.

...
ALERT - script tried to disable memory_limit by setting it to a negative value -1 
bytes which is not allowed (attacker 'REMOTE_ADDR not set', file 'unknown')
...

Da ich das Memory Limit nie deaktivieren würde, konnte das nicht aus meinen Scripten kommen und die Logfiles waren voll davon. Nach einer Weile suchen fand ich kein Zeichen für einen Hack. Wenn es kein Hack war, musste es ein Bug oder eine Einstellungssache sein und da machte es klick. Die php-cli verwendet eine eigene php.ini und dort wird das memory_limit tatsächlich auf -1 gesetzt.

$ nano /etc/php5/cli/php.ini
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = -1

Nachdem ich das angepasst hatte, ließ sich die Meldung in den Logfiles nicht mehr blicken.

Mehrere Tar Archive auf einmal entpacken

2011-08-17 - 4 Kommentare »

Heute suchte ich eine Datei die in einem vom ca. 3000 tar.gz Archiven enthalten sein musste, aber ich wusste natürlich nicht in welchem. Da sie nicht besonders groß waren, wollte ich sie einfach alle entpacken und mir die Datei die ich suchte raus picken. Dabei stellte ich das erste mal fest das folgendes nicht funktioniert.

$ tar -xvzf *.tar.gz
tar: blablubarchive.tar.gz: Not found in archive

Man bekommt nur einen Fehler ausgegeben. Tar kann anscheinend nicht mit einem Wildcard aufrufen umgehen, aber eine Lösung war auch so schnell gefunden.

$ for i in *.tar.gz; do tar -xvzf ${i}; done

Vielleicht hilft es ja mal jemandem.

Symlinks unter Windows XP erstellen

2011-08-13 - 2 Kommentare »

Symlinks sind eine super Sache und wer öfter mit Linux zu tun hat, wird sie unter Windows vermissen, aber das muss nicht sein, den Windows kann sehr wohl auch Symlinks erstellen. Ab Windows Vista gibt es mklink dafür (eine Anleitung zu mklink gibt es hier), aber wer wie ich noch Windows XP benutzt hat wenig davon, da es das Tool hier nicht gibt.

Das ist aber kein Problem, da die einzige Voraussetzung für Symlinks unter Windows NTFS ist und das gibt es schon seit Windows 2000. Man benötigt also nur ein Tool zum erstellen des Symlinks und das gibt es von Windows Sysinternals. Es heißt Junction und so funktioniert es.

$ junction.exe -s C:\pfad\zum\symlink C:\pfad\zum\symlink\target

Als erstes wird das Ziel angegeben in dem das Target verfügbar sein soll. That's it. Nun kann man auf den Symlink zugreifen als ob es ein normales Verzeichnis ist. Es funktioniert nicht nur wie ein normales Verzeichnis, sondern es sieht auch so aus, was es etwas schwer macht zu erkennen das es sich um einen Symlink handelt. Zum entfernen des Symlinks tauscht man das -s durch ein -d aus und gibt den Pfad zum Symlink an.

$ junction.exe -d C:\pfad\zum\symlink

Ich habe die junction.exe übrigens ins Windows\System32 Verzeichnis kopiert um nicht immer den Pfad zu der Datei angeben zu müssen.

Putty Rechtsklick: Zwischenablage einfügen in MC (Midnight Commander)

2011-08-12 - 3 Kommentare »

Als alter Norton Commander User, setze ich seit dem ich das Wort Linux aussprechen kann auch den Midnight Commander ein. Eine Sache die mich dabei schon seit Jahren störte ist das man beim Midnight Commander in Putty nicht wie gewohnt die Zwischenablagen per Rechtsklick einfügen und die Markierung nicht kopieren kann. Jedenfalls dachte ich immer das dies nicht funktioniert, bis ich vor ein paar Tagen durch Zufall die Lösung gefunden habe. Ich benutze den MC recht oft um vom Server aus FTP Verbindungen aufzubauen und bisher musste ich die oft langen Passwörter immer von Hand eingeben... Nun geht das alles sehr viel einfacher. Man muss nur die Shift Taste gedrückt halten und kann dann die ganz normalen Putty Features in Verbindung mit der Zwischenablage benutzen. Das gleiche funktioniert übrigens auch im mcedit.

MySQL Verbindungen und skip-name-resolve

Heute gab es Probleme mit einem DNS Server bei meinem Hoster. Dieser antwortete nur noch wann er wollte und das hatte Auswirkungen auf meinen MySQL Server und damit auch auf alle angeschlossenen Projekte. Es hat eine Weile gedauert bis ich raus fand wo das Problem lag. Selbst wenn man keine Domainnamen benutzt in seiner MySQL Auth Config, wird versucht irgend ein Name aufzulösen. Wenn dies nicht klappt wird der Server so gut wie lahm gelegt, da die Threads im Status "unauthenticated user" hängen bleiben. Das ganze wird in diesem Bug Report besprochen und erklärt und es gibt auch gleich einen Workaround. Wenn man keine Hostnames benutzt, sondern alles über IP Adressen löst, fügt man einfach skip-name-resolve in seiner my.cnf hinzu und startet den Server neu.

Do not resolve host names when checking client connections. Use only IP addresses. If you use this option, all Host column values in the grant tables must be IP addresses or localhost..

Dann funktioniert alles wieder wie gewohnt.