Piszę narzędzie do analizy zrzutu pamięci i jedną rzeczą, którą chciałbym wydrukować, jest oszacowanie, ile pamięci wirtualnej proces wykorzystywał w czasie zrzutu. Te podstawowe zrzuty mogą być spowodowane awarią lub mogą być ręcznie pobrane przy użyciu gcore (na przykład dla rozmiaru). Zasadniczo chciałbym wydrukować odpowiednik kolumny PS VSZ.W jaki sposób jeden przybliża używane pamięci wirtualnej (VSZ) przy użyciu zrzutu pamięci i gdb w systemie Linux?
Zajrzałem do readelf i gdb i skupiłem się na tym ostatnim. Na przykład, mam prosty program, który po prostu zawiesza się i widzę w PS:
$ ps auxwww | grep a.out
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 16644 0.0 0.0 4108 472 pts/5 S+ 13:51 0:00 ./a.out
biorę rdzeń używając gcore, w którym momencie jest za pomocą 4,206,592 bajtów VSŽ. Następnie napisałem szybki skrypt, który analizuje dane wyjściowe i sumuje zakresy adresów, otrzymując 1814828 bajtów. Próbowałem także info proc mappings
, ale wydaje się, że działa tylko wtedy, gdy proces jest uruchomiony.
Wszelkie pomysły?
Po prostu próbowałem "sekcji informacji o konserwacji" i otrzymałem nieco większą, ale podobną liczbę 1 817 288 bajtów. – user379184