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


16

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

回答:


12

解決

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

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

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

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

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

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

7

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

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

参照


これらのコマンドをサポートするドキュメントはありますか?なぜ、sudo sysctl -w vm.oom_kill_allocating_task=1または永久にオンにし/etc/sysctl.confないのです
パブロビアンキ

1
プロセスがメモリを割り当てようとしておらず、追加のプロセスを開始できないため、これが安静時に発生しても、システムは実際のOOM状態にヒットしません。そして、ほとんど無関係ですが、この状態ではsudoまたはsysctlを一度使用することはできません。
ルークF

これは私のために働いた。方法がわからない、気にしないでください。sudo rebootこれを実行する前に実行することさえできませんでした。ありがとう!
boulder_ruby

0

受け入れられた回答を完了するには、考慮すべき点がもう1つあります。システムがファイルハンドルまたはソケットバッファを使い果たしても、同じエラーが発生しているにもかかわらず多くのメモリが残っている場合があります。これは、共有ホスティングがそのような性質の制限を課している場合に特に当てはまります。OpenVZシステムでは、次の内容を監視します

#cat / proc / user_beancounters

これにより、一番右の列で最初のオーバーランが発生します。これに該当する場合は、より大きなホスティングパッケージに移動するか、最も可能性の高い犯人であるmysqlまたはmariadbデータベースを探し出します。mysqlまたはmariadbデータベースは、欠陥のあるPHPアプリが存在すると、ファイルハンドルを毎秒数百にリークする可能性があります。

これは、Webサーバーがインターネットに対してsshを開いており、ユーザー名/パスワードのログインを受け入れている場合にも発生する可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.