@Override
  public void run() {
    final int sleepTime = eval.getEvaluationInterval() * 1000;
    if (logger.isDebugEnabled()) {
      logger.debug("Starting health monitor.  Health will be evaluated every {} seconds.",
          (sleepTime / 1000));
    }
    try {
      while (!stopRequested) {
        // SystemFailure.checkFailure(); dm's stopper will do this
        dm.getCancelCriterion().checkCancelInProgress(null);
        Thread.sleep(sleepTime);
        if (!stopRequested) {
          GemFireHealth.Health newStatus = eval.evaluate();
          if (newStatus != currentStatus) {
            currentStatus = newStatus;
            HealthListenerMessage msg = HealthListenerMessage.create(getId(), newStatus);
            msg.setRecipient(owner);
            dm.putOutgoing(msg);
          }
        }
      }

    } catch (InterruptedException ex) {
      // No need to reset interrupt bit, we're exiting.
      if (!stopRequested) {
        logger.warn("Unexpected stop of health monitor", ex);
      }
    } finally {
      eval.close();
      stopRequested = true;
      if (logger.isDebugEnabled()) {
        logger.debug("Stopping health monitor");
      }
    }
  }
Starts the monitor so that it will periodically do health checks.
geode-core/src/main/java/org/apache/geode/distributed/internal/HealthMonitorImpl.java