How much swap is a given Mac application using?
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.
Related videos on Youtube
Charles Stewart
Freelance copy-editor. You can read my irregular waffles at advogato.org/person/chalst/.
Updated on September 17, 2022Comments
-
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 over 14 yearsThis 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 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 over 14 yearsThat'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 over 14 yearsAre you sure? Apple doesn't mention it support.apple.com/kb/TA20517
-
Chealion over 14 yearsThe VM number measures the amount allocated but not actually used yet. The swap files will have what is actually used.
-
Tadeusz A. Kadłubowski over 14 years@Chealion: how do you define memory that's allocated but not actually used?
-
Charles Stewart over 14 yearsThe 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 over 14 yearsThis 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 over 14 yearsIsn't
vmmap [pid]
orvmmap -pages [pid]
the answer for the second part of your question? -
Charles Stewart over 14 yearsvmmap $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 over 14 yearseven vmmap [AppName] works
-
ShadSterling over 4 yearsI 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 about 4 years@trolle3000, Link down..