… und plötzlich ist der Sound weg.

Die Advanced Linux Sound Architecture (ALSA) ist ein mächtiges Werkzeug, was Audiowiedergabe unter Linux betrifft. Leider kann es vorkommen, daß mittendrin einfach mal der Ton ausfällt. Dies geschieht z.b. des öfteren mit Skype, praktischerweise noch vor dem eigentlichen Anruf, so daß man sich nicht ganz blamiert.

Will man dieses Problem schnell wieder in den Griff bekommen hat man meistens verloren, da sich dies nur mit Tools machen läßt, die per Default gar nicht installiert werden. PAMAN z.b. der PulseAudioManager. Mit diesem graphischen Tool kann man alles wissenswerte über seinen PulseAudio SoundServer erfahren. (Fedora: yum install paman) .  Ein guter Start um Probleme zu diagnostizieren:

 

PulseAudioManager

 

PulseAudioManager2

Wichtig sind hier die Sinks, das sind nämlich die eingebauten Soundkarten. Wenn die nicht passend zu dem was man in Rechner  hat auftauchen, dann hat meistens der Treiber das Device nicht gefunden oder der Devicetreiberteil ist grade gestorben. Ein Reboot könnte im letzteren Fall schon helfen. Wenn der Treiber gar nicht erst das Device findet, wird es Zeit einen neuen zu installieren. Wie das geht, steht an anderer Stelle und soll hier heute nicht behandelt werden.

Ist mit den Sinks auf den ersten Blick alles ok, wenden wir uns dem echten PulseAudio Mixer zu, nicht dem der im Gnome verbaut ist, der kann nämlich nix. PAVUcontrol heißt das Tool und muß auch installiert werden  ( Fedora :  yum install pavucontrol )

pavucontrol1

Dieser Systemmixer klärt dann auch mal schnell auf, ob der Sound überhaupt bei PulseAudio ankommt oder nicht.

Im obigen Bild hat QMMP ( WinAmp Kopie für Linux ) via Alsa-Plugin erfolgreich einen Datenstrom zum PulseAudioserver aufgebaut, mit anderen Worten, es müßte was zu hören sein. Wenn man nichts hört, könnte das am Audioausgabedevice liegen und das dies on-the-fly von irgendeinem Programm oder Audioevent auf ein anderes Ausgabemedium umgeleitet/stellt wurde. Besonders beliebt ist hierbei das HDMI Ausgabedevice, daß den Ton an einen mit Lautsprechern ausgestatteten Monitor (aka. Fernseher ) umleitet.

pavucontrol3

In der obigen Ansicht kann man nun ganz leicht über den grünen Knopf festlegen, daß eben nicht mehr HDMI Default ist, sondern die interne Audiohardware. Mit dem kleinen Lautsprechersymbol daneben ( mit dem kleinen X ) kann man das Audiodevice gleich abschalten, was zukünftig hoffentlich solche Fehler verhinder.t.

Kleiner Tipp: Den Fehler kann man leicht daran erkennen, daß man mit „aplay“ und dem „alsamixer“ so absolut gar nichts an seiner Situation verändern kann.

Für alle die mal wissen wollten, was Alsa so auf dem Kasten hat :

 

Alsa1

Ich habe nicht mal geahnt, daß ich ein REAR und ein FRONT Micro habe 🙂  Die einzige Stelle wo man das lästige Auto-Mute abstellen kann, ist übrigens hier. Dazu mit dem Cursor und den Cursorsteuertasten nach rechts auf Auto-Mute gehen und mit Cursor-Rauf abschalten. Alsamixer läuft nur im Terminal, da könnte man auch mal eine GUI zu machen.

Wenn Ihr noch Fragen habt, einfach anmailen.

 

Systemd und die Limits

„Jedes System kommt irgendwann an seine Grenzen.“ Einer meiner Server hatte die Grenze heute überschritten. Die Folge, der Apache stieg mit dieser Meldung aus :

„apache (24)Too many open files: couldn’t spawn child process:“

Jetzt können Sie soviel googlen wie Sie wollen, alles was zu dem Fehler kommt ist nicht hilfreich. Alle Hinweise  von RedHat zu limitfiles auf  /etc/security/limits.conf  oder /proc/sys/fs/file-max können Sie getrost vergessen, die greifen in dem Fall gar nicht.

Wenn Sie jetzt ein System V haben, ist /etc/init.d/httpd für Sie da. Tragen Sie dort einfach ulimit -n 100000 ein und starten Sie den Apache neu. Fall erledigt.

Für den Systemd, wie ihn Fedora seit FC 16 einsetzt, sieht die Sache ähnlich einfach aus, wenn man weiß wo man suchen muß. Aber mal ehrlich, würden SIe als Linuxer darauf kommen, daß „man systemd.exec“ die Hilfeseite zum Systemd öffnet? Ich nicht, .exe oder ähnliche Erweiterungen sind Windows Extentions.

Die Manpage liefert eine Übersicht zu den Variblen  die man im Unitfile benutzen kann und eine davon ( immerhin 5 Bildschirmseiten voll davon gibt es ) ist Ihr Freund: „LimitNOFILE

Suchen Sie mit „locate httpd.service“ ihr Unitfile, das ist üblicherweise unter /usr/lib/systemd/system/httpd.service zu finden. Tragen Sie dort im Servicebereich die Variable ein :

[Service]
Type=forking
PIDFile=/var/run/httpd/httpd.pid
LimitNOFILE=1000000
EnvironmentFile=/etc/sysconfig/httpd

Führen Sie noch die zwei Zeilen aus :

systemctl –system daemon-reload
systemctl restart httpd

und Ihr Apache rennt wieder 🙂

Ursachenanalyse:

Jedes Apache Child öffnet alle Domainlogs auf dem Server. Wenn Sie nun einen Multidomainwebserver haben, so wie meine Kunden, dann kommen dort schnell 1000 Vhosts zusammen. Das macht 1000 Files pro httpd-Child und damit viel mehr offene Files als Fedora defaultmäßig bereitstellt.

Hier wäre natürlich ein Logfilebroker für Apache die richtige Lösung, aber da brauchen wir wohl seitens Apache nicht drauf hoffen.