47

Here is my htop output:

enter image description here

For example, I'm confused by this ruby script:

enter image description here

How much physical memory is it using? 3+1+8+51+51? 51? 51+51?

7
  • 1
    Then the RES column is the one you want to look at. – David Schwartz Jun 21 '13 at 9:02
  • 2
    yes, I'm looking at it. But which one is the memory usage by my script? Why are there two 51s? Does it consume 102 megabytes? Or only 51 megabytes? In the outer process RES contains the inner process RES , why the 3, 1, 8 are all fewer than 51? – Lai Yu-Hsuan Jun 21 '13 at 9:03
  • 2
    There are two 51's because the process forked. It most likely doesn't consume 102 megabytes because the two processes are each using the same 51 megabytes, but you can't easily tell. The other process RES contains the inner process if that memory is resident in the other process as well and not if it doesn't. The RES fields tells you how much physical memory each process is using, but other processes may (or may not) be using that very same physical memory too. – David Schwartz Jun 21 '13 at 9:16
  • 1
    If you want to know if the two processes are using the same memory, use pmap -d <process id> – Sirch Jun 21 '13 at 9:28
  • 2
    @LaiYu-Hsuan: Yes, you're wrong. The pages aren't copied, they're shared. They're only copied if either process writes to the page, then they have to be unshared. (The is called "copy on write" or "CoW".) – David Schwartz Jun 21 '13 at 10:58
68

Hide user threads (shift + H) and close the process tree view (F5), then you can sort out the process of your interest by PID and read the RES column (sort by MEM% by pressing shift + M, or F3 to search in cmd line)

1
  • What are "user threads"? – HappyFace Feb 15 at 8:11
6

Memory is a hard thing, you cannot calculate used physical memory by just running ps/htop/top. Memory can be shared between processes.

I recommend you to check usage with this script:

http://www.pixelbeat.org/scripts/ps_mem.py

3
  • Your script doesn't seem to do the math for shared mem for multiple processes correctly. I run two identical java programs, each reported to be using 300+300=600MiB when doing ps_mem -p pid. When doing ps_mem -p pid1,pid2 I get 600+600=1200MiB. Wouldn't the shared portion be shared by both processes, and shouldn't then the result for ps_mem -p pid1,pid2 should be 600+300=900MiB? When I kill one of the two, 300MiB are freed according to free. When killing the other process, another 300MiB are freed. – Evgeniy Berezovsky Mar 12 '20 at 5:08
  • @EugeneBeresovsky no, it's not necessary shared between these two or these two only – GioMac Mar 13 '20 at 6:20
  • Isn't everything a 'hard thing' until its not? – IlliakaillI Jul 31 '20 at 19:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.