Rozwiązanie społecznościowe

searchd w ZimaOS zużywa 100% CPU po przesłaniu dużego pliku: poprawka 1.3.2 i sposób, w jaki bieżące wyszukiwanie planuje indeksowanie

A January-February 2025 ZimaOS thread where searchd stayed at 100% CPU for hours or days after a large file transfer. IceWhale first explained that Files search required indexing, then identified an occasional pagination-logic corner case, fixed it in 1.3.2-beta2, added idle service folding, moved content indexing to midnight at low resource use, and documented how to disable search.

Pierwotne zachowanie związane z wysokim użyciem CPU nie polegało po prostu na tym, że „normalne indeksowanie może trwać bez końca”. Po dużym transferze plików, searchd pozostawało na poziomie 100% CPU przez wiele godzin, a niektórzy użytkownicy zgłaszali nawet kilka dni — co podnosiło temperaturę systemu i zmuszało ich do wyboru między zatrzymaniem wyszukiwania a pozostawieniem obciążonego CPU.

IceWhale podało później precyzyjne wyjaśnienie: szczególny przypadek w logice stronicowania mógł sporadycznie powodować długotrwałe obciążenie CPU. Został on naprawiony i zoptymalizowany w wersji ZimaOS 1.3.2-beta2. Ta sama aktualizacja dodała składanie silnika wyszukiwania po okresie bezczynności, zapewniła dokładne indeksowanie nazw plików w czasie rzeczywistym oraz przeniosła indeksowanie zawartości plików na północ, przy niższym użyciu zasobów. Aktualna dokumentacja wyszukiwania ZimaOS została jeszcze bardziej rozwinięta i zawiera wyraźne ograniczanie zasobów oraz znacznie niższe zużycie pamięci w stanie bezczynności i liczbę usług.

Monitor systemu ZimaOS pokazujący proces searchd zużywający 100% CPU po przesłaniu dużego pliku
Monitor źródłowy pokazuje searchd dominując użycie CPU po zakończeniu transferu.

Wyszukiwanie wymaga indeksu

Zima-Giorgio początkowo wyjaśnił, że funkcja wyszukiwania plików musi je indeksować. Ta część była poprawna, ale nie wyjaśniała, dlaczego użycie CPU przez nietypowo długi czas pozostawało na maksymalnym poziomie.

IceWhale później zidentyfikowało szczególny przypadek w logice stronicowania

11 lutego 2025 r. orca-zhang stwierdził, że długotrwałe obciążenie CPU mogło być sporadycznie powodowane błędem w logice stronicowania, a problem został naprawiony i zoptymalizowany w wersji 1.3.2-beta2.

To najmocniejszy wniosek ze źródeł i powinien zastąpić wcześniejsze, ogólnikowe wyjaśnienie „trwa indeksowanie”.

W wersji 1.3.2 dodano składanie usługi wyszukiwania po bezczynności

IceWhale poinformowało, że gdy wyszukiwanie nie było potrzebne, searchd miał zostać zwolniony po około trzech minutach bezczynności, pozostawiając jedynie lekką usługę zimaos-search usługa poniżej 100 MB pamięci i około 0–1% CPU.

Indeksowanie zawartości przeniesiono na północ

Ta sama odpowiedź rozdzielała dwa zadania:

  • indeks nazw plików — utrzymywany z możliwie największą dokładnością i w czasie rzeczywistym;
  • indeks zawartości plików — opóźniony do północy i uruchamiany przy niskim użyciu zasobów.

To rozróżnienie nadal obowiązuje w obecnej architekturze wyszukiwania.

Aktualna dokumentacja IceWhale opisuje:

  • monitorowanie zmian plików w czasie rzeczywistym i indeksowanie nazw plików;
  • indeksowanie zawartości o północy;
  • maksymalnie 100 000 dokumentów na typ przetwarzania/sesję;
  • maksymalnie pięć minut przetwarzania na typ;
  • ochronę za pomocą bariery zapisu przed skokami użycia procesora;
  • zwijanie usługi/pamięci po okresie bezczynności.

Użyj aktualnej architektury wyszukiwania ZimaOS.

Wyszukiwanie można było wyłączyć od wersji ZimaOS 1.3.2

orca-zhang powiedział, że trwałość dodana do /etc w wersji 1.3.2 pozwalało użytkownikom, którzy nie potrzebowali wyszukiwania, uruchomić:

systemctl disable zimaos-search

Zatrzymanie lub wyłączenie wyszukiwania oznacza, że wyszukiwanie plików zgłosi niedostępność usługi. Obecni użytkownicy powinni najpierw sprawdzić działanie wyszukiwania w aktualnej wersji, zanim wyłączą podstawową usługę wyłącznie z powodu historycznego błędu.

Zrzut ekranu „/dev/root — 100% pełne” dotyczył innego problemu

Inny uczestnik zauważył /dev/root wyświetlała 100% wykorzystania i użytkownik próbował ją powiększyć. IceWhale wyjaśniło, że ta tylko do odczytu reprezentacja głównego systemu plików SquashFS jest zamierzona dla zachowania integralności systemu i nie należy traktować jej jak zwykłej zapisywalnej partycji głównej, która wymaga wolnego miejsca.

Nie zmieniaj rozmiaru ani nie usuwaj partycji systemowych ZimaOS, ponieważ obraz SquashFS zgłasza pełne wykorzystanie.

Panel ZimaOS w okresie wysokiego użycia procesora przez searchd, pokazujący obciążenie procesora systemu, pamięć masową i zainstalowane aplikacje
Wysokie użycie procesora przez wyszukiwanie było widoczne na poziomie systemu, mimo że działanie bazowego układu głównego systemu plików tylko do odczytu przebiegało zgodnie z założeniami.

Gdy wyszukiwanie powoduje wysokie użycie procesora w aktualnej wersji ZimaOS

  1. potwierdź, że system korzysta z aktualnej stabilnej wersji ZimaOS;
  2. sprawdź, czy niedawno zaimportowano duży plik;
  3. poczekaj na zakończenie udokumentowanego okna indeksowania;
  4. monitoruj, czy użycie procesora spada po okresie bezczynności usługi;
  5. zbieraj aktualne zimaos-search logi, jeśli użycie procesora pozostaje wysokie znacznie dłużej niż przewidywany czas.

Najczęstsze pytania dotyczące wysokiego użycia procesora przez searchd

Czy użycie procesora na poziomie 100% przez kilka dni uznawano za normalne?

Nie. IceWhale później zidentyfikowało przypadek brzegowy w logice stronicowania i naprawiło go w wersji 1.3.2-beta2.

Kiedy obecna wersja ZimaOS indeksuje zawartość?

Obecna dokumentacja podaje, że indeksowanie zawartości odbywa się w godzinach nocnych, o północy, natomiast zmiany nazw plików są indeksowane w czasie rzeczywistym.

Czy 100% przy /dev/root oznacza, że na dysku systemowym zabrakło wolnego miejsca?

Nie w tej sprawie. IceWhale wyjaśniło, że reprezentacja głównego systemu plików SquashFS jest celowo tylko do odczytu i powinna wyświetlać pełne wykorzystanie.