Bagaimana mengukur penggunaan memori aktual suatu aplikasi atau proses?


712

Pertanyaan ini dibahas di sini dengan sangat rinci.

Bagaimana Anda mengukur penggunaan memori suatu aplikasi atau proses di Linux?

Dari artikel blog Memahami penggunaan memori di Linux , psbukan alat yang akurat untuk digunakan untuk maksud ini.

Kenapa ps"salah"

Tergantung pada bagaimana Anda melihatnya, pstidak melaporkan penggunaan proses memori nyata. Apa yang sebenarnya dilakukannya adalah menunjukkan berapa banyak memori nyata setiap proses akan mengambil jika itu adalah satu-satunya proses yang berjalan . Tentu saja, mesin Linux tipikal memiliki beberapa lusin proses yang berjalan pada waktu tertentu, yang berarti bahwa nomor VSZ dan RSS yang dilaporkan pshampir pasti salah .


6
Pertanyaan ini mungkin milik serverfault.com, bukan saat ini, meskipun ia memberi tahu saya "terlalu tua untuk bermigrasi". Tapi sebenarnya tidak mau menutupnya ...
thomasrutter


2
Sebenarnya pstidak menunjukkan bahkan itu - itu menunjukkan nomor memori virtual dan penduduk, di mana virtual adalah jumlah maksimum memori proses secara teoritis dapat menggunakannya itu adalah satu-satunya proses (tidak pernah begitu), digunakan setiap halaman yang dialokasikan (tidak pernah terjadi) dan tidak memetakan atau menghapus peta halaman mana pun (tidak mungkin). Sementara resident menunjukkan berapa banyak memori virtual yang dipetakan ke fisik saat ini. virt > usage > resNamun biasanya pada sistem 64-bit virt ~= res*10itu jangkauannya sangat luas.
Dima Tisnek

5
Kutipan dari artikel yang ditautkan adalah omong kosong total. RSS adalah memori fisik yang sebenarnya digunakan, dan VSZ mungkin atau mungkin tidak diterjemahkan ke penggunaan memori fisik bahkan jika proses itu adalah satu-satunya yang berjalan.
David Schwartz

Jawaban:


356

Dengan psatau alat serupa Anda hanya akan mendapatkan jumlah halaman memori yang dialokasikan oleh proses itu. Jumlah ini benar, tetapi:

  • tidak mencerminkan jumlah sebenarnya dari memori yang digunakan oleh aplikasi, hanya jumlah memori yang disediakan untuk itu

  • dapat menyesatkan jika halaman dibagikan, misalnya oleh beberapa utas atau dengan menggunakan pustaka yang terhubung secara dinamis

Jika Anda benar-benar ingin tahu jumlah memori yang digunakan aplikasi Anda, Anda harus menjalankannya di dalam profiler. Misalnya, valgrinddapat memberi Anda wawasan tentang jumlah memori yang digunakan, dan, yang lebih penting, tentang kemungkinan kebocoran memori di program Anda. Alat heap profiler valgrind disebut 'massif':

Massif adalah profil tumpukan. Itu melakukan profil tumpukan rinci dengan mengambil snapshot reguler dari tumpukan program. Ini menghasilkan grafik yang menunjukkan tumpukan penggunaan dari waktu ke waktu, termasuk informasi tentang bagian mana dari program yang bertanggung jawab untuk sebagian besar alokasi memori. Grafik ini dilengkapi dengan file teks atau HTML yang mencakup lebih banyak informasi untuk menentukan di mana sebagian besar memori dialokasikan. Massif menjalankan program sekitar 20x lebih lambat dari biasanya.

Seperti yang dijelaskan dalam dokumentasi valgrind , Anda perlu menjalankan program melalui valgrind:

valgrind --tool=massif <executable> <arguments>

Massif menulis dump snapshots penggunaan memori (misalnya massif.out.12345). Ini memberikan, (1) garis waktu penggunaan memori, (2) untuk setiap foto, catatan di mana memori program Anda dialokasikan. Alat grafis yang hebat untuk menganalisis file-file ini adalah massif-visualizer . Tapi saya menemukan ms_print, alat sederhana berbasis teks yang dikirimkan dengan valgrind, sudah sangat membantu.

Untuk menemukan kebocoran memori, gunakan memcheckalat valgrind (default) .


44
Untuk menginterpretasikan hasil yang dihasilkan oleh valgrind, saya dapat merekomendasikan alleyoop. Itu tidak terlalu mewah, dan memberi tahu Anda apa yang perlu Anda ketahui untuk menemukan sumber kebocoran. Sepasang utilitas yang bagus.
Dan

6
Item (a) benar. Ada perbedaan antara halaman yang digunakan dan memori yang sebenarnya dialokasikan oleh aplikasi melalui panggilan ke malloc (), baru, dll. Penggunaan penduduk hanya menunjukkan berapa banyak memori halaman yang disimpan dalam RAM.
jcoffland

63
Ini tidak benar-benar memberi tahu bagaimana cara mendapatkan penggunaan memori menggunakan valgrind?
Matt Joiner

11
alat valgrind default, memcheck, berguna untuk mendeteksi kebocoran memori, tetapi sebenarnya bukan profiler memori. Untuk itu, Anda ingin valgrind --tool = massif.
Todd Freed

3
@ DavidSchwartz Saya tidak melihat bagaimana pernyataan Anda bertentangan dengan saya. Saya merasa bahwa Anda terlalu khawatir pada poin Anda bahwa saya "salah" daripada benar-benar membaca apa yang saya katakan. Maksud saya di sini adalah bahwa RSS adalah ukuran yang tidak tepat untuk penggunaan memori nyata aplikasi, dan Anda membuat poin yang sama dalam dua kalimat terakhir Anda. Sungguh, apa yang menurut Anda menjadi alasan saya untuk membuka RSS penyusutan? Jadi Anda mengejanya kembali kepada saya untuk membuktikan saya "salah" dengan hal yang persis saya maksudkan? Sikap Anda terhadap saya melelahkan.
ypnos

280

Coba perintah pmap :

sudo pmap -x <process pid>

45
jalankan dengan sudo atau tidak ada kesalahan dan tidak menunjukkan memori yang digunakan.
Mat

