クラウド・オンプレミスを問わず、ARM64(AArch64)サーバの選択肢が急速に広がっています。AWS Graviton4・Ampere Altra Max・Neoverse V2を搭載するサーバ群が2025年~2026年にかけて一般調達できる価格帯まで下がり、コスト最適化や電力削減を目的として本番ワークロードの移行を検討するケースが増えています。ただし「Linuxが動くのだからそのまま載せ替えられる」という誤解が原因で、移行直後に想定外の障害を招く事例も報告されています。本記事では、x86_64本番環境からARM64への段階移行を安全に完結させるための手順・検証・切り戻し設計を整理します。
ARM64移行を巡る2026年の現状整理
2026年時点で主要クラウドのARM64インスタンスはx86_64比で概ね20~40%のコスト優位があり、特にWebアプリケーション・CI/CDワーカー・バッチ処理で採用が加速しています。Linuxカーネル・GCC・LLVM・Go・OpenJDK・CPython・Rustツールチェーンはいずれもarm64/aarch64を正式サポートしており、ディストリビューション側のパッケージも多くが両アーキテクチャ向けに提供されています。
一方で、次の点は依然として注意が必要です。ベンダー配布のバイナリ(商用ミドルウェア・旧来のエージェント類)がx86_64専用のままであるケース、SIMD最適化コードがSSE/AVX前提で書かれており再コンパイルだけでは性能が出ないケース、そして非標準の低レベルABI依存コードが混在するケースです。移行前に棚卸しを行うことが最初のステップになります。
バイナリ互換の基本: x86_64とARM64は直接実行できない
x86_64とARM64は命令セットが根本的に異なるため、x86_64向けにコンパイルされたELFバイナリをARM64カーネル上でそのまま実行することはできません。macOSのRosetta 2のような透過的なバイナリ変換層はLinuxカーネル標準には存在しないため、次のいずれかの方針を選ぶ必要があります。
- 再コンパイル: ソースコードをARM64向けにビルドし直す。オープンソースソフトウェアでは最も確実な方法です。
- マルチアーキテクチャコンテナイメージ:
docker buildxやpodman manifestを使い、linux/amd64とlinux/arm64の両プラットフォーム向けイメージを同一タグに束ねます。ランタイム側が自動で適切なイメージを選択します。 - QEMUユーザースペースエミュレーション:
binfmt_misc+qemu-user-staticを使えばARM64ホスト上でx86_64バイナリを動かせますが、スループットとレイテンシに大きなオーバーヘッドが発生します。本番トラフィックへの適用は原則として推奨しません。移行前の動作確認用途に留めます。
JVMベースのアプリケーション(Java・Kotlin・Scala)はJAR/WARファイル自体はアーキテクチャ非依存ですが、JVM本体・JNIライブラリ・JITコンパイラがARM64対応している必要があります。OpenJDK 17以降はARM64を正式サポートしており、GraalVM Native ImageもARM64向けビルドが可能です。
段階移行の具体的な手順
一度に全ワークロードを切り替えるのではなく、リスクの低いサービスから順に移行するブルーグリーン型の段階移行が標準的なアプローチです。以下に典型的な手順を示します。
ステップ1: 棚卸しとARM64対応確認
稼働中のコンテナイメージ・バイナリ・共有ライブラリのアーキテクチャを確認します。
# ELFバイナリのアーキテクチャ確認
file /usr/bin/my-app
# → ELF 64-bit LSB executable, x86-64 ... の場合はARM64では動かない
# コンテナイメージがARM64に対応しているか確認
docker manifest inspect registry.example.com/myapp:latest | grep -A2 '"architecture"'
# システム全体のx86_64専用バイナリを洗い出す(想定例)
find /usr/local/bin /opt -type f -exec file {} \; | grep "x86-64"
ステップ2: ステージング環境での動作確認
本番と同等の構成をARM64インスタンス上に再現し、アプリケーションの起動・機能テスト・負荷テストを実施します。CI/CDパイプラインにARM64ランナーを追加してビルドテストを自動化すると、継続的な検証が容易になります。GitHub Actions・GitLab CI・CircleCIはいずれもARM64セルフホステッドランナーをサポートしています。
ステップ3: トラフィックの段階的な移行
ロードバランサの重み付け機能を使い、最初は全体の5~10%程度のリクエストをARM64インスタンスへ送ります。エラーレート・レイテンシ・CPU使用率を監視しながら段階的に比率を引き上げます。Nginxのupstreamウェイト・ALBのターゲットグループウェイト・Kubernetes Ingress/Gateway APIのカナリアルーティングなど、利用している基盤に応じた方法を選択します。
# Nginxの重み付けアップストリーム設定例(想定例)
upstream backend {
server x86-node-01.example.com weight=9; # x86_64: 90%
server arm-node-01.example.com weight=1; # ARM64: 10%
}
性能差の実測方法
「ARM64のほうが速い」「遅い」という一般論は、ワークロードの特性によって結果が大きく異なります。実際の本番ワークロードに近い条件での実測が不可欠です。
汎用的なCPU・メモリ・ストレージのベンチマークには sysbench が使えます。
# CPUベンチマーク(素数計算)
sysbench cpu --cpu-max-prime=20000 run
# メモリ帯域幅
sysbench memory --memory-block-size=1M --memory-total-size=10G run
# ストレージIOPS(ランダム読み書き)
sysbench fileio --file-total-size=4G prepare
sysbench fileio --file-total-size=4G --file-test-mode=rndrw run
sysbench fileio --file-total-size=4G cleanup
WebアプリケーションのHTTPスループットは wrk や hey で計測します。データベースのクエリ性能は pgbench(PostgreSQL)や sysbench oltp(MySQL/MariaDB)が定番です。実測値を記録する際は、インスタンスの世代・CPUコア数・メモリ量をそろえた上で比較するか、異なる場合は条件を明示して比較するようにします。
SIMD依存の処理(画像変換・動画エンコード・暗号化など)はARM64のNEON命令を活用した最適化ビルドと非最適化ビルドで結果が大きく変わることがあります。ディストリビューションが配布するパッケージは多くの場合汎用ビルドのため、最大性能を引き出すにはコンパイルフラグを調整したカスタムビルドが必要な場合もあります。
切り戻し設計と注意点
段階移行の最大のメリットは、問題発生時に迅速に切り戻せることです。切り戻しを確実にするために、移行前に以下の点を確認しておきます。
- x86_64インスタンスを即座に増やせる状態を維持する: 移行完了を宣言するまでは、x86_64側の自動スケーリンググループ・テンプレートを削除しないこと。
- データストアの互換性: ARM64とx86_64でデータのエンディアンは同一(どちらもリトルエンディアン)ですが、アプリケーション側で独自のバイナリシリアライズを行っている場合は事前に確認が必要です。
- ログ・メトリクスのラベル付け: アーキテクチャを示すタグ(例:
arch=arm64)をメトリクスに付与しておくと、問題発生時の原因切り分けが容易になります。 - カーネルパラメータの差異: アーキテクチャ固有のカーネルオプション(
hugepages・NUMA構成など)が異なる場合があります。x86_64のカーネルパラメータをそのままコピーせず、ARM64環境での動作を確認してから適用します。
本番トラフィックを全量ARM64へ切り替えた後も、問題の潜伏を考慮して1週間程度はx86_64側のキャパシティをスタンバイとして残しておくことが一般的な切り戻し猶予期間の目安です。
2026年現行環境での差分と補足
2026年時点でいくつかの環境差分が従来の情報と異なっています。
Kubernetes: EKS・GKE・AKSはいずれもARM64ノードプールを正式サポートしており、マルチアーキテクチャクラスタ(x86_64とARM64ノードの混在)も構成可能です。nodeSelector や nodeAffinity を使ってPodをアーキテクチャ別に配置制御できます。
コンテナランタイム: containerd・CRI-Oはマルチアーキテクチャイメージのプル・実行に対応済みです。ただし、binfmt_misc をクロスアーキテクチャ実行目的でKubernetesノードに設定する場合は、セキュリティポリシーとの整合を確認します。
観測可能性エージェント: Datadog Agent・New Relic Agent・Prometheus Node ExporterはARM64バイナリを公式リリースに含めています。旧世代のエージェントがx86_64専用バイナリのみ配布している場合は、ベンダーサポートに確認するか、最新バージョンへのアップグレードを先行させます。
Rustコンパイルターゲット: Rustで書かれたツール(Vectorなど)は aarch64-unknown-linux-gnu ターゲット向けにクロスコンパイルできます。cross ツールを使うとDockerを介したクロスコンパイルが容易です。
ARM64移行はアーキテクチャの違いを正しく理解した上で段階的に進めれば、コスト・電力・性能の面で実質的な効果が期待できます。棚卸し・ステージング検証・性能実測・切り戻し設計の4つを丁寧に積み上げることが、本番での予期せぬ障害を防ぐ基本的な構えになります。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
PR・広告
コマンド操作から基本運用までを手を動かして学べる定番書。記事で触れた技術の土台固めに。
※ Amazonのアソシエイトとして、当サイトは適格販売により収入を得ています。
