0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ファンレスPCを24時間サーバーにする熱設計とサーマルスロットリング対策

0
Posted at

はじめに:無音で美しい「ファンレスミニPC」の裏に潜む熱地獄

Intel N100などを搭載した手のひらサイズのファンレスミニPCは、LAN内のデスクや家庭の棚に置いても「完全無音」でホコリを吸い込まず、自宅サーバーやエッジ端末として最高です。

しかし、24時間365日の本番サーバーとして稼働させ、Dockerコンテナ群やデータベース、ネットワークスキャナーを回し始めると、「熱による見えない壁」 にぶつかります。

  • 「冬場は快調だったのに、7〜8月の猛暑の日に突然サーバーがフリーズ(ハングアップ)した」
  • 「ベンチマークスコアが起動直後の半分以下に落ちている」
  • 「SSDの温度が80℃を超えて警告アラートが鳴り止まない」

ファンがないということは、「熱を逃がす手段がアルミケースの自然放熱(対流・伝導)しかない」 ということです。
CPUが90℃〜100℃に達すると、ハードウェアが自らを守るために動作クロックを強制的に引き下げる 「サーマルスロットリング(Thermal Throttling)」 が発動し、最悪の場合は強制シャットダウンします。

本記事では、ファンレスPCを猛暑の密閉書庫でも絶対に熱暴走させない 「排熱物理対策」 と 「Linux OS側からの電力枠(TDP)制御」 を解説します。


1. 物理対策 ①:「平置き」をやめて「縦置きスタンド」にする

もっともコストゼロで劇的な効果があるのが 「設置向きの変更(縦置き化)」 です。

  • 平置き(机にベタ置き): 底面に熱がこもり、筐体下部のスリットからの空気の吸い込みが完全に窒息します。
  • 縦置き: 筐体のフィン(溝)が上下方向を向くことで、暖められた空気が上昇して下から冷気を吸い込む 「煙突効果(チムニー効果)」 が自然発生し、表面温度が 5℃〜8℃ 下がります。

2. 物理対策 ②:5V 超静音USBファン(800rpm)を添える

「完全ファンレス」にこだわりたい気持ちは分かりますが、「無音に近い微風(800rpm程度の超静音5Vファン)」を筐体に軽く当てるだけ で、冷却能力は自然放熱の 3倍以上 に跳ね上がります。

  • 人間の耳には全く聞こえない無音レベルの微風であっても、アルミフィンの表面から熱境界層を吹き飛ばすため、CPU温度は一気に 90℃ ➔ 55℃ まで急降下します。

3. Linux側からのソフト対策:TDP(電力枠)を制限する

物理的な対策に加え、Linuxの intel-rapl サブシステムを使い、CPUが瞬間的に消費できる電力上限(PL1 / PL2)をOS側から手動で制限します。

# (要点抜粋)
# (Source: https://github.com/ojisantech/)
# 現在の電力制限 (PL1: 長期電力枠) を確認 (単位: マイクロワット)
cat /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw

# 制限を「8W (8,000,000 µW)」にキャップ設定 (発熱を物理的に抑制)
echo 8000000 | sudo tee /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw

N100などのCPUは、ブースト時に瞬間的に15W〜20Wまで電力を食って急激に発熱します。
これを 8W〜10W にキャップするだけで、性能低下はわずか5%未満にとどめつつ、ピーク時の発熱量を半減させることができます。


4. CPU温度とサーマルスロットリングの監視スクリプト

温度が危険域(85℃)に達したか、サーマルスロットリングが過去に発動したかを監視するPythonワンライナーです。

💻 コア実装・設定スニペット(抜粋)

# (要点抜粋)
import os

def check_thermal_throttling():
    # CPU温度の取得
    with open("/sys/class/thermal/thermal_zone0/temp") as f:
        temp_c = int(f.read().strip()) / 1000.0

    # サーマルスロットリング発動回数の確認
    throttle_count = 0
    core_throttled_path = "/sys/devices/system/cpu/cpu0/thermal_throttle/core_throttle_count"
    if os.path.exists(core_throttled_path):
        with open(core_throttled_path) as f:
            throttle_count = int(f.read().strip())

    print(f"[*] CPU温度: {temp_c:.1f} ℃ / スロットリング累積回数: {throttle_count}")
    if temp_c >= 85.0:
        print("🚨 WARN: CPU温度が高すぎます!排熱を確認してください。")


まとめ:ファンレスは「熱設計」まで含めて完結する

ファンレスミニPCは、ただ机の上に置くだけでは「熱の罠」にハマります。

  • 必ず縦置きにして自然対流(煙突効果)を生かす
  • 真夏を越すなら、耳に聞こえない超低速USBファン(5V)を1基添えるのが最強
  • Linuxの intel-rapl で過剰な瞬間ブースト電力をカットする

この排熱エンジニアリングを施すことで、真夏の密閉書庫や工場の片隅であっても、絶対に落ちない頑丈な「手のひら無音インフラ」が完成します!


📚 さらに詳しいアーキテクチャ設計・パラメータ表・トラブルシューティング

最後までお読みいただきありがとうございます!
本記事が少しでも「役に立った」「あとで試したい」と感じていただけましたら、ぜひQiitaの 「いいね(♡)」 と 「ストック」、および アカウントのフォロー をいただけると今後の検証・執筆の大きな励みになります!

また、本記事のさらに踏み込んだ 「深層アーキテクチャ解説」「主要パラメータの技術的根拠」「現場アンチパターン・トラブルシューティング対応表」 は、以下のGitHub技術リファレンスにて公開しています。

👉 【第41弾 詳細技術リファレンス (QIITA_ARTICLE_DETAIL_41.md)】

⭐ 全14層・200パターンの自立型インフラ&オンプレAIリファレンス集(おじさんの武器庫)を順次公開中です。ぜひGitHubリポジトリへの Star (★) と X (@OjisanTechnical) のフォローもお願いいたします!
👉 GitHub リポジトリ: ojisantech/ojisan-arsenal

💡 【検証環境・個人研究(PoC)に関する注記】
本記事は、筆者個人の自宅検証環境(ホームラボ/仮想環境)において、公開情報およびOSS(オープンソースソフトウェア)を用いて独自に構築・検証した個人研究(PoC)の記録です。特定の企業・団体の実環境や業務上の非公開情報とは一切関係ありません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?