2015-12-15 26 views
5

Próbuję sprawdzić wykorzystanie pamięci dużego serwera wielowątkowego. Według mallinfo(), otrzymuję arena=350M i fordblks=290M, co sugeruje, że większość przestrzeni jest faktycznie marnowana wewnątrz malloc(). Funkcja malloc_info() zapewnia ładną strukturę danych XML, która powinna być zrozumiała. Mimo to, czy ktoś może mi wytłumaczyć, żeGNU malloc_info(): uzyskać naprawdę przydzieloną pamięć?

  • Czy sterty 0 są specjalne? Czy to jest główna arena, na której rezydują wszyscy inni?
  • Czy przydział jest przydzielany jako wolny, dostępny czy oba?
  • Co to jest element <system>? Pamięć przydzielona przy użyciu mmap()/sbrk()?
  • Co to jest element <aspace>? Dostępna pamięć?
  • Co z numerem <aspace type="mprotect" .../>?

Tylko na początku, chciałbym móc wykreślić całkowitej pamięci przydzielonej przez aplikację, to znaczy wszystko i nie przydzielono jeszcze uwolniony, zgodnie z tym co malloc() myśli.

+1

Przechodząc przez źródło, doszedłem do wniosku, że można obliczyć ilość uwolnionej i jeszcze nie wykorzystanej pamięci (dostępnej), sumując wszystkie pola "total" wszystkich elementów "size" i "unordered". To odpowiada na mój drugi punkt. –

+1

Więcej analizy źródła: '' jest taki sam jak pole 'mallinfo()' 'arena'. –

Odpowiedz

1

Duża ilość użycia pamięci wirtualnej niekoniecznie stanowi problem. Domyślna implementacja malloc będzie alokowała duże ilości pamięci na wątek, aby uniknąć problemów z rywalizacją. Dzieje się tak szczególnie w przypadku implementacji 64-bitowych, które są dość powszechne w dzisiejszych czasach. Nie powinieneś się martwić, jeśli nie masz problemów z rozmiarem pamięci rezydentnej lub masz problemy z przywołaniem.

Kevin Grigorenko napisał wiele postów na blogu, które dotyczą wykorzystania pamięci w odniesieniu do WebSphere, ale mają zastosowanie do każdego dużego procesu wielowątkowego.

+1

Dzięki. Znalazłem także http://files.cnblogs.com/files/hseagle/demo.pdf, który pomaga trochę zrozumieć malloc GNU. –