Wysoki poziom We / Wy dysku, gdy używana jest pamięć podręczna?

9

Kilka dni temu zauważyłem oczekiwanie we / wy dysku i spadek aktywności dysku (co było świetne). Następnie zauważam również, że moja pamięć podręczna była pełna (*) i pofragmentowana. Potem opróżniłem pamięć podręczną. Następnie opóźnienie dysku i aktywność dysku przeskoczyły na poprzedni poziom (co było złe).

IOtop pokazuje, że [jbd2 / sda2-8] i [flush-8: 00] zawsze zajmują więcej miejsca na dysku. Jest to sprzętowy RAID 1 (H200) Dell R210 z dużą ilością wolnej pamięci (łącznie 16 GB, z czego około 8 GB to bufor / pamięć podręczna).

(*) Pamięć podręczna to pamięć podręczna kodu APC dla PHP, która ogranicza dostęp do dysku w celu wykonania skryptu PHP. Pamięć podręczna była pełna i pofragmentowana, ponieważ zawierała pliki z instancji programistycznej. Kiedy to zauważyłem, odfiltrowałem je.

Pytanie brzmi: dlaczego dyskowe operacje we / wy zwiększają się, gdy teoretycznie powinny się zmniejszać? Poniżej kilka wykresów z Munina. Pamięć podręczna była pełna od 6 do 8 lutego.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj Pamięć podręczna APC jest obecnie w porządku.

Zmień po tym, jak skomentowałem apc.mmap_file_mask, jak powiedział @ cyberx86

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

A po kilku dniach https://serverfault.com/a/362152/88934

Jcisio
źródło
2
Ten wykres nie pokazuje wzrostu IO.
psusi
1
Jeśli korzystasz z mapowania pamięci opartego na plikach (np. apc.mmap_file_mask=/tmp/apc.XXXXXX), Możesz zobaczyć podwyższone operacje we / wy. Spróbuj ustawić apc.mmap_file_maskużycie pamięci współdzielonej (np. /apc.shm.XXXXXX) Lub /dev/zero(anonimowa pamięć mapowana).
cyberx86,
1
@psusi od 6 lutego 12 wieczorem do 8 lutego 12 wieczorem było niskie, a następnie wzrosło.
jcisio
@ cyberx86 Właśnie go zmieniłem (skomentowałem ten wiersz, aby użyć anonimowej pamięci mapowanej) i wygląda na to, że to pomoc. Będę monitorować jeszcze kilka minut, aby zobaczyć. Dzięki.
jcisio
2
@psusi Wystąpiło / występowało wiele problemów, które mogę jedynie wznowić, nie wyjaśniam: 1 / Brak pamięci podręcznej APC (ale trafienie w pamięć podręczną systemu operacyjnego dla tych plików PHP, więc bardzo mało operacji we / wy dysku, mniej czasu oczekiwania, ale więcej średniego czasu operacji we / wy , który głównie zatwierdza transakcję MySQL InnoDB) 2 / trafienie w pamięć podręczną APC, ale APC używa plików (wtedy brakuje pamięci podręcznej systemu operacyjnego, nie wiem dlaczego) 3 / krótkie, moje pytanie brzmi: „gdy pamięć podręczna działała źle, nie ma (prawie) dysku I / O ”- to, co mówisz, jest całkowicie sprzeczne z tym.
jcisio

Odpowiedzi:

10

Jeśli korzystasz z mapowania pamięci opartego na plikach (np. apc.mmap_file_mask=/tmp/apc.XXXXXX), Możesz zobaczyć podwyższone operacje we / wy.

Spróbuj ustawić apc.mmap_file_maskużycie pamięci współdzielonej (np. /apc.shm.XXXXXX) Lub /dev/zero(anonimowa pamięć mapowana). Utrzymanie niezdefiniowanego ustawienia powoduje, że używa anonimowej pamięci mapowanej na mapie.

Zwykle pliki mmapped to świetna rzecz:

  • W porównaniu z przechowywaniem czegoś całkowicie w pamięci, pliki zmapowane zwykle wymagają mniej pamięci
  • W porównaniu do zapisywania czegoś w pliku, pliki zmapowane wymagają mniejszej liczby operacji na dysku (ponieważ zapisy mogą być agregowane razem).

Jednak w porównaniu z przechowywaniem czegoś czysto w pamięci, powodują dodatkowe operacje wejścia / wyjścia - znacznie, gdy plik ciągle się zmienia. Minusem nieużywania plików mmapped jest brak trwałości - pamięć podręczna nie przetrwa ponownego uruchomienia, ponieważ jest przechowywana tylko w pamięci.

Można więc zasugerować, że podczas gdy pamięć podręczna zapełniała się i stabilizowała, przechodziła największą zmianę, którą trzeba było stale zapisywać na dysku; po zapełnieniu pamięci podręcznej ttl dla każdego obiektu spowalniał szybkość odwracania danych w pamięci podręcznej, zmniejszając zmianę i redukując zapisy na dysku.

cyberx86
źródło
4

Po kilku dniach chcę teraz wrócić z kilkoma wykresami. Zmiana znacznie poprawia tę sytuację. Zmniejsza wszystko, z wyjątkiem czasu obsługi IO (myślę, że dzieje się tak, ponieważ nie ma już trywialnego, małego pliku PHP, który jest tani).

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Obciążenie serwera (było już dość niskie, więc nie odkryłem zmiany).

wprowadź opis zdjęcia tutaj

Jcisio
źródło
Czy możesz podać zmiany, które wprowadziłeś?
Mircea Vutcovici
Przeczytaj komentarz do pytania i zaakceptowaną odpowiedź. Skomentowałemapc.mmap_file_mask=/tmp/apc.XXXXXX
jcisio
Hej, przepraszam, że przeszkadzam. Czy widziałeś kiedyś efekt uboczny komentowania linii mmap_file_mask ?. Widzę ten sam problem ... i to wyraźnie rozwiązuje problemy z użytkowaniem I / O. Ale zastanawiałem się ... czy nic innego się nie złamie! Dzięki!
Jorge Leandro Perez
Nie miałem problemu z komentowaniem tej linii.
jcisio