私はUbuntuでメモリ関連の質問をたくさん見てきましたが、正直なところ、このような問題にどのように取り組むことができるのか、本当に理解できません。
8GBのRAMがあります。スワップを使用して/使用せずに、大きな違いなしで実験しています。
問題は、ラップトップが完全にフリーズしているため(待機は役に立たない)頻繁に(1日に1回まで)ラップトップをハードリブートする必要があることです。これはおそらく、WebブラウザのRAM使用に関連しています。このことから、ラップトップ上で要求の厳しいプロセスは実行されていません。
実験/再現するには:
私の観察は次のとおりです。
MemoryError
を発生させます。わからない:
スワップにはCPUが必要であるため、システムがしばらくハングすることがあります。だから私はそれを無効にしたので、カーネルはすぐにプロセスを強制終了することになると考えていました。
8GB RAMを使用する最近のOSでは、このような基本的な使用(ブラウザーを使用)がどのように問題になるかを理解できません。信頼できるシステムにするために、システムを調整する必要がありますか?
役立つアドバイス/説明/トリックをありがとう。
Memory/cpu watcherスクリプトを使用して同様の問題を解決し、x ramまたはyメモリーを超えるプロセスをt秒より長く強制終了させます。それはOS用のCPU/Memを予約する問題を解決しませんが、より良い答えを見つけるまでの回避策です(そして、あなたがそうしたら、私と同じものを探してここに来たので、私と共有してください)
#!/bin/bash
# Kill POS if we're doing stupid shit.
HOG_COUNTER=0
while true; do
# This is pulling CPU, change the awk column from 9 to something
# that you want to check against.
HOG=$(top -b -n 1 | grep pos2 | awk '$9 > 90 {print $1}')
# If the hog variable is not empty, add some counter info - we don't
# want to catch periodic spikes, we want to catch consistent offenders.
if [ ! -z "$HOG" ]; then
counter_time=$(date)
HOG_COUNTER=$(expr ${HOG_COUNTER} + 1)
echo "$counter_time - Found a hog: $HOG - ${HOG_COUNTER} counters." >> high_mem_kill_log
else
HOG_COUNTER=0
fi
# If we have more than 2 counters (3 or more) then we kill the process
# that's doing it.
if [ $HOG_COUNTER -gt 2 ]; then
kill_time=$(date)
echo "$kill_time - Found a hog: $HOG. $HOG_COUNTER counters. Killing $HOG." >> high_mem_kill_log
kill $HOG
fi
sleep 30s
done