Linuxは、物理メモリが不足すると常に中断されます。

Linuxは、物理メモリが不足すると常に中断されます。

私はカーネルを使用していますArchLinuxが、3.18.6-1ソフトウェアが物理メモリよりも多くのメモリを使用している場合(合計メモリ使用量が5.8GBを超える場合)、常に遅れて応答しなくなり、私ができることはコンピュータをリセットするだけです。私はswap十分に大きなものを提供しました/etc/fstab

/swapfile swap swap defaults 0 0

私はコマンドの出力vm.swappinessです。1free -m

              total        used        free      shared  buff/cache   available
Mem:           7800        3059         688         239        4053        4204
Swap:         10247           0       10247

交換性を高め、メモリを大量に消費する10プログラムを実行してみました。munch。氏 しかし、4000MB程度に達すると常に停止します。

私の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コマンドを閉じるには押します。

おすすめ記事