22
Tidak ada di OSX (untuk siapa pun yang datang ke sini dari google)
jcollum

3
Itu adalah jawaban penuh untuk pertanyaan itu! ps. Di shell saya, pmap dapat membaca proses tanpa sudo.
MasterControlProgram

7
Re OS X (tampaknya bukan masalah OP), Anda dapat melihat beberapa data serupa menggunakan vmmap (1)
jrg

note: memberikan jawaban yang sama sekali berbeda darignome-system-monitor
ribamar

190

Sulit dipastikan, tetapi di sini ada dua hal "dekat" yang dapat membantu.

$ ps aux 

akan memberi Anda Ukuran Virtual (VSZ)

Anda juga bisa mendapatkan statistik terperinci dari / proc-sistem file dengan masuk ke /proc/$pid/status

Yang paling penting adalah VmSize, yang harus dekat dengan apa yang ps auxmemberi.

/ proc / 19420 $ status kucing
Nama: firefox
Negara: S (sedang tidur)
Tgid: 19420
Pid: 19420
PPid: 1
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDSize: 256
Grup: 4 6 20 24 25 29 30 44 46 107 109 115 124 1000 
VmPeak: 222956 kB
VmUkuran: 212520 kB
VmLck: 0 kB
VmHWM: 127912 kB
VmRSS: 118768 kB
VmData: 170180 kB
VmStk: 228 kB
VmExe: 28 kB
VmLib: 35424 kB
VmPTE: 184 kB
Thread: 8
SigQ: 0/16382
SigPnd: 000000000000000000
ShdPnd: 000000000000000000
SigBlk: 000000000000000000
SigIgn: 0000000020001000
SigCgt: 000000018000442f
CapInh: 0000000000000000
CapPrm: 000000000000000000
CapEff: 0000000000000000
Cpus_allowed: 03
Mems_allowed: 1
voluntary_ctxt_switches: 63422
nonvoluntary_ctxt_switches: 7171


21
Apakah saya melewatkan sesuatu? Pertanyaan yang diajukan adalah bagaimana mengukur penggunaan memori dengan lebih baik melalui suatu proses, mengingat VSZ dan RSS yang dilaporkan dalam ps menyesatkan. Jawaban Anda merinci cara mencari VSZ - nilai yang sama yang disebut menyesatkan.
thomasrutter

16
@thomasrutter Ya, Anda melewatkan pertanyaan asli (rev 1), sudah diedit beberapa kali dan cukup lama (2008). Pertanyaan awal hanya bertanya bagaimana mengukur penggunaan memori dari suatu proses. Merasa bebas untuk mengedit pertanyaan dan jawaban, jika semuanya sudah usang. :)
DustinB

1
note: memberikan jawaban yang sama sekali berbeda darignome-system-monitor
ribamar

131

Dalam versi terbaru linux, gunakan subsistem smaps . Misalnya, untuk proses dengan PID 1234:

cat /proc/1234/smaps

Ini akan memberi tahu Anda dengan tepat berapa banyak memori yang digunakan pada saat itu. Lebih penting lagi, ini akan membagi memori menjadi pribadi dan dibagi, sehingga Anda dapat mengetahui berapa banyak memori yang digunakan oleh instance program Anda, tanpa menyertakan memori yang dibagi antara beberapa instance program.


Saya kira pmapantarmuka yang lebih sederhana.
ribamar

126

Tidak ada cara mudah untuk menghitung ini. Tetapi beberapa orang telah mencoba mendapatkan jawaban yang bagus:


output bagus daftar bersih memori dan proses
Rubytastic

Sangat bagus, dengan pengelompokan yang cukup pintar.
Rohmer

Ya, memang cukup bagus. Saya menemukan ps_memdan smemsangat berguna untuk tindakan pengguna akhir, sementara misalnya. pmapKeluaran yang sangat terperinci diarahkan untuk devs ... memungkinkan untuk mengambil kembali penggunaan Memori Firefox untuk setiap font, addons, libs untuk ex. Terima kasih semua exp. @Bash, @thomasruther.
tuk0z

sejauh ini satu-satunya yang sesuai dengan outputgnome-system-monitor
ribamar

110

Gunakan smem , yang merupakan alternatif untuk ps yang menghitung USS dan PSS per proses. Yang Anda inginkan mungkin PSS.

  • USS - Ukuran Set Unik. Ini adalah jumlah memori yang tidak dibagi yang unik untuk proses itu (anggap sebagai U untuk memori unik ). Itu tidak termasuk memori bersama. Dengan demikian akan ini di bawah -Laporan jumlah memori proses penggunaan, tetapi membantu ketika Anda ingin mengabaikan memori bersama.

  • PSS - Ukuran Set Proporsional. Ini yang kamu inginkan. Itu menambah bersama memori unik (USS), bersama dengan proporsi memori bersama dibagi dengan jumlah proses berbagi memori itu. Dengan demikian itu akan memberi Anda representasi akurat tentang berapa banyak memori fisik aktual yang digunakan per proses - dengan memori bersama benar-benar direpresentasikan sebagai dibagi. Pikirkan P sedang untuk memori fisik .

Bagaimana ini dibandingkan dengan RSS seperti yang dilaporkan oleh ps dan utilties lainnya:

  • RSS - Ukuran Set Penduduk. Ini adalah jumlah memori bersama ditambah memori tidak digunakan bersama yang digunakan oleh setiap proses. Jika ada proses yang membagi memori, ini akan terlalu banyak melaporkan jumlah memori yang sebenarnya digunakan, karena memori bersama yang sama akan dihitung lebih dari satu kali - muncul lagi di setiap proses lain yang berbagi memori yang sama. Jadi itu cukup bisa diandalkan, terutama ketika proses memori tinggi memiliki banyak garpu - yang umum di server, dengan hal-hal seperti proses Apache atau PHP (fastcgi / FPM).

Perhatikan: smem juga dapat (secara opsional) menampilkan grafik seperti diagram lingkaran dan sejenisnya. IMO Anda tidak memerlukan semua itu. Jika Anda hanya ingin menggunakannya dari baris perintah seperti Anda mungkin menggunakan ps -A v, maka Anda tidak perlu menginstal dependensi yang disarankan python-matplotlib.


