How much swap is a given Mac application using?

13,480

Solution 1

I've been googling alot ;-) As I understand it, the virtual memory of a given process is divided into pages that are handled by the OS and presented to the application as if it were RAM.

In OS X, based on the Mach kernel, this is handled by a daemon called dynamic_pager. This process generates the swapfile(s) in /private/var/vm as you mention. These swapfiles are not generated on a per application basis, but on a "need memory" basis. The swapfiles are divided into pages of 4096 bytes, and the pages are then allocated to the processes who (are deemed by the OS to) need virtual memory. Hence, you cannot associate a swapfile with a given application, but you can see how many pages a given process is using.

You might want to try the command vm_stat in Terminal. This gives you a statistic of VM usage (note that 'page size' times number of pages active equals the size of your swapfile(s)). This also explains why you can have multiple processes using VM, but only a couple of swapfiles.

Other fun commands are vmmap [process id] and pagestuff.

Solution 2

Based on the ideas posted here I created this little line of code:

sudo vmmap notifyd | grep -A3 'Summary'

which displays the Summary section (3 lines) of the vmmap output. I've used notifyd in this example, but you can replace that with any PID you know of.

This line will try to list all Summary lines of all running processes. Obviously some will fail because their process id is already gone (process ended), but in general i found this is a great way to scroll through a list of memory information and spot the top swapper.

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

Edited: Some anonymous user saw this last command line needed an improvement because obviously the original variant did not work anymore. So thank you very much whoever you are and i'm sorry your edit was rejected. (First command previously read 'ps xa' and resulted in vmmap to fail because of the headline of ps being thrown at it)

Further improvement: If you like to know the name of the program right away use this small change

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

A little amendment on the other end of this command enables you to filter for certain program names or command line path components. Here we're looking at all processes from 'Library/PrivateFrameworks' only for example.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |

Solution 3

The vmmap PID command should give you some helpful stats in numbers about a given process.

Share:
13,480

Related videos on Youtube

Charles Stewart
Author by

Charles Stewart

Freelance copy-editor. You can read my irregular waffles at advogato.org/person/chalst/.

Updated on September 17, 2022

Comments

  • Charles Stewart
    Charles Stewart over 1 year

    Is there any way to tell whether a particular application running on Mac OSX (10.2+) has some of its memory swapped out (i.e., to one of the /private/var/vm/swapfile* files)? And how much?

    Bounty (150 rps)

    Simple question. The first correct answer will be accepted if I see it with less than 2 days of expiration of the bounty period. If I still haven't got one then, I'll award it to whoever tells me the most interesting new fact. And if I didn't learn a single thing from any of the answers, I'll award the bounty to whoever writes most prettily.

    • user2570403
      user2570403 over 14 years
      This is such a bad question. The number you are looking for would change because you were trying to measure it (think Heisenberg uncertainty principle). Further it would change all the time depending on other applications and their memory requirements, io patterns and process priority. If you find the number it is not going to do you any good unless you are editing OS code, because there is little that you are going to do from the application's point of view to change it.
    • Charles Stewart
      Charles Stewart over 14 years
      @gavaletz: Get out of the wrong side of bed this morning? I want to the kind of swap profiling that Linux makes possible using /proc/$pid/smaps. I can usually identify sudden bursts of swap activity using my ears, so I am not too bothered by gavaletz's uncertainty principle.
  • Tadeusz A. Kadłubowski
    Tadeusz A. Kadłubowski over 14 years
    That's wrong. The nubmer in virtual memory column is a sum of memory currently in RAM and on swap, mmaped files and I don't know what else.
  • ridogi
    ridogi over 14 years
    Are you sure? Apple doesn't mention it support.apple.com/kb/TA20517
  • Chealion
    Chealion over 14 years
    The VM number measures the amount allocated but not actually used yet. The swap files will have what is actually used.
  • Tadeusz A. Kadłubowski
    Tadeusz A. Kadłubowski over 14 years
    @Chealion: how do you define memory that's allocated but not actually used?
  • Charles Stewart
    Charles Stewart over 14 years
    The inspect page tells me all kinds of interesting things that are positively correlated with what the answer of the question is, like #pagefaults, #pageins, and the list of mmapped files, but nowhere the actual answer to the question I am after.
  • Charles Stewart
    Charles Stewart over 14 years
    This looks promising. This seems to provide a definite answer to the first part of the question, and is suggestive of a concrete answer to the second part. I need to dig further...
  • trolle3000
    trolle3000 over 14 years
    Isn't vmmap [pid] or vmmap -pages [pid] the answer for the second part of your question?
  • Charles Stewart
    Charles Stewart over 14 years
    vmmap $pid does give unambiguous information about what it classifies as writeable regions. It does not distinguish between allocated (ie. swappable) and swapped memory for readonly regions, but maybe there the distinction isn't so important. I'll very likely accept this answer tomorrow.
  • Studer
    Studer over 14 years
    even vmmap [AppName] works
  • ShadSterling
    ShadSterling over 4 years
    I get a lot of failures saying vmmap could not be launched as a 32-but process, which halts xargs. To get cards to continue, I did ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'. It still doesn’t stop on ctrl+c, but it also doesn’t stop on vmmap errors.
  • Pacerier
    Pacerier about 4 years
    @trolle3000, Link down..