# TPS制限到達アラート

TPS制限到達アラートは、過去30分間にEMQX Cloudデプロイメントで処理されたMQTTメッセージの入出力数が、現在のデプロイメント階層で許可されているTPS制限を超えたことを示します。

この状態はメッセージのスループットがデプロイメントの制限に達していることを意味します。制限を超えたメッセージはドロップされる可能性があります。主な原因としては、業務ピーク時のトラフィック急増、クライアントの過剰なパブリッシュ速度、サブスクライバー数やサブスクリプション範囲の増加によるアウトバウンドトラフィックの大幅な増加などが挙げられます。

## メッセージトラフィックの急増

### 症状

業務ピークやバッチジョブにより、クライアントが短時間に大量のメッセージをパブリッシュし、一時的にTPSがデプロイメント制限を超えることがあります。

デプロイメントの**Overview**ページでは入出力メッセージのTPSが階層制限を超えて表示され、**Monitor** -> **Metrics** -> **Timeline** -> **Message In/Out**では明確なスパイクが確認できます。

### 主な原因

- 業務ピーク時にメッセージが集中する。
- バッチやスケジュールされたジョブが同時期に開始される。

### 対応策

- ピーク時のメッセージスループットを事前に見積もる。
- トラフィックピーク前にデプロイメントをスケールアウトし、十分なスループットを確保する。

## クライアントの過剰なパブリッシュ速度

### 症状

あるクライアントがレート制限なしに高頻度で連続パブリッシュを行い、TPS容量を過剰に消費している場合があります。

デプロイメントの**Overview**ページで入出力TPSが階層制限を超えている場合、**Deployment Logs**を開き、クライアントがパブリッシュ速度制限を超えたためにメッセージがドロップされたログを確認してください。

ログの`clientid`を使い、**Monitor** -> **Clients**で該当クライアントを特定します。1つのクライアントのパブリッシュメッセージ数が予想より大幅に多い場合、そのクライアントが原因である可能性が高いです。

### 主な原因

- クライアントの不具合により同じメッセージを繰り返し送信している。
- クライアント側でパブリッシュ速度制限が実装されていない。

### 対応策

- 重複メッセージをパブリッシュするクライアントのロジックを修正する。
- クライアント側でパブリッシュ速度制限を設ける。
- EMQX Cloudテクニカルサポートにサポートチケットを提出し、リスナーのクライアント毎パブリッシュ速度制限の調整を依頼する。

## サブスクライバー数やサブスクリプション範囲の増加

### 症状

サブスクライバー数が増加したり、クライアントが`#`や`+`を含む広範なトピックフィルターをサブスクライブすると、1つのインバウンドメッセージがより多くのサブスクライバーに配信されます。その結果、アウトバウンドメッセージが増加し、平均TPSがデプロイメント制限を超えることがあります。

**Monitor** -> **Metrics**ではアウトバウンドメッセージ量がインバウンド量を大幅に上回り、合計TPSが階層制限を超えています。また、**Subscriptions**や**Connections**に同時期の変化が見られます。

### 主な原因

- 多数の新規サブスクライバーが追加された。
- クライアントが広範なトピックフィルターをサブスクライブした。
- 過剰なワイルドカードサブスクリプションによりメッセージ配信が大幅に拡大した。

### 対応策

- 最近クライアントやトピックサブスクリプションが追加されたか確認する。
- トピック設計を見直し、不要なワイルドカードサブスクリプションを削除する。
- 多数のサブスクリプションや高いファンアウトを持つワークロードを分散させるか、負荷に対応可能な階層へデプロイメントをアップグレードする。

## トラブルシューティング

1. EMQX Cloudコンソールにログインします。

2. **Monitor** -> **Alerts** -> **Alert List**に移動し、TPS制限到達アラートが存在するか確認します。トリガー期間と範囲を確認してください。過去30分間の平均TPSがデプロイメント階層で許可される最大TPSを超えた場合にこのアラートが発生します。

   ![TPS limit alert records](./_assets/tps_limit_alerts.png)

3. **Monitor** -> **Clients**に移動し、クライアント毎のメッセージメトリクスを確認します。1つのクライアントが予想よりはるかに多くのPUBLISHパケットを送受信している場合は、「クライアントの過剰なパブリッシュ速度」シナリオを調査してください。

   ![Per-client message metrics](./_assets/tps_limit_client.png)

## 監視と統計

**Metrics** -> **Timeline** -> **Message In/Out**に移動し、時間経過に伴う全体のメッセージ量を確認します。ある時点の総メッセージ数を60秒で割ることで、その分の平均TPSを計算できます。

特定の時間範囲におけるより詳細なデプロイメントTPSデータが必要な場合は、EMQX Cloudテクニカルサポートにサポートチケットを提出してください。

![Message volume on the monitoring timeline](./_assets/tps_limit_monitor.png)

## 影響

- このアラート発生後もデプロイメントは稼働を続け、アラート自体による追加料金は発生しません。
- TPSがデプロイメント階層の制限を超え続けると、制限を超えたメッセージがドロップされ、アプリケーションに影響を与える可能性があります。
- アプリケーションで持続的に高いスループットが必要な場合は、事前に計画してデプロイメント階層をアップグレードしてください。