2
Satu poin penting tentang RSS adalah bahwa sebagian besar aplikasi hari ini berbagi banyak halaman kode. Setiap pustaka bersama (mis. Libc dan libstdc ++) akan dihitung untuk setiap proses menggunakannya. Dan jika ada beberapa contoh proses yang berjalan, semua kode itu akan dihitung ganda.
David C.

1
Tepatnya, itulah sebabnya mengapa RSS over-report dalam hal memori fisik aktual per proses.
thomasrutter

3
smem adalah apa yang saya butuhkan. Dengan menjalankannya dengan -t setiap kali saya memulai instance proses baru, saya dapat melihat memori yang dikonsumsi setiap instance. Untuk chrome: smem -t -P '/ opt / google / chrome'
xtian

Saya mengalami kesulitan menemukan dokumentasi untuk smem .. apakah ini output dalam byte, kilobyte, atau megabita secara default ??
ZN13

4
TL; DR: USS = Jumlah memori fisik yang akan dibebaskan jika proses terbunuh, PSS = Jumlah memori fisik yang diperlukan proses ini dari sistem jika tidak ada proses yang ada akan dimatikan, RSS = Jumlah memori fisik yang dapat diakses oleh proses ini (tetapi tidak selalu akses eksklusif).
Mikko Rantalainen

95
ps -eo size,pid,user,command --sort -size | \
    awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |\
    cut -d "" -f2 | cut -d "-" -f1

Gunakan ini sebagai root dan Anda bisa mendapatkan output yang jelas untuk penggunaan memori oleh setiap proses.

