Standardowe pliki / narzędzia zgłaszające pamięć wydają się mieć różne formaty w różnych dystrybucjach systemu Linux. Na przykład w Arch i Ubuntu.
Łuk
$ free total used free shared buff/cache available Mem: 8169312 3870392 2648348 97884 1650572 4110336 Swap: 16777212 389588 16387624 $ head /proc/meminfo MemTotal: 8169312 kB MemFree: 2625668 kB MemAvailable: 4088520 kB Buffers: 239688 kB Cached: 1224520 kB SwapCached: 17452 kB Active: 4074548 kB Inactive: 1035716 kB Active(anon): 3247948 kB Inactive(anon): 497684 kB
Ubuntu
$ free total used free shared buffers cached Mem: 80642828 69076080 11566748 3063796 150688 58358264 -/+ buffers/cache: 10567128 70075700 Swap: 20971516 5828472 15143044 $ head /proc/meminfo MemTotal: 80642828 kB MemFree: 11565936 kB Buffers: 150688 kB Cached: 58358264 kB SwapCached: 2173912 kB Active: 27305364 kB Inactive: 40004480 kB Active(anon): 7584320 kB Inactive(anon): 4280400 kB Active(file): 19721044 kB
Jak mogę przenośnie (tylko w różnych dystrybucjach Linuksa) i niezawodnie uzyskać ilość pamięci - z wyjątkiem wymiany - dostępnej dla mojego oprogramowania w określonym czasie? Prawdopodobnie to jest pokazywane jako „dostępne” i „MemAvailable” na wyjściu free
iw cat /proc/meminfo
Arch, ale jak mogę uzyskać to samo w Ubuntu lub innej dystrybucji?
awk -v low=$(grep low /proc/zoneinfo | awk '{k+=$2}END{print k}') '{a[$1]=$2}END{m=a["MemFree:"]+a["Active(file):"]+a["Inactive(file):"]+a["SReclaimable:"]; print a["MemAvailable:"],m-low}' /proc/meminfo
która powinna dać mi ten sam numer wydrukowany dwukrotnie. Jednak druga liczba (moje rozumienie algorytmu, który sugerujesz) jest wyższa niżMemAvailable
pokazana w/proc/meminfo
. Co ja robię źle?/proc/zoneinfo
zlicza strony, które mają rozmiar głównie 4KBamd64
; brakuje Ci również dodatkowego bezpieczeństwa dodanego do pamięci podręcznej strony i pamięci, którą można odzyskać. Upraszczając to drugie, możemy trzy razy odjąć niski znak wodny, więcm-12*low
(3 × 4KB) daje prawidłowy wynik w moim systemie. (To uproszczenie nie docenia dostępnej pamięci, jeśli pamięć podręczna strony lub pamięć do odzyskania jest mniejsza niż dwukrotność niskiego znaku wodnego, ale i tak nie chcesz używać dużej ilości pamięci w tej sytuacji, więc wydaje się to rozsądnym kompromisem.)(file)
wpisu, aniSReclaimable
wpisu? Na starszym pudełku Centos z jądrem w wersji 2.6.18-348.16.1.el5xen (peruname -r
) jest to wyjście, które otrzymuję: pastebin.com/iFWiM1kX . Twoje obliczenia przyciągają tylkoMemFree
częśćChociaż odpowiedź Stephena jest całkowicie wystarczająca i popełniła błąd po stronie ostrożności, postanowiłem napisać pełną logikę, w tym minimalne porównania. Informacje są najpierw odczytywane z / proc / meminfo i przechowywane w zmiennej, dzięki czemu szczegóły pamięci są spójne.
Wynik przechowywany w zmiennej jest w bajtach.
źródło