private void checkMember(final ID mbr) {
    final GMSMembershipView<ID> cv = currentView;

    // as check may take time
    setNextNeighbor(cv, mbr);

    // we need to check this member
    doAndIgnoreRejectedExecutionExceptionIfStopping(() -> checkExecutor.execute(() -> {
      boolean pinged;
      try {
        pinged = doCheckMember(mbr, true);
      } catch (MembershipClosedException e) {
        return;
      }

      if (!pinged) {
        String reason = "Member isn't responding to heartbeat requests";
        memberSuspected(localAddress, mbr, reason);
        initiateSuspicion(mbr, reason);
        setNextNeighbor(currentView, null);
      } else {
        logger.trace("Setting next neighbor as member {} has responded.", mbr);
        memberUnsuspected(mbr);
        // back to previous one
        setNextNeighbor(currentView, null);
      }
    }));
  }
Record member activity at a specified time
geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java