56

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
  • 2
    Then the RES column is the one you want to look at. Jun 21, 2013 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? Jun 21, 2013 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. Jun 21, 2013 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, 2013 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".) Jun 21, 2013 at 10:58

3 Answers 3

79

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)

2
  • 3
    What are "user threads"?
    – HappyFace
    Feb 15, 2021 at 8:11
  • @HappyFace from htop's man page: "Hide user threads: on systems that represent them differently than ordinary processes (such as recent NPTL-based systems), this can hide threads from userspace processes in the process list." So instead of showing entries for each thread it will merge them into single entry. 2 days ago
8

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. Mar 12, 2020 at 5:08
  • @EugeneBeresovsky no, it's not necessary shared between these two or these two only
    – GioMac
    Mar 13, 2020 at 6:20
  • 1
    Isn't everything a 'hard thing' until its not? Jul 31, 2020 at 19:13
0

Take a look at the Column RES and SHR.

RES - SHR = Total estimated memory usage by the process.

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.