web-dev-qa-db-ja.com

コマンドを実行すると、Ubuntuサーバーで「メモリを割り当てることができません」が返されます

Ubuntu 14.04を使用しています。最近、Sudo特権を持つユーザーでSSH経由でログインすると、実行するすべてのコマンドで「メモリを割り当てられません」というエラーが発生します。コンソールで試したものをいくつか紹介します

myuser@mymachine:~$ whoami
-bash: fork: Cannot allocate memory
myuser@mymachine:~$ uname -a
-bash: fork: Cannot allocate memory

Sudo reboot nowを試しても上記のエラーが発生するので、インスタンスのロックを解除できる他の方法がわかりません。それが重要な場合、ホストはDigitalOceanです。

編集:ここで与えられた答え/提案ごとに「無料」の出力です

myuser@mymachine:~$ free
-bash: fork: Cannot allocate memory
14
Dave

解決

エラーメッセージに示されているように、マシンのメモリが不足しています。これにはいくつかの理由がありますが、基本的には、何かがメモリのすべてを使い果たしており、基本的なコマンドの使用でさえ残っているわけではありません。

ドロップレットを再起動して(クライアントコントロールパネルに移動して[再起動]を選択する)、sshを入力してからtopまたはhtopを実行することをお勧めします。メモリ使用量に注目し、どのプロセスがすべてのメモリを消費しているかを確認します。そこから、いずれかを試してください

  1. 障害のあるプログラム/プロセスの削除/削除

    警告してくださいプロセスがそうであるかどうか調査してください不可欠なシステムプロセス、最初に!システムプロセスがメモリの問題を引き起こしている場合、単にそれを殺すのではなく、それについて調査し、それを処理する特定の方法を探してください。
  2. そのプログラム/プロセスの構成を変更して、すべてのメモリを消費しないようにします。

問題の再発を防ぐための提案

  • やるべきことは スワップメモリ​​の追加 です。これは、不足している場合により多くのメモリを割り当てるためです。
  • プログラムをインストールするときは常に、意図しない方法で実行されないように(メモリを食い尽くすなど)正しく設定するようにしてください。
  • パッケージを追加するか、基本的に新しいものを設定するたびに、htopまたはtopを確認して、現在のプログラムで使用しているメモリ量を確認します。ほぼすべてを使用していることに気付いた場合は、不要なプログラムやプロセスを削除して削除してみてください。
  • 認識されていない、または自動起動されたくない(システムプロセス以外にも)自動起動されているものがある場合は、削除してください!ただし、プロセスを終了または削除する前に、ブートアップ手順やシステム機能などに不可欠である可能性があるため、プロセスを常に調査してください。
12
Owen Hines

再起動せずにこの状態から抜け出すには、次のように OOM killer を手動でトリガーできます。

echo 1 > /proc/sys/kernel/sysrq
echo f > /proc/sysrq-trigger
echo 0 > /proc/sys/kernel/sysrq

参照

6
Luke F