MySQLコンパイル時にc++: internal compiler error: Killed (program cc1plus)が発生した時の対処法

HOMEリナックスマスター.JP 公式ブログLinuxエラー対処法 > MySQLコンパイル時にc++: internal compiler error: Killed (program cc1plus)が発生した時の対処法
宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
MySQLをコンパイルしている時に、下記エラーが発生して 処理が停止してしまう場合の対処法をご紹介します。 [ 45%] Built target rpl [ 45%] Built target comp_sql [ 45%] Built target GenSysSchema [ 45%] Built target gen_lex_token [ 45%] Built target GenDigestServerSource [ 45%] Built target GenBootstrapPriv [ 45%] Building CXX object sql/CMakeFiles/sql.dir/item_geofunc.cc.o c++: internal compiler error: Killed (program cc1plus) Please submit a full bug report, with preprocessed source if appropriate. See for instructions. make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 4 make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2 make: *** [all] Error 2 エラーメッセージとしては、下記に注目します。 c++: internal compiler error: Killed (program cc1plus) このエラーの原因は、メモリ不足になり、 メモリを増量するなり、Swap領域を追加して対応する必要があります。 本現象は、MySQLに限らず発生するので、 その場合はメモリ状況を確認してください。
「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

メモリ不足を確認・解消する具体的な手順

「cc1plus が Killed された」と分かったら、次は実際にメモリ不足が起きていたかを確認し、再発しないよう対策します。

1. OOM Killer に殺されたかを確認する

カーネルが OOM Killer によりプロセスを終了させた場合、メッセージログに痕跡が残ります。

# OOM Killer のログを確認する(RHEL 9系 / journal) # journalctl -k | grep -i "killed process" kernel: Out of memory: Killed process 12345 (cc1plus) total-vm:3145728kB anon-rss:2987136kB # /var/log/messages 系がある場合 # grep -i "killed process" /var/log/messages

「Killed process」の行が cc1plus に対して出ていれば、OOM Killer による強制終了が確定です。total-vmanon-rss がそのプロセスの最大メモリ使用量を示します。

2. 現在のメモリ・Swap使用状況を確認する

# メモリと Swap の使用状況を確認する # free -h total used free shared buff/cache available Mem: 1.9Gi 1.6Gi 100Mi 12Mi 200Mi 150Mi Swap: 512Mi 512Mi 0

available がほぼ 0 / Swapfree が 0 になっている場合は、コンパイル中にOOMが起きるのはほぼ確実です。MySQLのソースビルドは項目別に1.5~3GBを要する場面があるため、最低でも 4GB以上のメモリ もしくは 2GB以上のSwap領域 を確保するのが目安です。

3. Swap領域を追加する(既存スワップに加算する形)

恒久的に Swap を追加するには、専用ファイルを作って Swap として登録します。

# 2GB の Swap ファイルを作成する(dd でゼロ埋めしファイル化) # dd if=/dev/zero of=/swapfile bs=1M count=2048 # chmod 600 /swapfile # mkswap /swapfile # swapon /swapfile # 状態確認 # swapon --show NAME TYPE SIZE USED PRIO /dev/dm-1 partition 512M 0B -2 /swapfile file 2G 0B -3 # 再起動後も有効にする # echo "/swapfile none swap sw 0 0" >> /etc/fstab

クラウド環境(AWS EC2 / GCP など)でも同じ手順で Swap を追加できます。t3.small / t3.micro のような小型インスタンスで MySQL をビルドする場合は、必ず Swap を確保してから開始してください。

並列ビルド数を減らして cc1plus の同時メモリ使用量を抑える

メモリを増やせない場合は、make の並列数を減らして瞬間的なメモリピークを下げる手があります。

1. make の並列数を 1 にしてビルドする

# 並列数を 1 にしてシリアルビルドする # make -j1 # 既に並列ビルドを開始してしまった場合は途中で止めて、続きから -j1 で再開 # Ctrl+C で停止 → make -j1 で再開

CMake 系プロジェクト(MySQL 5.7 / 8.0 / 8.4 共通)の場合は cmake --build . -j1 でも同じ効果が得られます。

2. nice / ionice で他プロセスへの影響を抑える

サーバ上で別サービスを動かしながらビルドする場合は、優先度を下げて他に影響しないようにします。

# CPU と I/O の優先度を下げてビルドする # nice -n 19 ionice -c 3 make -j1

nice -n 19 は CPU 優先度を最も低く、ionice -c 3 は I/O を idle クラスに設定します。本番サーバで MySQL をソースから入れ替える際に重宝するパターンです。

3. それでも失敗する場合は EC2 のインスタンスタイプを一時的に上げる

AWS EC2 など仮想化環境では、ビルド時だけ t3.large(8GB メモリ)にスケールアップして、完了後に元のタイプへ戻すのが現実解です。

# AWS CLI でインスタンスタイプを変更する(停止が必要) # aws ec2 stop-instances --instance-ids i-XXXXXXXXXXXXXXXXX # aws ec2 modify-instance-attribute --instance-id i-XXXXXXXXXXXXXXXXX --instance-type "{\"Value\": \"t3.large\"}" # aws ec2 start-instances --instance-ids i-XXXXXXXXXXXXXXXXX

ビルドが完了したら同じ手順で t3.small などに戻せば、コスト増は数十円程度で済みます。

g++ 13系 / GCC 14系での新しい cc1plus トラブル

GCC 13 / 14 では C++ 標準ライブラリのテンプレート展開がさらに重くなり、メモリ消費が増えています。古い手順書では「2GB Swap で十分」と書いてあっても、現代の MySQL 8.4 を g++ 13 でビルドすると 3-4GB は瞬間的に必要になります。

環境 推奨メモリ(実メモリ+Swap) 並列数の目安
MySQL 5.7 + GCC 7 2GB -j2
MySQL 8.0 + GCC 9-11 3GB -j1~-j2
MySQL 8.4 + GCC 13-14 4GB以上 -j1(メモリ少なめなら必須)
MariaDB 11.x + GCC 14 4GB以上 -j1

「ソースからのビルドはハマる」と思ったら、最初から公式パッケージ(dnf / apt)で入れるのが2026年現在のベストプラクティスです。MySQL公式の APT/YUM リポジトリを使えばコンパイル不要で導入できます。

サーバートラブルへの対応力を体系的に身につけませんか?

OOM Killer / Swap / コンパイルエラーは、いずれもLinuxサーバー運用の現場でよく出会うトラブルです。
ネットの断片的な情報に頼るのではなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。


Linux無料マニュアル(図解60P) 名前とメールで30秒登録