// Snippet

macOS: Too many open files

Vor kurzem hat sich MariaDB unter macOS mit dem Fehler "Too many open files" verabschiedet. Der Fehler ist beim Schreiben bzw. Erzeugen von Tabellen aufgetreten. Die Anwendung konnte nach dem Neustart von MariaDB nicht mehr auf die Datenbank zugreifen. Die Datenbank war korrupt. MariaDB ist an diesem Fehler nicht direkt schuld, sondern macOS. Da parallel noch einige weitere Anwendungen, wie z.B. Elasticsearch, liefen, hat ein Limit von macOS gegriffen.

Das Limit für parallel geöffnete Dateien kannst du dir mit dem folgenden Befehl anzeigen lassen:

$ launchctl limit maxfiles
  maxfiles    256            unlimited

Das Soft-Limit (erster Wert) ist in meinem Fall einfach zu niedrig gewesen. Um das Limit zu erhöhen, musst die Datei /Library/LaunchDaemons/limit.maxfiles.plist angelegt werden. Der Inhalt sieht wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

Damit wird das Soft-Limit auf 64000 und das Hard-Limit auf 524288 gesetzt. Für die Datei muss der Eigentümer angepasst werden. Die Änderungen werden wirksam, nachdem der Mac neugestartet wurde.

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

Nach dem Neustart kann mit dem ersten Befehl erneut das Limit geprüft werden. MariaDB läuft seit den Änderungen ohne Probleme.

Quelle:
// Snippet

Linux: Backup-Tools

Um Backups unter Linux zu erstellen, kann man z.B. Borg Backup oder restic einsetzen:

Beide Tools setzen auf einen ähnlichen Ansatz. Das Backup wird unter anderem inkrementell und verschlüsselt erstellt. Ich setze Borg Backup mit einer Storage Box von Hetzner ein. Der größte Unterschied ist, dass Borg Backup nur über SSH das Backup auf einem anderen Server speichern kann. Bei restic kann das Backup auch in Amazon S3, Google Cloud Storage oder Microsoft Azure gespeichert werden.

Der folgende Artikel gibt einen guten Start in die Einrichtung von Borg Backup: Server-Backups mit Borg: So sichere ich meine Server

// Snippet

ncdu - Große Ordner und Dateien finden

Wenn die Festplatte voll ist, dann hat dies einen negativen Einfluss auf das System. Vieles wird nicht mehr wie gewohnt funktionieren. Mit ncdu lässt sich über das Terminal herausfinden, wo die Ursachen liegen.

Das Tool kann klassisch über apt install ncdu oder brew install ncdu installiert werden.

Mit sudo ncdu / wird die komplette Festplatte eingelesen und man bekommt anschließend eine Übersicht über die größten Ordner und Dateien.

Ein Beispiel für die Ausgabe von ncdu:

ncdu 1.12 ~ Use the arrow keys to navigate, press ? for help
--- / ----------------------------------------------------------
   43.3 GiB [##########] /docker
   23.7 GiB [#####     ] /var
    2.2 GiB [          ] /cache
    1.9 GiB [          ] /home
    1.3 GiB [          ] /usr
  867.3 MiB [          ] /lib
  704.5 MiB [          ] /root
  142.5 MiB [          ] /boot
   38.4 MiB [          ] /tmp
   15.7 MiB [          ] /bin
   15.2 MiB [          ] /sbin
    6.3 MiB [          ] /etc
    2.6 MiB [          ] /run
   16.0 KiB [          ] /opt
   16.0 KiB [          ] /mnt
e  16.0 KiB [          ] /lost+found
    8.0 KiB [          ] /media
    8.0 KiB [          ] /snap
    4.0 KiB [          ] /lib64
e   4.0 KiB [          ] /srv
.   0.0   B [          ] /proc
    0.0   B [          ] /sys
 Total disk usage:  74.1 GiB  Apparent size:  74.0 GiB  Items: 1829938
// Snippet

Docker: Größe von Log-Dateien limitieren

Docker nimmt mit den Containern und Images gut Speicherplatz in Anspruch. Aber auch die Logs der Container können sehr groß werden. Wenn du mal wissen willst wie viel Speicher die Logs benötigen, kannst du dies mit diesem Befehl herausfinden:

docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl

Wenn der aktuelle Benutzer nicht die ausreichenden Berechtigungen hat, ist eventuell ein sudo vor dem ls notwendig.

Da ich nur die aktuellen Logs brauche, müssen die nicht sehr lange aufbewahrt werden. In die Datei /etc/docker/daemon.json muss folgendes ergänzt werden:

{
 "log-driver": "json-file",
 "log-opts": {
   "max-size": "10m",
   "max-file": "3"
  }
}

Die Container müssen alle neugestartet werden, damit die Einstellung übernommen wird.

Quellen:
// Snippet

PHP: Inline static caching

Wird eine PHP-Methode mehrfach aufgerufen, lässt sich der Inhalt einer Variable zwischenspeichern.

class Post extends Model
{
    public function commentCount()
    {
        static $cache;

        return $cache ?: $cache = $this->comments()->count();
    }
}
Quelle:
// Snippet

MailHog einrichten

Mit MailHog werden alle E-Mails abgefangen, die von Websites verschickt werden, die in der lokalen Entwicklungsumgebung genutzt werden.

brew install mailhog
brew services start mailhog
echo 'sendmail_path = "/usr/local/bin/mailhog sendmail test@example.org"' > /usr/local/etc/php/7.4/conf.d/mailhog.ini
valet restart

Web-Oberfläche von MailHog: http://localhost:8025

Quelle:
Vermutlich verwendest du einen veralteten Browser. Da diese Website auf moderne Technik setzt, benötigst du einen aktuellen Browser, um diese Website richtig darzustellen.