私はカーネルを使用していますArchLinux
が、3.18.6-1
ソフトウェアが物理メモリよりも多くのメモリを使用している場合(合計メモリ使用量が5.8
GBを超える場合)、常に遅れて応答しなくなり、私ができることはコンピュータをリセットするだけです。私はswap
十分に大きなものを提供しました/etc/fstab
/swapfile swap swap defaults 0 0
私はコマンドの出力vm.swappiness
です。1
free -m
total used free shared buff/cache available
Mem: 7800 3059 688 239 4053 4204
Swap: 10247 0 10247
交換性を高め、メモリを大量に消費する10
プログラムを実行してみました。munch
。氏
しかし、4000
MB程度に達すると常に停止します。
私のLinuxに何の問題がありますか?
それとも、最も多くのメモリを使用するプログラムを自動的に終了する方法はありますか? (これはおそらく最も最近実行されたプログラムであり、最新のvalgrind
テストプログラムです)
答え1
私はそれを試しましたが、echo 1 | sudo tee /proc/sys/vm/oom_kill_allocating_task
問題のプログラムが実際に終了する前にまだ数分間遅れています。私のテストでは、これはearlyoom
この状況に最も適しています。インストールするには、次のように入力します。
yaourt --needed --noconfirm -S --force earlyoom
sudo cp /usr/bin/earlyoom /usr/local/bin/
sudo systemctl enable earlyoom
sudo systemctl start earlyoom
それでは、プログラムを再コンパイルして実行してみてください。
echo '
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv) {
int max = -1;
int mb = 0;
char* buffer;
if(argc > 1) max = atoi(argv[1]);
while((buffer=malloc(1024*1024)) != NULL && mb != max) {
memset(buffer,0,1024*1024);
printf("Allocated %d MB\n", ++mb);
}
return 0;
}
' > munch.c && gcc -O2 -o munch munch.c
./munch
次のような出力が提供されます。
Allocated 1 MB
Allocated 2 MB
Allocated 3 MB
...
Allocated 4367 MB
Allocated 4368 MB
Allocated 4369 MB
Killed
メモリ使用量が最も高いプログラムは自動的にシャットダウンされ、システムは常に応答します。サービスタイプのリアルタイムログを表示するには、journalctl -f -u earlyoom
次のように表示されます。
-- Logs begin at Mon 2014-11-03 10:54:39 WIB. --
Feb 20 13:25:25 s497 earlyoom[20041]: earlyoom v0.3-15-g528196e
Feb 20 13:25:25 s497 earlyoom[20041]: total: 7800 MiB
Feb 20 13:25:25 s497 earlyoom[20041]: min: 780 MiB
Feb 20 13:25:25 s497 earlyoom[20041]: avail: 4963 MiB
Feb 20 13:33:10 s497 earlyoom[20041]: Out of memory! avail: 519 MiB < min: 780 MiB
Feb 20 13:33:10 s497 earlyoom[20041]: Killing process 24984 (munch)
Ctrl+C
コマンドを閉じるには押します。
答え2
私のコンピュータのいくつかで同じ問題が発生しました。 Linuxがスワップ領域を追加したことを認識していないようです。
解決策:カーネルを3.xから4.xにアップグレードしてください。