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.
Zmień po tym, jak skomentowałem apc.mmap_file_mask, jak powiedział @ cyberx86
A po kilku dniach https://serverfault.com/a/362152/88934
źródło
apc.mmap_file_mask=/tmp/apc.XXXXXX
), Możesz zobaczyć podwyższone operacje we / wy. Spróbuj ustawićapc.mmap_file_mask
użycie pamięci współdzielonej (np./apc.shm.XXXXXX
) Lub/dev/zero
(anonimowa pamięć mapowana).Odpowiedzi:
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_mask
uż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:
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.
źródło
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).
Obciążenie serwera (było już dość niskie, więc nie odkryłem zmiany).
źródło
apc.mmap_file_mask=/tmp/apc.XXXXXX