質問: 緊急時にのみスワップ領域を使用するにはどうすればよいですか? 8 gbramおよび16gbスワップ)のdebian(バスター)ラップトップを持っています。非常に長時間実行しています実行中のタスク。これは、私のラップトップがチャーンする間、過去6日間電源が入っていないことを意味します。これをしている間、私は定期的に自分のラップトップをラップトップとして使用する必要があります。これは問題にはなりません。長時間実行されるタスクはi/oバウンドであり、usbハードディスク上のものを処理するため、ram(<200 mb)またはcpu(<4%)はかかりません)。問題は数時間後にラップトップに戻ると、非常に遅くなり、正常に戻るまで30分かかることがあります。これは非常に悪いので、クラッシュモニターはそれぞれのアプリケーションにフリーズ(特にブラウザウィンドウ)のフラグを付け、物事が誤ってクラッシュし始めます。システムモニターを見ると、2.5 gbのうち、約半分がスワップにシフトされています。スワップスペース(swapoff /dev/sda8)を削除して、これが問題であることを確認しました。スワップスペースなしでそのままにしておくと、24時間後でもほぼ瞬時に元に戻ります。スワップを使用すると、最初の5分間は6時間しか残っていないので、実質的にはブリックです。離れている間でも、メモリ使用量が3 gbを超えないことを確認しました。 swappiness ( wikipedia )を10および0の値に減らしてみましたが、問題は解決しません。 1日間の非アクティブ状態の後、カーネルはgui全体が不要になったと判断し、ram(ディスクにスワップ)からワイプします)。長時間実行されているタスクは、広大なファイルツリーを読み取っていますすべてのファイルを読み取っています。そのため、キャッシュが役立つとカーネルが誤解している可能性があります。ただし、最大10億のファイル名を持つ2 tb usb hdを1回スイープすると、追加のgb ram =は、パフォーマンスをあまり向上させません。これは、低速のハードドライブを備えた安価なノートパソコンです。データをramに十分な速度でロードすることはできません。緊急時にスワップスペースのみを使用するようにlinuxに指示するにはどうすればよいですか?スワップなしで実行したくありません。予期しないことが起こり、osが突然追加のgbを必要とする場合、タスクを強制終了させたくないので、スワップの使用を開始したいと思います。しかし、現時点では、スワップを有効のままにしておくと、必要なときにラップトップを使用できません。「緊急事態」の正確な定義は議論の余地があるかもしれません。しかし、私が何を意味するのかを明確にするために:緊急事態とは、プロセスをスワップまたは強制終了する以外の方法なしでシステムが放置されることです。緊急事態とは何ですか?-本当に質問しなければなりませんか?...建物!この質問で緊急事態を構成する可能性のあるすべてを定義することはできません。しかし、たとえば、緊急事態は、カーネルがメモリにプッシュされて oom killer でプロセスの強制終了が開始された場合です。カーネルがスワップを使用してパフォーマンスを改善できると考えている場合、緊急事態ではありません。最終編集:私は、オペレーティングシステムレベルで要求したとおりの答えを受け入れました。将来の読者は、アプリケーションレベルのソリューションを提供する回答にも注意する必要があります。
回答: 1日間の非アクティブ状態の後、カーネルはgui全体が不要であると判断し、ram(ディスクにスワップする)からワイプします。 カーネルはそれを信じてthe right thingTMを行っています。なぜそれを未使用にしておくのか1 ramのメモリなので、キャッシュまたは何かとして使用するのではなく、本質的にそれを無駄にしますか?linuxカーネルがページをスワップアウトしているのは当然のこととか予想外のものとは思わないので、そうする場合、ramに何かを保存する必要があり、長期実行タスクのパフォーマンスを向上させる必要があります。ラップトップを事前に再利用する必要がある時期がわかっている場合は、atコマンド(またはcrontab)を使用して、スワップのクリーンアップ(swapoff -a;swapon -a)をスケジュールできます。スワップのクリーニングはやり過ぎであり、何らかの理由ですべてがramに収まらない場合にoomキラーをトリガーすることもあるので、単に「スワップを解除する」ことができます。2 あなたが復活させたい実行中のアプリケーションに関連するすべて。これを行う1つの方法は、影響を受ける各プロセスにgdbのようなデバッガーをアタッチし、コアダンプの生成をトリガーすることです。# gdb -p <pid> ... generate-core-dump /dev/null ... quit あなたが書いたように、実行時間の長いアプリケーションは、最初のパスの後に読み取ったデータを再利用していないため、長期間のキャッシュが役に立たない特定のケースにいます。次に、will crawfordによって提案されたようなダイレクトi/oを使用してキャッシュをバイパスすることは、適切な回避策です。または、osがguiアプリケーションと環境をスワップアウトすることをお勧めする前に、1または3を/proc/sys/vm/drop_caches疑似ファイルにエコーすることにより、定期的にファイルキャッシュをフラッシュすることもできます。詳細については、 linuxシステムでバッファとキャッシュを空にするにはどうすればよいですか? を参照してください。1ある意味で未使用:かなりの期間からアクティブに使用されなくなったため、メモリは所有者に関連しています。 2スワップ領域に保存されているramページに戻します。