Skip to content

Własny Mastodon - cache i optymalizacja

Posted on:2 grudnia 2022 at 14:39
Reading TIme:3 min czytania
Feature Image for  Własny Mastodon - cache i optymalizacja

Po kilku dniach użytkowania prywatnej instancji mastodon doszedłem do krytycznego momentu: zabrakło miejsca na serwerze. To z kolei sprawiło że baza danych Postgres przestała działać i w ostateczności Mastodon zwracał błąd 500. CO poszło nie tak?!

Miniseria

  1. Mastodon - mam i ja

  2. Mastodon - uruchomienie z Dockera

  3. Mastodon - Optymalizacja i cache

  4. To już jest koniec!

Co poszło nie tak?

Jakiś czas temu - tuż po publikacji wpisu o osobistej instancji - uruchomiłem na szybko monitoring serwera, dzięki czemu na bieżąco mam informacje o procesach, zajętości dysku oraz SWAP.

Największym problemem jest cache i przechowanie wszystkich assetów graficznych, pochodzących z obserwowanych przeze mnie profili, ale także z timeline całej federacji (szczególnie tych, do których ustawiłem przekaźniki).

Wbudowane mechanizmy do czyszczenia cache

Mastodon ma w sobie mechanizmy do czyszczenia cache czy optymalizacji systemu. Warto zajrzeć do dokumentacji - Using the admin CLI - Mastodon documentation - interesujące nas komendy:

Subiektywnie, to nie za bardzo to działa. Jeśli nawet, to praktycznie niezauważalnie dla całego osobistego ekosystemu, bo w ostateczności doprowadziło do przekroczenia krytycznych zasobów i ubicia całego VPS.

Manualne usunięcie cache

Nie mając wiele do stracenia, zalogowałem się do serwera via SSH i usunąłem całą zawartość /mastodon/public/system/cache za pomocą polecenia rm -rf /mastodon/public/system/cache . Odzyskałem przestrzeń i mogłem ponownie wystartować własną instancję - różnica jest ogromna, bo mówimy o ponad 20 GB danych.

Druga strona medalu to niedostępne grafiki (avatary + covery profilów), które przewijały się przez cały czas na timeline. Gdy próbowałem pobrać grafiiki, to mój serwer zwracał 404. Zastanawiam się, dlaczego mastodon ponownie nie pobrał tych grafik, skoro nie było ich w zasobie pamięci tymczasowej?

Tak czy siak, można odbudować cache poleceniem tootctl accounts refresh -all. Przy czym zaznaczam: jest to operacja zasobo- / czaso- chłonna.

Retencja danych

Naiwnie uznałem, ze wartości 10d sa optymalne dla ustawień retencji danych danego serwera. Po ww. krytycznej sytuacji szybko zmieniłem na 1d i czekałem na to, co się stanie.

Z wykresu wynika, że cyklicznie gdzieś nad ranem system czyści się z niepotrzebnych rzeczy i tym samym odzyskujemy cenne miejsce na kolejne aktualizacje, avatary czy załączniki. I tak co 24 h.

Skrypt optymalizujący grafikę

Nadal nie dawało mi to spokoju, więc zacząłem przeglądać zgłoszone problemy w oficjalnym repo Mastodona i trafiłem na temat związany z brakiem optymalizacji multimediów.

Delikatnie ucieszyłem się z faktu, iż nie jestem jedyną osobą, która ma ten problem. @phocks przygotował prosty skrypt do optymalizacji cache, przy wykorzystaniu 2 bibliotek do kompresji.

sudo apt install jpegoptim pngquant -y

a skrypty wygląda tak:

#!/usr/bin/env bash
cd /home/mastodon/live/public/system/cache
find -name '*.jpg' -print0 | xargs -0 jpegoptim --verbose --preserve --threshold=1 --max=45
find -name '*.jpeg' -print0 | xargs -0 jpegoptim --verbose --preserve --threshold=1 --max=45

cd /home/mastodon/live/public/system/cache/accounts
find -name '*.png' -print0 | xargs -0 pngquant --verbose --ext=.png --force --speed 10 --quality 45-50 --skip-if-larger

cd /home/mastodon/live/public/system/cache/media_attachments
find -name '*.png' -print0 | xargs -0 pngquant --verbose --ext=.png --force --speed 10 --quality 45-50 --skip-if-larger

cd /home/mastodon/live/public/system/cache/preview_cards
find -name '*.png' -print0 | xargs -0 pngquant --verbose --ext=.png --force --speed 10 --quality 45-50 --skip-if-larger

Sprawdza się znakomicie, więc można zautomatyzować proces, poprzez dodawanie go do crona i już. nie jestem pewien, czy tak to powinno się robić, ale jednak jako One-Man swojego prywatnego serwera muszę tak to czynić.

Czyszczenie z poziomu dockera

A skoro mowa o skryptcie do optymalizacji cache i ogólnie multimediów, to warto też dodać poniższy skrypt:

docker exec -ti mastodon_web_1 /bin/sh -c "tootctl statuses remove && tootctl media remove --days=2 && tootctl  preview_cards remove --days=2 && tootctl media remove-orphans && tootctl media usage"

Co robi?

Czy to pomaga? Tak, zdecydowanie tak. Można odzyskać od 2-7GB danych dziennie. Mówimy o prywatnej instancji i trudno mi wyobrazić sytuację z kilkoma użytkownikami



Możesz napisać do mnie e-mail lub wyszukać mnie na Mastodonie.
Loading...