diff --git a/src/daemon/PhutilDaemonOverseerModule.php b/src/daemon/PhutilDaemonOverseerModule.php
--- a/src/daemon/PhutilDaemonOverseerModule.php
+++ b/src/daemon/PhutilDaemonOverseerModule.php
@@ -7,13 +7,17 @@
  */
 abstract class PhutilDaemonOverseerModule extends Phobject {
 
+  private $throttles = array();
+
 
   /**
    * This method is used to indicate to the overseer that daemons should reload.
    *
    * @return bool  True if the daemons should reload, otherwise false.
    */
-  abstract public function shouldReloadDaemons();
+  public function shouldReloadDaemons() {
+    return false;
+  }
 
 
   /**
@@ -32,4 +36,36 @@
       ->execute();
   }
 
+
+  /**
+   * Throttle checks from executing too often.
+   *
+   * If you throttle a check like this, it will only execute once every 2.5
+   * seconds:
+   *
+   *   if ($this->shouldThrottle('some.check', 2.5)) {
+   *     return;
+   *   }
+   *
+   * @param string Throttle key.
+   * @param float Duration in seconds.
+   * @return bool True to throttle the check.
+   */
+  protected function shouldThrottle($name, $duration) {
+    $throttle = idx($this->throttles, $name, 0);
+    $now = microtime(true);
+
+    // If not enough time has elapsed, throttle the check.
+    $elapsed = ($now - $throttle);
+    if ($elapsed < $duration) {
+      return true;
+    }
+
+    // Otherwise, mark the current time as the last time we ran the check,
+    // then let it continue.
+    $this->throttles[$name] = $now;
+
+    return false;
+  }
+
 }