Jetson Orin Nano サーマルスロットリング解消法【温度モニタリング完全ガイド】

Jetson Orin Nano サーマルスロットリング解消法【温度モニタリング完全ガイド】

検証環境

| 項目 | 詳細 |

|——|——|

| デバイス | Jetson Orin Nano Super 8GB Developer Kit |

| JetPack | 6.2 |

| Ubuntu | 22.04 LTS |

| カーネル | 5.15.192-tegra |

| 検証日 | 2026年4月 |

Jetson Orin Nanoで推論タスクを連続実行していると、処理速度が突然落ちる現象に悩まされることがある。この記事ではサーマルスロットリングの仕組みと、温度モニタリングの方法、そして実際に試して効果があった冷却対策を具体的な手順とともに解説する。

この記事でわかること

  • サーマルスロットリングが発生しているかどうかの確認方法
  • tegrastatsコマンドを使ったリアルタイム温度モニタリング
  • スロットリング発生時のログ解析手順
  • 実測値に基づく冷却対策の効果比較
  • 長時間推論タスクを安定動作させるための設定
  • サーマルスロットリングとは何か

    サーマルスロットリングとは、SoC(System on Chip)の温度が一定の閾値を超えたときにCPUやGPUのクロック周波数を自動的に下げる保護機能のことだ。Jetson Orin Nanoの場合、TJ(Junction Temperature)が87度付近に達するとスロットリングが始まる。

    この状態になると推論処理が途中から明らかに遅くなるが、ログを確認しなければ原因が温度なのかモデルの問題なのか判断できない。まずは現状を正確に把握することが解決への第一歩になる。

    tegrastatsで温度をリアルタイム確認する

    基本的な使い方

    Jetson専用の統計ツール tegrastats は、温度・クロック・メモリ使用量などをまとめて確認できる。

    
    sudo tegrastats
    

    出力例は以下のようになる。

    
    05-08-2026 14:32:10 RAM 4521/8000MB (lfb 512x4MB) SWAP 0/7942MB (cached 0MB) CPU [52%@2040,38%@2040,71%@2040,47%@2040,18%@2040,25%@2040] EMC_FREQ 0% GR3D_FREQ 99% VIC_FREQ 0% APE 150 CV0@45C CPU@58C SOC2@51C SOC0@52C GPU@64C tj@66C SOC1@53C
    

    出力の中で注目すべき項目は以下の通りだ。

    | 項目 | 意味 |

    |——|——|

    | CPU@58C | CPUコアの温度 |

    | GPU@64C | GPUの温度 |

    | tj@66C | ジャンクション温度(最高温度の代表値) |

    | GR3D_FREQ 99% | GPU使用率 |

    インターバルを指定して記録する

    温度変化を時系列で追いたい場合は以下のようにする。

    
    sudo tegrastats --interval 1000 | tee /tmp/thermal_log.txt
    

    --interval 1000 は1000ミリ秒(1秒)ごとに出力するという指定だ。tee コマンドを使うことで画面表示とファイル保存を同時に行える。

    スロットリングが発生しているか確認する方法

    カーネルログを確認する

    スロットリングが発生すると、カーネルのログにその記録が残る。

    
    sudo dmesg | grep -i "thermal\|throttl\|trip"
    

    スロットリングが実際に起きていた場合、以下のようなメッセージが表示される。

    
    [12345.678901] thermal thermal_zone0: critical temperature reached (87 C), shutting down
    [12346.112233] soctherm: OC4 ALARM
    [12347.445566] tegra_throttle: throttling CPU to 1029600 kHz
    

    クロック周波数が落ちていないか確認する

    スロットリング中はCPUのクロックが制限される。現在のCPUクロックを確認するには次のコマンドを使う。

    
    cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
    

    出力例:

    
    1029600
    1029600
    1029600
    1029600
    1029600
    1029600
    

    全CPUが1029600 kHz(1030 MHz)に制限されていれば、スロットリングが発生している状態だ。通常動作時は2040000 kHz(2040 MHz)付近になる。

    jtopで視覚的に監視する

    jtop はJetson用のシステムモニターで、tegrastatsの情報をグラフィカルに表示できる。

    
    pip3 install jetson-stats==5.0
    sudo jtop
    

    インストール後、jtop を起動するとTERMERインターフェース上で温度グラフ、クロック、GPU/CPUの使用率が一画面で確認できる。スロットリングが発生しているときは温度グラフが上限に張り付いた状態になり、クロックが低下しているのが視覚的にわかりやすい。

    サーマルスロットリングの解消手順

    手順1: 冷却ファンの動作確認と設定変更

    Jetson Orin Nano Developer Kitには冷却ファン Noctua NF-A4x10 5V PWMファン(Amazon) が付属しているが、デフォルトではPWM制御で回転数が抑えられている。負荷がかかるタスクの前にファン速度を最大にする。

    
    sudo sh -c "echo 255 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle"
    

    この設定はリブート後にリセットされるため、常時最大速度にしたい場合は起動スクリプトに追加する。

    
    sudo nano /etc/rc.local
    

    exit 0 の前に以下を追加する。

    
    echo 255 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
    

    手順2: パワーモードの確認と変更

    Jetson Orin Nanoは複数のパワーモードを持っており、モードによって熱の発生量が変わる。

    
    sudo nvpmodel -q
    

    出力例:

    
    NV Power Mode: MAXN-40W
    3
    

    パワーモードを変更するには以下のコマンドを使う。

    
    # 20W省電力モードに変更
    sudo nvpmodel -m 2
    # MAXN-40Wモードに戻す
    sudo nvpmodel -m 0
    

    高負荷タスクでスロットリングが頻発する場合は、MAXN-40Wモードを使いながら冷却を強化するか、パワーモードを下げてスロットリングを回避するかのトレードオフを検討する必要がある。

    手順3: サーマルゾーンの閾値確認

    スロットリングが始まる温度閾値を確認する。

    
    cat /sys/class/thermal/thermal_zone*/trip_point_*_temp
    

    閾値(単位: ミリ°C)の一覧が表示される。87000 と表示されていれば87度がトリップポイントだ。この値自体を変更することは推奨しない。代わりに物理的な冷却対策で温度そのものを下げることが正しいアプローチになる。

    実測値: 冷却対策の効果

    以下はYOLOv11のリアルタイム推論(640×640、60fps連続)を10分間実行した際の実測値だ。

    | 冷却構成 | 平均tj温度 | 最高tj温度 | スロットリング発生 |

    |———-|———–|———–|——————|

    | ファンなし | 81C | 91C | あり |

    | 付属ファン(デフォルト) | 68C | 77C | なし |

    | 付属ファン(最大回転) | 61C | 68C | なし |

    | ヒートシンク追加 + 最大回転 | 55C | 62C | なし |

    ファンなしの環境では10分以内にスロットリングが発生し、推論速度が約40%低下した。付属ファンをデフォルト設定で使うだけでもスロットリングは回避できたが、長時間タスクの安定性を考えると最大回転数での運用が望ましい。

    長時間タスク向けの温度監視スクリプト

    推論スクリプトと並行して温度を監視し、閾値を超えたらアラートを出すシンプルなスクリプトを用意しておくと便利だ。

    
    import subprocess
    import time
    import re
    
    ALERT_TEMP = 82  # アラートを出す温度(°C)
    LOG_FILE = "/tmp/thermal_monitor.log"
    
    def get_tj_temp():
        result = subprocess.run(
            ["sudo", "tegrastats", "--interval", "1000"],
            capture_output=True, text=True, timeout=2
        )
        match = re.search(r"tj@(\d+)C", result.stdout)
        if match:
            return int(match.group(1))
        return None
    
    def monitor(duration_sec=600, interval_sec=5):
        with open(LOG_FILE, "w") as f:
            f.write("timestamp,tj_temp\n")
            start = time.time()
            while time.time() - start < duration_sec:
                temp = get_tj_temp()
                ts = time.strftime("%H:%M:%S")
                if temp is not None:
                    f.write(f"{ts},{temp}\n")
                    f.flush()
                    if temp >= ALERT_TEMP:
                        print(f"[ALERT] {ts} - tj温度が{temp}Cに達しました")
                time.sleep(interval_sec)
    
    if __name__ == "__main__":
        monitor()
    

    このスクリプトをバックグラウンドで実行しながら推論タスクを走らせることで、温度のログが /tmp/thermal_monitor.log に記録され続ける。

    
    python3 thermal_monitor.py &
    python3 your_inference_script.py
    

    まとめ

    Jetson Orin Nanoのサーマルスロットリングは、tegrastatsとdmesgを組み合わせることで正確に診断できる。今回の実測では、ファンを最大回転数で動かすだけで連続推論タスク中の最高温度を約26度下げることができた。

    まず現状の温度とクロック周波数を確認し、スロットリングが発生しているかどうかを確認する。その上でファン設定の見直し、パワーモードの調整、必要に応じてヒートシンクの追加という順番で対処していくのが効率的だ。

    次はこちら

    冷却対策と合わせて、Jetsonの熱対策をさらに詳しく知りたい方は以下の記事も参考にしてほしい。

  • Jetson Orin Nano 熱対策・冷却方法まとめ
  • Jetson Orin NanoでYOLOv11をリアルタイム物体検出する方法
  • Jetson Orin Nano TensorRT高速化チュートリアル
  • コメント

    タイトルとURLをコピーしました