CONTOH OUTPUT:

     0.00 Mb COMMAND 
  1288.57 Mb /usr/lib/firefox
   821.68 Mb /usr/lib/chromium/chromium 
   762.82 Mb /usr/lib/chromium/chromium 
   588.36 Mb /usr/sbin/mysqld 
   547.55 Mb /usr/lib/chromium/chromium 
   523.92 Mb /usr/lib/tracker/tracker
   476.59 Mb /usr/lib/chromium/chromium 
   446.41 Mb /usr/bin/gnome
   421.62 Mb /usr/sbin/libvirtd 
   405.11 Mb /usr/lib/chromium/chromium 
   302.60 Mb /usr/lib/chromium/chromium 
   291.46 Mb /usr/lib/chromium/chromium 
   284.56 Mb /usr/lib/chromium/chromium 
   238.93 Mb /usr/lib/tracker/tracker
   223.21 Mb /usr/lib/chromium/chromium 
   197.99 Mb /usr/lib/chromium/chromium 
   194.07 Mb conky 
   191.92 Mb /usr/lib/chromium/chromium 
   190.72 Mb /usr/bin/mongod 
   169.06 Mb /usr/lib/chromium/chromium 
   155.11 Mb /usr/bin/gnome
   136.02 Mb /usr/lib/chromium/chromium 
   125.98 Mb /usr/lib/chromium/chromium 
   103.98 Mb /usr/lib/chromium/chromium 
    93.22 Mb /usr/lib/tracker/tracker
    89.21 Mb /usr/lib/gnome
    80.61 Mb /usr/bin/gnome
    77.73 Mb /usr/lib/evolution/evolution
    76.09 Mb /usr/lib/evolution/evolution
    72.21 Mb /usr/lib/gnome
    69.40 Mb /usr/lib/evolution/evolution
    68.84 Mb nautilus
    68.08 Mb zeitgeist
    60.97 Mb /usr/lib/tracker/tracker
    59.65 Mb /usr/lib/evolution/evolution
    57.68 Mb apt
    55.23 Mb /usr/lib/gnome
    53.61 Mb /usr/lib/evolution/evolution
    53.07 Mb /usr/lib/gnome
    52.83 Mb /usr/lib/gnome
    51.02 Mb /usr/lib/udisks2/udisksd 
    50.77 Mb /usr/lib/evolution/evolution
    50.53 Mb /usr/lib/gnome
    50.45 Mb /usr/lib/gvfs/gvfs
    50.36 Mb /usr/lib/packagekit/packagekitd 
    50.14 Mb /usr/lib/gvfs/gvfs
    48.95 Mb /usr/bin/Xwayland :1024 
    46.21 Mb /usr/bin/gnome
    42.43 Mb /usr/bin/zeitgeist
    42.29 Mb /usr/lib/gnome
    41.97 Mb /usr/lib/gnome
    41.64 Mb /usr/lib/gvfs/gvfsd
    41.63 Mb /usr/lib/gvfs/gvfsd
    41.55 Mb /usr/lib/gvfs/gvfsd
    41.48 Mb /usr/lib/gvfs/gvfsd
    39.87 Mb /usr/bin/python /usr/bin/chrome
    37.45 Mb /usr/lib/xorg/Xorg vt2 
    36.62 Mb /usr/sbin/NetworkManager 
    35.63 Mb /usr/lib/caribou/caribou 
    34.79 Mb /usr/lib/tracker/tracker
    33.88 Mb /usr/sbin/ModemManager 
    33.77 Mb /usr/lib/gnome
    33.61 Mb /usr/lib/upower/upowerd 
    33.53 Mb /usr/sbin/gdm3 
    33.37 Mb /usr/lib/gvfs/gvfsd
    33.36 Mb /usr/lib/gvfs/gvfs
    33.23 Mb /usr/lib/gvfs/gvfs
    33.15 Mb /usr/lib/at
    33.15 Mb /usr/lib/at
    30.03 Mb /usr/lib/colord/colord 
    29.62 Mb /usr/lib/apt/methods/https 
    28.06 Mb /usr/lib/zeitgeist/zeitgeist
    27.29 Mb /usr/lib/policykit
    25.55 Mb /usr/lib/gvfs/gvfs
    25.55 Mb /usr/lib/gvfs/gvfs
    25.23 Mb /usr/lib/accountsservice/accounts
    25.18 Mb /usr/lib/gvfs/gvfsd 
    25.15 Mb /usr/lib/gvfs/gvfs
    25.15 Mb /usr/lib/gvfs/gvfs
    25.12 Mb /usr/lib/gvfs/gvfs
    25.10 Mb /usr/lib/gnome
    25.10 Mb /usr/lib/gnome
    25.07 Mb /usr/lib/gvfs/gvfsd 
    24.99 Mb /usr/lib/gvfs/gvfs
    23.26 Mb /usr/lib/chromium/chromium 
    22.09 Mb /usr/bin/pulseaudio 
    19.01 Mb /usr/bin/pulseaudio 
    18.62 Mb (sd
    18.46 Mb (sd
    18.30 Mb /sbin/init 
    18.17 Mb /usr/sbin/rsyslogd 
    17.50 Mb gdm
    17.42 Mb gdm
    17.09 Mb /usr/lib/dconf/dconf
    17.09 Mb /usr/lib/at
    17.06 Mb /usr/lib/gvfs/gvfsd
    16.98 Mb /usr/lib/at
    16.91 Mb /usr/lib/gdm3/gdm
    16.86 Mb /usr/lib/gvfs/gvfsd
    16.86 Mb /usr/lib/gdm3/gdm
    16.85 Mb /usr/lib/dconf/dconf
    16.85 Mb /usr/lib/dconf/dconf
    16.73 Mb /usr/lib/rtkit/rtkit
    16.69 Mb /lib/systemd/systemd
    13.13 Mb /usr/lib/chromium/chromium 
    13.13 Mb /usr/lib/chromium/chromium 
    10.92 Mb anydesk 
     8.54 Mb /sbin/lvmetad 
     7.43 Mb /usr/sbin/apache2 
     6.82 Mb /usr/sbin/apache2 
     6.77 Mb /usr/sbin/apache2 
     6.73 Mb /usr/sbin/apache2 
     6.66 Mb /usr/sbin/apache2 
     6.64 Mb /usr/sbin/apache2 
     6.63 Mb /usr/sbin/apache2 
     6.62 Mb /usr/sbin/apache2 
     6.51 Mb /usr/sbin/apache2 
     6.25 Mb /usr/sbin/apache2 
     6.22 Mb /usr/sbin/apache2 
     3.92 Mb bash 
     3.14 Mb bash 
     2.97 Mb bash 
     2.95 Mb bash 
     2.93 Mb bash 
     2.91 Mb bash 
     2.86 Mb bash 
     2.86 Mb bash 
     2.86 Mb bash 
     2.84 Mb bash 
     2.84 Mb bash 
     2.45 Mb /lib/systemd/systemd
     2.30 Mb (sd
     2.28 Mb /usr/bin/dbus
     1.84 Mb /usr/bin/dbus
     1.46 Mb ps 
     1.21 Mb openvpn hackthebox.ovpn 
     1.16 Mb /sbin/dhclient 
     1.16 Mb /sbin/dhclient 
     1.09 Mb /lib/systemd/systemd 
     0.98 Mb /sbin/mount.ntfs /dev/sda3 /media/n0bit4/Data 
     0.97 Mb /lib/systemd/systemd 
     0.96 Mb /lib/systemd/systemd 
     0.89 Mb /usr/sbin/smartd 
     0.77 Mb /usr/bin/dbus
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.74 Mb /usr/bin/dbus
     0.71 Mb /usr/lib/apt/methods/http 
     0.68 Mb /bin/bash /usr/bin/mysqld_safe 
     0.68 Mb /sbin/wpa_supplicant 
     0.66 Mb /usr/bin/dbus
     0.61 Mb /lib/systemd/systemd
     0.54 Mb /usr/bin/dbus
     0.46 Mb /usr/sbin/cron 
     0.45 Mb /usr/sbin/irqbalance 
     0.43 Mb logger 
     0.41 Mb awk { hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" } 
     0.40 Mb /usr/bin/ssh
     0.34 Mb /usr/lib/chromium/chrome
     0.32 Mb cut 
     0.32 Mb cut 
     0.00 Mb [kthreadd] 
     0.00 Mb [ksoftirqd/0] 
     0.00 Mb [kworker/0:0H] 
     0.00 Mb [rcu_sched] 
     0.00 Mb [rcu_bh] 
     0.00 Mb [migration/0] 
     0.00 Mb [lru
     0.00 Mb [watchdog/0] 
     0.00 Mb [cpuhp/0] 
     0.00 Mb [cpuhp/1] 
     0.00 Mb [watchdog/1] 
     0.00 Mb [migration/1] 
     0.00 Mb [ksoftirqd/1] 
     0.00 Mb [kworker/1:0H] 
     0.00 Mb [cpuhp/2] 
     0.00 Mb [watchdog/2] 
     0.00 Mb [migration/2] 
     0.00 Mb [ksoftirqd/2] 
     0.00 Mb [kworker/2:0H] 
     0.00 Mb [cpuhp/3] 
     0.00 Mb [watchdog/3] 
     0.00 Mb [migration/3] 
     0.00 Mb [ksoftirqd/3] 
     0.00 Mb [kworker/3:0H] 
     0.00 Mb [kdevtmpfs] 
     0.00 Mb [netns] 
     0.00 Mb [khungtaskd] 
     0.00 Mb [oom_reaper] 
     0.00 Mb [writeback] 
     0.00 Mb [kcompactd0] 
     0.00 Mb [ksmd] 
     0.00 Mb [khugepaged] 
     0.00 Mb [crypto] 
     0.00 Mb [kintegrityd] 
     0.00 Mb [bioset] 
     0.00 Mb [kblockd] 
     0.00 Mb [devfreq_wq] 
     0.00 Mb [watchdogd] 
     0.00 Mb [kswapd0] 
     0.00 Mb [vmstat] 
     0.00 Mb [kthrotld] 
     0.00 Mb [ipv6_addrconf] 
     0.00 Mb [acpi_thermal_pm] 
     0.00 Mb [ata_sff] 
     0.00 Mb [scsi_eh_0] 
     0.00 Mb [scsi_tmf_0] 
     0.00 Mb [scsi_eh_1] 
     0.00 Mb [scsi_tmf_1] 
     0.00 Mb [scsi_eh_2] 
     0.00 Mb [scsi_tmf_2] 
     0.00 Mb [scsi_eh_3] 
     0.00 Mb [scsi_tmf_3] 
     0.00 Mb [scsi_eh_4] 
     0.00 Mb [scsi_tmf_4] 
     0.00 Mb [scsi_eh_5] 
     0.00 Mb [scsi_tmf_5] 
     0.00 Mb [bioset] 
     0.00 Mb [kworker/1:1H] 
     0.00 Mb [kworker/3:1H] 
     0.00 Mb [kworker/0:1H] 
     0.00 Mb [kdmflush] 
     0.00 Mb [bioset] 
     0.00 Mb [kdmflush] 
     0.00 Mb [bioset] 
     0.00 Mb [jbd2/sda5
     0.00 Mb [ext4
     0.00 Mb [kworker/2:1H] 
     0.00 Mb [kauditd] 
     0.00 Mb [bioset] 
     0.00 Mb [drbd
     0.00 Mb [irq/27
     0.00 Mb [i915/signal:0] 
     0.00 Mb [i915/signal:1] 
     0.00 Mb [i915/signal:2] 
     0.00 Mb [ttm_swap] 
     0.00 Mb [cfg80211] 
     0.00 Mb [kworker/u17:0] 
     0.00 Mb [hci0] 
     0.00 Mb [hci0] 
     0.00 Mb [kworker/u17:1] 
     0.00 Mb [iprt
     0.00 Mb [iprt
     0.00 Mb [kworker/1:0] 
     0.00 Mb [kworker/3:0] 
     0.00 Mb [kworker/0:0] 
     0.00 Mb [kworker/2:0] 
     0.00 Mb [kworker/u16:0] 
     0.00 Mb [kworker/u16:2] 
     0.00 Mb [kworker/3:2] 
     0.00 Mb [kworker/2:1] 
     0.00 Mb [kworker/1:2] 
     0.00 Mb [kworker/0:2] 
     0.00 Mb [kworker/2:2] 
     0.00 Mb [kworker/0:1] 
     0.00 Mb [scsi_eh_6] 
     0.00 Mb [scsi_tmf_6] 
     0.00 Mb [usb
     0.00 Mb [bioset] 
     0.00 Mb [kworker/3:1] 
     0.00 Mb [kworker/u16:1] 

1
Adakah cara untuk memfilter daftar sehingga hanya memiliki proses yang menggunakan lebih dari mengatakan 25% dari memori untuk mengatakan 30-an? Saya mencoba melihat proses yang sedang berjalan, seperti browser Chrome saat menggunakan debugger PHPEclipse.
Stephane

filter itu akan luar biasa
aleix

1
Saya akan mempostingnya secepat mungkin.
Lokendra Singh Rawat

2
Bagus! Tetapi loop harus mulai dari x=2juga output pid dan pengguna.
Boris Brodski

70

Bagaimana dengan time?

Bukan Bash bawaan timetetapi yang bisa Anda temukan which time, misalnya/usr/bin/time

Inilah yang dibahas, secara sederhana ls:

$ /usr/bin/time --verbose ls
(...)
Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 2372
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 1
Minor (reclaiming a frame) page faults: 121
Voluntary context switches: 2
Involuntary context switches: 9
Swaps: 0
File system inputs: 256
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0

Saya juga. Ini adalah cara yang saya gunakan untuk tugas-tugas profil di powercron.eu :)
Moonchild

5
brew install gnu-timekemudian gunakan gtimejika Anda menggunakan MacOS.
Nobu

4
Kelemahan: Tidak akan mendapatkan hasil sampai proses menyelesaikan eksekusi. Tidak dapat digunakan untuk memonitor proses yang sedang berjalan.
Makesh

/ usr / bin / time -f '% M'
infomaniac

1
Anda juga dapat menjalankannya menggunakan \ time (dengan backslash untuk mencegah penggunaan waktu internal shell).
Raúl Salinas-Monteagudo

39

Ini adalah ringkasan yang sangat baik dari alat dan masalah: tautan archive.org

Saya akan mengutipnya, sehingga lebih banyak devs akan membacanya.

Jika Anda ingin menganalisis penggunaan memori seluruh sistem atau menganalisis penggunaan memori secara menyeluruh dari satu aplikasi (bukan hanya penggunaan tumpukannya), gunakan exmap . Untuk keseluruhan analisis sistem, temukan proses dengan penggunaan efektif tertinggi, mereka mengambil sebagian besar memori dalam praktiknya, menemukan proses dengan penggunaan tertinggi yang dapat ditulis, mereka membuat data terbanyak (dan karena itu mungkin bocor atau sangat tidak efektif dalam penggunaan data mereka). Pilih aplikasi semacam itu dan analisis pemetaannya dalam tampilan daftar kedua. Lihat bagian exmap untuk lebih jelasnya. Juga gunakan xrestop untuk memeriksa penggunaan sumber daya X yang tinggi, terutama jika proses server X membutuhkan banyak memori. Lihat bagian xrestop untuk detailnya.

Jika Anda ingin mendeteksi kebocoran, gunakan valgrind atau mungkin kmtrace .

Jika Anda ingin menganalisis heap (malloc dll) penggunaan suatu aplikasi, jalankan di memprof atau dengan kmtrace , buat profil aplikasi dan cari pohon panggilan fungsi untuk alokasi terbesar. Lihat bagian mereka untuk lebih jelasnya.


28

Di samping solusi yang tercantum dalam jawaban Anda, Anda dapat menggunakan perintah Linux "top"; Ini memberikan tampilan real-time dinamis dari sistem yang sedang berjalan, ini memberikan penggunaan CPU dan Memori, untuk seluruh sistem dan untuk setiap program, dalam persentase:

top

untuk menyaring oleh pid program:

top -p <PID>

untuk menyaring berdasarkan nama program:

top | grep <PROCESS NAME>

"top" juga menyediakan beberapa bidang seperti:

VIRT - Virtual Image (kb): Jumlah total memori virtual yang digunakan oleh tugas

RES - Ukuran penduduk (kb): Memori fisik yang tidak ditukar dengan tugas yang telah digunakan; RES = KODE + DATA.

DATA - Data + Ukuran tumpukan (kb): Jumlah memori fisik yang dikhususkan untuk selain kode yang dapat dieksekusi, juga dikenal sebagai ukuran 'data resident set' atau DRS.

SHR - Shared Mem size (kb): Jumlah memori bersama yang digunakan oleh suatu tugas. Ini hanya mencerminkan memori yang berpotensi dibagikan dengan proses lain.

Rujukan di sini .


20

Tidak ada jawaban tunggal untuk ini karena Anda tidak bisa menunjukkan secara tepat jumlah memori yang digunakan proses. Sebagian besar proses di linux menggunakan shared library. Misalnya, katakanlah Anda ingin menghitung penggunaan memori untuk proses 'ls'. Apakah Anda hanya menghitung memori yang digunakan oleh 'ls' yang dapat dieksekusi (jika Anda dapat mengisolasinya)? Bagaimana dengan libc? Atau semua lib lain yang diperlukan untuk menjalankan 'ls'?

linux-gate.so.1 =>  (0x00ccb000)
librt.so.1 => /lib/librt.so.1 (0x06bc7000)
libacl.so.1 => /lib/libacl.so.1 (0x00230000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00162000)
libc.so.6 => /lib/libc.so.6 (0x00b40000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00cb4000)
/lib/ld-linux.so.2 (0x00b1d000)
libattr.so.1 => /lib/libattr.so.1 (0x00229000)
libdl.so.2 => /lib/libdl.so.2 (0x00cae000)
libsepol.so.1 => /lib/libsepol.so.1 (0x0011a000)

Anda bisa berpendapat bahwa mereka dibagikan oleh proses lain, tetapi 'ls' tidak dapat dijalankan pada sistem tanpa mereka dimuat.

Juga, jika Anda perlu tahu berapa banyak memori yang dibutuhkan suatu proses untuk melakukan perencanaan kapasitas, Anda harus menghitung berapa banyak setiap salinan tambahan dari proses yang digunakan. Saya pikir / proc / PID / status mungkin memberi Anda informasi yang cukup tentang penggunaan memori pada satu waktu. Di sisi lain, valgrind akan memberi Anda profil yang lebih baik dari penggunaan memori sepanjang masa program


saya mencoba untuk menemukan berapa banyak memori proses mengambil pada VM dan ingin menggunakannya untuk mengatur batas memori di kubernetes, saya setuju dengan jawaban ini, jadi akan menggunakan memori yang ditunjukkan olehpmap
Deepak Deore

16

Jika kode Anda dalam C atau C ++ Anda mungkin dapat menggunakan getrusage()yang mengembalikan Anda berbagai statistik tentang memori dan penggunaan waktu proses Anda.

Tidak semua platform mendukung ini dan akan mengembalikan 0 nilai untuk opsi penggunaan memori.

Sebagai gantinya Anda dapat melihat file virtual yang dibuat di /proc/[pid]/statm( di mana [pid]diganti oleh id proses Anda. Anda dapat memperoleh ini dari getpid()).

File ini akan terlihat seperti file teks dengan 7 bilangan bulat. Anda mungkin paling tertarik dengan angka pertama (semua penggunaan memori) dan keenam (penggunaan memori data) dalam file ini.


Perhatikan bahwa ini tidak didukung di semua platform.
CashCow

Menurut halaman manual Linux ( linux.die.net/man/2/getrusage ), getrusage adalah bagian dari spesifikasi SVr4, 4.3BSD dan POSIX.1-2001 (mencatat bahwa POSIX hanya menentukan bidang utime dan stime.) I tidak akan mengharapkannya bekerja pada platform non-UNIX (kecuali, mungkin, melalui lingkungan seperti Cygwin yang menyediakan kemampuan UNIX untuk platform lain.)
David C.

@ DavidC OP bertanya tentang Linux.
Alexis Wilke

@CashCow, maksud Anda getpid(), karena saya tidak tahu getprocessid()fungsi di C / C ++ di Linux.
Alexis Wilke

12

Valgrind dapat menampilkan informasi terperinci tetapi memperlambat aplikasi target secara signifikan, dan sebagian besar waktu mengubah perilaku aplikasi.
Exmap adalah sesuatu yang belum saya ketahui, tetapi tampaknya Anda membutuhkan modul kernel untuk mendapatkan informasi, yang dapat menjadi penghambat.

Saya berasumsi apa yang semua orang ingin tahu WRT "penggunaan memori" adalah sebagai berikut ...
Di linux, jumlah memori fisik yang mungkin digunakan oleh satu proses dapat secara kasar dibagi menjadi beberapa kategori berikut.

  • Ma memetakan memori anonim

    • .p pribadi
      • .d dirty == malloc / mmapped heap dan stack dialokasikan dan memori tertulis
      • .c clean == tumpukan malloc / mmapped dan susun memori setelah dialokasikan, ditulis, kemudian dibebaskan, tetapi belum direklamasi
    • .s dibagikan
      • .d dirty == malloc / mmaped heap bisa mendapatkan copy-on-write dan dibagikan di antara proses (diedit)
      • .c clean == malloc / mmaped heap bisa mendapatkan copy-on-write dan dibagikan di antara proses (diedit)
  • Mn bernama memory yang dipetakan

    • .p pribadi
      • .d kotor == file mmapped memori tertulis pribadi
      • .c clean == teks program / perpustakaan dipetakan dipetakan pribadi
    • .s dibagikan
      • .d kotor == file memori tertulis mmapped dibagi
      • .c clean == teks perpustakaan yang dipetakan dibagi dipetakan

Utilitas yang termasuk dalam Android disebut showmap cukup berguna

virtual                    shared   shared   private  private
size     RSS      PSS      clean    dirty    clean    dirty    object
-------- -------- -------- -------- -------- -------- -------- ------------------------------
       4        0        0        0        0        0        0 0:00 0                  [vsyscall]
       4        4        0        4        0        0        0                         [vdso]
      88       28       28        0        0        4       24                         [stack]
      12       12       12        0        0        0       12 7909                    /lib/ld-2.11.1.so
      12        4        4        0        0        0        4 89529                   /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
      28        0        0        0        0        0        0 86661                   /usr/lib/gconv/gconv-modules.cache
       4        0        0        0        0        0        0 87660                   /usr/lib/locale/en_US.utf8/LC_MEASUREMENT
       4        0        0        0        0        0        0 89528                   /usr/lib/locale/en_US.utf8/LC_TELEPHONE
       4        0        0        0        0        0        0 89527                   /usr/lib/locale/en_US.utf8/LC_ADDRESS
       4        0        0        0        0        0        0 87717                   /usr/lib/locale/en_US.utf8/LC_NAME
       4        0        0        0        0        0        0 87873                   /usr/lib/locale/en_US.utf8/LC_PAPER
       4        0        0        0        0        0        0 13879                   /usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES
       4        0        0        0        0        0        0 89526                   /usr/lib/locale/en_US.utf8/LC_MONETARY
       4        0        0        0        0        0        0 89525                   /usr/lib/locale/en_US.utf8/LC_TIME
       4        0        0        0        0        0        0 11378                   /usr/lib/locale/en_US.utf8/LC_NUMERIC
    1156        8        8        0        0        4        4 11372                   /usr/lib/locale/en_US.utf8/LC_COLLATE
     252        0        0        0        0        0        0 11321                   /usr/lib/locale/en_US.utf8/LC_CTYPE
     128       52        1       52        0        0        0 7909                    /lib/ld-2.11.1.so
    2316       32       11       24        0        0        8 7986                    /lib/libncurses.so.5.7
    2064        8        4        4        0        0        4 7947                    /lib/libdl-2.11.1.so
    3596      472       46      440        0        4       28 7933                    /lib/libc-2.11.1.so
    2084        4        0        4        0        0        0 7995                    /lib/libnss_compat-2.11.1.so
    2152        4        0        4        0        0        0 7993                    /lib/libnsl-2.11.1.so
    2092        0        0        0        0        0        0 8009                    /lib/libnss_nis-2.11.1.so
    2100        0        0        0        0        0        0 7999                    /lib/libnss_files-2.11.1.so
    3752     2736     2736        0        0      864     1872                         [heap]
      24       24       24        0        0        0       24 [anon]
     916      616      131      584        0        0       32                         /bin/bash
-------- -------- -------- -------- -------- -------- -------- ------------------------------
   22816     4004     3005     1116        0      876     2012 TOTAL

10

Tiga metode lagi untuk dicoba:

  1. ps aux --sort pmem
    Ini mengurutkan output dengan %MEM.
  2. ps aux | awk '{print $2, $4, $11}' | sort -k2r | head -n 15
    Ini semacam menggunakan pipa.
  3. top -a
    Itu mulai menyortir berdasarkan %MEM

(Diekstrak dari sini )


2
topdan mungkin yang lain tidak memberikan representasi akurat dari memori yang sebenarnya digunakan oleh proses. Sebagai contoh, saya memiliki 64GiB RAM, dan saya memiliki 10 postgresproses, masing-masing melaporkan 16GiB RES dan 25% MEM. Tentu saja, mereka tidak dapat menggunakan 25% ... Masing-masing juga memiliki 15GiB SHR, dan sepertinya mereka berbagi itu.
sudo

8
#!/bin/ksh
#
# Returns total memory used by process $1 in kb.
#
# See /proc/NNNN/smaps if you want to do something
# more interesting.
#

IFS=$'\n'

for line in $(</proc/$1/smaps)
do
   [[ $line =~ ^Size:\s+(\S+) ]] && ((kb += ${.sh.match[1]}))
done

print $kb

5
ksh adalah shell standar. Mungkin tidak diinstal secara default pada distro linux untuk pengguna desktop atau untuk tujuan minimalis, tetapi hanya satu perintah di hampir semua OS unix- / linux. (yaitu pada semua BSD, pada semua UNIX nyata, pada RHEL, pada SLES, pada Debian, pada Ubuntu, pada OSX)
Florian Heigl

File ini dapat diakses, secara default, hanya untuk me-root pengguna.
Dmitry Ginzburg

Berikut ini hanya di atas ditulis ulang sed | awkdan bekerja di Busybox v1.23.2: sed -n 's/^Size:\s\+\(\S\+\) .*/\1/p' /proc/$1/smaps | awk '{s+=$1} END {print s}'
Ján Sáreník

1
@Catskul - Standar POSIX menentukan shell standarnya sebagai subset ketat dari shell Korn, versi yang disempurnakan dari shell Bourne.
ceph3us

8

Saya menggunakan htop; ini adalah program konsol yang sangat bagus mirip dengan Windows Task Manager.


Saya menggunakan htopdan lebih baik dari atas tetapi tetap akan menampilkan semua utas dari aplikasi yang berbeda tanpa mengelompokkannya sehingga hampir sama tidak berguna dengan atas.
Sorin

1
$ htop -p $ (pgrep <nama proses Anda> | xargs | tr '' ',')
AAAfarmclub

6

Jika proses ini tidak menggunakan terlalu banyak memori (baik karena Anda mengharapkan hal ini terjadi, atau perintah lain telah memberikan indikasi awal ini), dan proses dapat menahan dihentikan untuk waktu yang singkat, Anda dapat mencoba untuk gunakan perintah gcore.

gcore <pid>

Periksa ukuran file inti yang dihasilkan untuk mendapatkan ide bagus berapa banyak memori yang digunakan proses tertentu.

Ini tidak akan bekerja dengan baik jika proses menggunakan ratusan MB, atau pertunjukan, karena generasi inti bisa memakan waktu beberapa detik atau menit untuk dibuat tergantung pada kinerja I / O. Selama pembuatan inti, proses dihentikan (atau "dibekukan") untuk mencegah perubahan memori. Jadi berhati-hatilah.

Pastikan juga titik pemasangan di mana inti dihasilkan memiliki banyak ruang disk dan bahwa sistem tidak akan bereaksi negatif terhadap file inti yang dibuat dalam direktori tertentu.


6

Saya menggunakan Arch Linux dan ada paket yang luar biasa ini ps_mem

ps_mem -p <pid>

Contoh Output

$ ps_mem -S -p $(pgrep firefox)

Private   +   Shared  =  RAM used   Swap used   Program

355.0 MiB +  38.7 MiB = 393.7 MiB    35.9 MiB   firefox
---------------------------------------------
                        393.7 MiB    35.9 MiB
=============================================

5

Baris perintah di bawah ini akan memberi Anda total memori yang digunakan oleh berbagai proses yang berjalan di mesin Linux dalam MB

ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | awk '{total=total + $1} END {print total}'

5

Tes yang bagus untuk penggunaan yang lebih "dunia nyata" adalah membuka aplikasi, kemudian jalankan vmstat -sdan periksa statistik "memori aktif". Tutup aplikasi, tunggu beberapa detik dan jalankan vmstat -slagi. Namun banyak memori aktif yang dibebaskan ternyata digunakan oleh aplikasi.


3
Bagaimana ini akan lebih baik daripada ps ?? Muncul dengan semua batasan ps dan bahkan lebih tidak akurat ...
Lester Cheung

Sistem Unix yang khas memiliki banyak proses memulai dan menyelesaikan sepanjang waktu. Anda tidak dapat memprediksi RAM gratis Anda.
Raúl Salinas-Monteagudo

4

Dapatkan valgrind. berikan program Anda untuk dijalankan, dan itu akan memberi tahu Anda banyak tentang penggunaan memorinya.

Ini hanya berlaku untuk kasus program yang berjalan selama beberapa waktu dan berhenti. Saya tidak tahu apakah valgrind bisa mendapatkan proses yang sudah berjalan atau proses yang tidak boleh berhenti seperti daemon.


Tidak, itu tidak mungkin untuk "melampirkan" valgrind ke proses yang sedang berjalan. Itu dengan desain.
Dima Tisnek

3

Sunting: ini hanya berfungsi 100% saat konsumsi memori meningkat

Jika Anda ingin memantau penggunaan memori dengan proses yang diberikan (atau grup nama umum berbagi yang diproses, misalnya google-chrome, Anda dapat menggunakan skrip bash saya:

while true; do ps aux | awk ‚{print $5, $11}’ | grep chrome | sort -n > /tmp/a.txt; sleep 1; diff /tmp/{b,a}.txt; mv /tmp/{a,b}.txt; done;

ini akan terus mencari perubahan dan mencetaknya.

masukkan deskripsi gambar di sini


3

Jika Anda menginginkan sesuatu yang lebih cepat daripada membuat profil dengan Valgrind dan kernel Anda lebih tua dan Anda tidak dapat menggunakan tamparan, ps dengan opsi untuk menunjukkan rangkaian proses (dengan ps -o rss,command) penduduk dapat memberikan Anda jumlah yang cepat dan masuk akal _aproximation_dari jumlah sebenarnya memori non-swap sedang digunakan.


3

Saya menyarankan agar Anda menggunakan atas. Anda dapat menemukan semuanya tentang hal ini di halaman ini . Itu mampu memberikan semua KPI yang diperlukan untuk proses Anda dan juga dapat menangkap ke file.


2
Untuk menunjukkan PSIZE ["ukuran memori proporsional dari proses ini (atau pengguna)] diluncurkan di atas menggunakan atop -R. Untuk menampilkan dorongan ringkasan per pengguna p, untuk mengurutkan berdasarkan dorongan penggunaan memori 'M' dari dalam atas. Ini memberikan angka yang sama dari smem.
Markus Strauss


1

Satu lagi suara untuk di sini, tetapi saya ingin menambahkan bahwa Anda dapat menggunakan alat seperti Alleyoop untuk membantu Anda menafsirkan hasil yang dihasilkan oleh valgrind.

Saya menggunakan dua alat sepanjang waktu dan selalu memiliki kode ramping, tidak bocor untuk dengan bangga menunjukkannya;)


1

Sementara pertanyaan ini tampaknya tentang memeriksa proses yang sedang berjalan, saya ingin melihat memori puncak yang digunakan oleh aplikasi dari awal hingga selesai. Selain valgrind, Anda dapat menggunakan tstime , yang jauh lebih sederhana. Ini mengukur penggunaan memori "highwater" (RSS dan virtual). Dari jawaban ini .


Sebagian besar aplikasi - yaitu, yang menggunakan pustaka malloc () dan memori mirip malloc - tidak mengembalikan halaman ke OS sampai proses pemutusan. Jadi jumlah yang Anda lihat dengan PS (atau alat lain yang tidak menggali tumpukan proses) akan menjadi tanda air tinggi.
David C.

0

Berdasarkan jawaban untuk terkait pertanyaan .

Anda dapat menggunakan SNMP untuk mendapatkan memori dan penggunaan CPU dari suatu proses di perangkat tertentu dalam jaringan :)

Persyaratan:

  • perangkat yang menjalankan proses harus menginstal dan menjalankan snmp
  • snmp harus dikonfigurasikan untuk menerima permintaan dari mana Anda akan menjalankan skrip di bawah ini (dapat dikonfigurasi dalam snmpd.conf)
  • Anda harus mengetahui proses id (pid) dari proses yang ingin Anda pantau

Catatan:

  • HOST-RESOURCES-MIB :: hrSWRunPerfCPU adalah jumlah centi-detik dari total sumber daya sistem CPU yang dikonsumsi oleh proses ini. Perhatikan bahwa pada sistem multi-prosesor, nilai ini dapat meningkat lebih dari satu senti detik dalam satu senti detik waktu nyata (jam dinding).

  • HOST-RESOURCES-MIB :: hrSWRunPerfMem adalah jumlah total memori sistem nyata yang dialokasikan untuk proses ini.

**

Skrip pemantauan proses:

**

echo "IP: "
read ip
echo "specfiy pid: "
read pid
echo "interval in seconds:"
read interval

while [ 1 ]
do
    date
    snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfCPU.$pid
    snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfMem.$pid
    sleep $interval;
done

0

/ prox / xxx / numa_maps memberikan beberapa info di sana: N0 = ??? N1 = ???. Tetapi hasil ini mungkin lebih rendah dari hasil yang sebenarnya, karena hanya menghitung yang telah disentuh.


-1

Gunakan alat GUI ' monitor sistem ' built-in yang tersedia di ubuntu


1
Setidaknya sejak 16,04 itu bekerja dengan sangat baik. Ini sangat mirip seperti top, memori yang digunakan tidak terlalu tepat ...
Alexis Wilke
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.