62

Occasionally my Macbook Pro will slow down as the hard drive clicks away endlessly. CPU load is low, but applications and menuitems are slow to respond. Is there a utility that can help me determine what's going on, such as the number of bytes read/written or files open/closed per process, over time?

3
  • 2
    Speculating here, but it might be something simple like mds updating Spotlight's index.
    – user3463
    Dec 30, 2009 at 11:46
  • 5
    9 times out of 10 spotlight is the problem. One thing I've noticed is that if you have a bootcamp partition, be sure to include it on the spotlight blacklist or mds will seem to always be chewing on it. Dec 30, 2009 at 16:18
  • 5
    Thanks for the suggestion regarding Spotlight. I was just now experiencing very high disk reads, threw my Boot Camp partition into the Privacy tab in Spotlight prefs, and immediately disk reads flatlined! Been driving me nuts for months. Apr 24, 2010 at 16:15

4 Answers 4

62

From man iotop:

iotop tracks disk I/O by process, and prints a summary report that is refreshed every interval.

This is measuring disk events that have made it past system caches.

Since this uses DTrace, only the root user or users with the dtrace_kernel privilege can run this command.

This may not be precisely what you want - but it's a ksh script which wraps around dtrace, so you should be able to figure out how to make dtrace do what you need, if iotop doesn't handle it by default.

However, something like iotop -C 5 12 should give you something to start with: it will output 12 samples, each 5 seconds long.

1
  • 2
    Pretty good. iotop -C 5 12 is a good way to get a summary of what's going on. Dec 31, 2009 at 18:01
51

You can also use fs_usage to get a blow-by-blow account of what apps are hitting the disk.

1
  • 1
    Oooh, this is hot. fs_usage also lets you filter network and filesystem activity. Dec 31, 2009 at 17:55
2

I always noticed this on Saturday mornings, and it turned out to be locate, which updates its database at 3:15am on Friday nights.

I tried disabling its launchd configuration (in /System/Library/LaunchDaemons/com.apple.locate.plist), but it still ran anyway, so I just moved /usr/libexec/locate.updatedb out of the way. Problem…mitigated.

1

It might be the OS paging to virtual memory instead of something application specific. You might try quitting less frequently used applications or at least restarting some applications that like to build up in-memory caches over time (e.g. Safari). Check out the various per-process memory statistics with Activity Monitor to find likely culprits. If quitting some memory intensive applications seems to temporarily alleviate the problem, you might try adding RAM.

If the disk activity is not paging related, you might be able to use fs_usage to track it back to one or more specific processes.

You must log in to answer this question.

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