Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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.

share|improve this question
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. – gavaletz Feb 10 '10 at 2:35
@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. – Charles Stewart Feb 10 '10 at 6:50
up vote 10 down vote accepted

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 divide 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 Termial. 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.

share|improve this answer
By the way, check out… if you want to know some more. – trolle3000 Feb 6 '10 at 7:57
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... – Charles Stewart Feb 6 '10 at 15:32
Isn't vmmap [pid] or vmmap -pages [pid] the answer for the second part of your question? – trolle3000 Feb 9 '10 at 18:26
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. – Charles Stewart Feb 10 '10 at 6:37

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

share|improve this answer
even vmmap [AppName] works – Studer Feb 10 '10 at 16:30

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 xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'
share|improve this answer

Open up Activity Monitor in your /Applications/Utilities folder and there is a Virtual Memory column that will tell you this. You can click on the Virtual Memory header to sort by most or least used by application. Also be sure to change My Processes to All Processes, and be aware that one application could have multiple processes. For example the 3rd party application Little Snitch is comprised of "Little Snitch Network Monitor" and "Little Snitch UIAgent."

share|improve this answer
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. – Tadeusz A. Kadłubowski Jan 18 '10 at 19:09
Are you sure? Apple doesn't mention it – ridogi Jan 18 '10 at 21:40
The VM number measures the amount allocated but not actually used yet. The swap files will have what is actually used. – Chealion Jan 19 '10 at 0:43
@Chealion: how do you define memory that's allocated but not actually used? – Tadeusz A. Kadłubowski Jan 20 '10 at 8:24
@tkadlubo: In this case, my belief is that it's just the discrepancy between the VM size stated available for a process versus the actual pages, paged out to disk. I'm not sure how to define it beyond noting that the VM number and the swap files on disk are different. – Chealion Jan 20 '10 at 20:29

As ridogi said, open Activity Monitor. Navigate to the process you want to inspect, and click... Inspect! Then click memory; this will tell you how much swap the given process is using.

Have fun!

share|improve this answer
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 Feb 5 '10 at 21:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .