SMFv2では、SAの死活監視のためにHeartbeatという仕組みを用いている。 SA が Heartbeat サーバに対して定期的に UDP パケットを送信することで SA の死活状況をサーバ側で把握することができる。
また、SA が持つ統計情報をパケットに含めることで、サーバ側にて CPU 利用率、メモリ使用率、トラフィック情報などを蓄積してグラフ表示することも可能となっている。
Heartbeat 送信機能は、古いバージョンの libarms には含まれておらず、SA 自身で個別に実装する必要があったが、libarms Ver5.00 以降では Heartbeat 送信機能が統合され、SA 自身での実装は不要となった。このセクションでは Heartbeat 送信に関する仕様と注意点について解説する。
libarms による Heartbeat 送信機能を利用するためには、Heartbeat 情報収集コールバック関数を登録する必要がある。具体的には、 arms_event_loop() 呼び出し時、コールバック関数テーブルに arms_hb_store_statistics_cb_t を指定しておく必要がある。( arms_callback_tbl_t 参照)
libarms によるコンフィグ取得が完了し、SA が PUSH 待ち状態に移行した直後から Heartbeat の送信が開始される。
具体的には、 arms_event_loop() をアプリケーションが呼び出すと、ARMS プロトコルの push-confirmation メッセージが送受信され、これにより PUSH 可能であることが確認されると PUSH_WAIT 状態に移行し、その直後に下記の処理が連続で実行される。
この 1. および 2. の処理は、予めRSから指定された時間で定期的に実行される。コールバック関数等による処理時間は差し引かれ、間隔が一定になるよう処理される。ただし、RSから取得した送信間隔よりも処理時間が長い場合の動作は保証されない。
Heartbeat 送信は、libarms が PUSH-WAIT 状態で無くなるときに停止される。 具体的には、
のいずれかとなる。
何らかの理由で Heartbeat 送信を一時的に停止したい場合、 arms_hb_stop() を利用することができる。再開する場合は arms_hb_start() を利用する。 これらは特段の理由が無ければ呼び出す必要は無い。
また、これらの API で Heartbeat 送信を停止させても、 arms_hb_store_statistics_cb_t() コールバック関数は呼ばれ続ける。