ラズベリーパイでのプログラムのコンパイル中にフリーズする問題#
ラズベリーパイでプログラムをコンパイルしていると、プログラムが大きい場合、特定のファイルまでコンパイルするとラズベリーパイがフリーズしてしまい、再起動後には続きから使用できますが、同じ場所までコンパイルすると再びフリーズしてしまう問題が発生しました。
この問題の主な原因は、私がラズベリーパイにインストールした Ubuntu mate 16.04 システムのデフォルトのスワップ領域が不足しているためで、一部のファイルをコンパイルする際には大きなスワップ領域が必要ですが、ラズベリーパイのスワップ領域がいっぱいになってしまい、ラズベリーパイがフリーズしたように見えるのです。
解決策は、Ubuntu のスワップ領域を拡張することです。
ここで使用する方法は、先人のブログを参考にしました。感謝します。
ステップ 1:swap交換スペースに使用する十分なスペースがシステムにあることを確認します。私は /opt/image に 2G の swap 交換ファイルを追加する準備をしました。
sudo mkdir image
sudo touch swap
ステップ 2:交換ファイルを追加し、そのサイズを 2G に設定します。次のコマンドを使用します。
sudo dd if=/dev/zero of=/opt/image/swap bs=1024 count=2048000
しばらくすると、次の結果が返されます:
2048000+0 records in
2048000+0 records out
2097152000 bytes (2.1 GB, 2.0 GiB) copied, 242.095 s, 8.7 MB/s
PS:この手順は非常に速いように言われていますが、私は待っている間に人生に疑問を抱きました。2 回再起動しましたが、最後には数分待ちました。ついに成功しましたが、涙が出そうでした。
ステップ 3:スワップスペースを作成(設定)するために、mkswap コマンドを使用します。
sudo mkswap /opt/image/swap
Setting up swapspace version 1, size = 2 GiB (2097147904 bytes)
ステップ 4:既存のスワップスペースのサイズを確認するために、free コマンドを使用します。
free -m
total used free shared buff/cache available
Mem: 925 185 28 14 711 660
Swap: 0 0 0
または、meminfo ファイルを確認します。
grep SwapTotal /proc/meminfo
ステップ 5:追加した 2G のスワップスペースを起動するために、swapon コマンドを使用します。
sudo swapon /opt/image/swap
ステップ 6:追加した 2G のスワップスペースが有効になっていることを確認するために、free コマンドを使用します。
free -m
total used free shared buff/cache available
Mem: 925 328 56 32 541 502
Swap: 1999 0 1999
または、meminfo ファイルを確認します。
grep SwapTotal /proc/meminfo
ステップ 7:/etc/fstab ファイルを編集して、新しく追加した 2G のスワップスペースがシステム再起動後に自動的に有効になるようにします。
sudo vim /etc/fstab
ファイルの最後に次を追加します:
/opt/image/swap /swap swap defaults 0 0
再起動後に再度コンパイルしてみてください。はい、成功しました!