GNU/Linux >> Linux の 問題 >  >> Linux

-bash:fork:メモリを割り当てられません

Ubuntu 14.04 デスクトップでもこの問題に直面しました。

 free -m

これらの基本的なコマンドでも Can't allocate memory エラーが表示されました。調査したところ、システムがすべてのメモリをキャッシュに使用しており、メモリを解放していないことがわかりました。これはキャッシュ バルーニングと呼ばれ、キャッシュをクリアすることで解決しました。


私の場合、OS はメモリではなく PID を使い果たしていましたが、エラー メッセージは同じでした。

最大 PID 番号のデフォルト値は 32768 です。値を表示するには、実行してください

cat  /proc/sys/kernel/pid_max

最大 pid 番号を変更するには、

を実行します。
echo 100000 > /proc/sys/kernel/pid_max

私のシナリオでは、根本的な原因は、1 つの Java プロセスが 18k 以上のスレッドを生成したことでした (Linux カーネルでは、スレッドは本質的にプロセスです)。各プロセスのスレッド数を調べるために、

を実行します。
ps -eo nlwp,pid,args --sort nlwp

Linux
  1. どのプロセスにPid0がありますか?

  2. 「systemd-udevd:Cannot Allocate Memory」および「A start job is running for dev-mapper-\x2droot.device」 – CentOS/RHEL 7 の起動の問題

  3. JavaでサブプロセスIDを取得

  1. 具体的には、fork() は Linux で malloc() から動的に割り当てられたメモリをどのように処理しますか?

  2. 生きているプロセスメモリを中断せずに読み取る

  3. ページサイズがアラインされたメモリをどのように割り当てますか?

  1. Linuxのメモリ使用量

  2. Jenkins アクティブ (終了)

  3. Linux 非アクティブ メモリ