2012-12-06 15 views
5

Jak znaleźć rozmiar stosu procesu? /proc/5848/status daje mi VmStk, ale to się nie zmieniaJak zmierzyć rozmiar stosu procesu?

Nie ważne jak długo pętla i rekursja robię w moim programie testowym, ta wartość prawie się nie zmienia.

Kiedy patrzyłem na/proc/pid/status, cały proces ma 136k i nie ma pojęcia, skąd ta wartość pochodzi.

Dzięki,

+1

Czy próbujesz uzyskać rozmiary stosów poszczególnych wątków procesu wielowątkowego? –

Odpowiedz

3

Naprawdę nie ma czegoś takiego jak „rozmiar stosu procesu” na Linuksa. Procesy mają stos początkowy, ale jak widzisz, rzadko przydzielają dużo ze standardowego stosu. Zamiast tego procesy po prostu przydzielają pamięć ogólną z systemu operacyjnego i używają jej jako stosu. System operacyjny nie wie, że ten szczegół jest widoczny tylko z wnętrza procesu.

Typowy, nowoczesny system operacyjny może mieć limit wielkości stosu wynoszący 8 MB narzucony przez system operacyjny. Jednak procesy rutynowo przydzielają znacznie większe obiekty na stosie. Dzieje się tak dlatego, że aplikacja używa stosu wyłącznie do zarządzania aplikacjami, a nie do stosu w odniesieniu do systemu operacyjnego.

Jest to zawsze prawdziwe w przypadku procesów wielowątkowych. W przypadku procesów jednowątkowych możliwe jest, że używają tylko bardzo niewielkiego stosu.

1

Może po prostu chcesz uzyskać mapę adresową jakiegoś procesu. Dla procesu 1234 odczytywany jest kolejno pseudo-plik /proc/1234/maps. Dla własnego procesu, przeczytaj /proc/self/maps

Spróbuj

cat /proc/self/maps 

uzyskać poczucie niej (Powyższe polecenie wyświetla mapie adres procesie cat wykonującego go).

Przeczytanie proc(5) strony podręcznika dla szczegółów.

Możesz również być zainteresowany limitami procesów, np. getrlimit(2) i powiązane syscalls.

Nie jestem pewien, czy rozmiar stosu ma jakiś precyzyjny sens, szczególnie w przypadku procesów wielowątkowych.

Być może interesuje Cię mmap(2) -ed segmenty z MAP_GROWSDOWN.

Powiązane problemy