私たちのプロジェクトには、約3〜4時間連続して実行されるいくつかのテストがあります。当然、十分なメモリが見つからないため、テストが失敗します。インターネット検索で次のコマンドを実行すると、テストを再開するのに役立ちます。
sync; echo 3 > /proc/sys/vm/drop_caches
しかし、これは夜間テストなので、手動介入なしで実行できる場合は多くの助けになります。
私はこれを行うためのオプションを探しています。
複数のリンクが見つかりました1そして2表面的にはこれが役に立ちます。
cronタブのアップデートを進める前に、他のオプションを知りたいです。
定期的にキャッシュを削除しても大丈夫ですか?別の問題を引き起こしますか?
メモリを追加すると役に立ちますか?私のオプションは何ですか?
ベストアンサー1
メモリを追加すると役に立ちますか?
sync
これら2つのコマンド(および)を実行した後にテストが成功した理由を知らないと、話すのは難しいですdrop_caches
。私は正直なところ、待ち時間の問題が原因でテストが失敗しない限り、ファイルシステムキャッシュを削除してもテストが正常に機能するとは思いません。カーネルは、メモリが落ちたことを検出すると、min_free_kbytes
キャッシュから最も古いエントリを削除し始め、実際に利用可能なメモリを最小限に戻しますmin_free_kbytes
。このプロセスの唯一の例外は、「ダーティ」とマークされたページです。したがって、ファイルシステムキャッシュの存在は、カーネルがクリーンアップするエントリを見つけることができるよりもアプリケーションがより速くメモリを割り当てない限り、通常問題ではありません(この場合、増加は正常ですmin_free_kbytes
)。
最も便利なコマンドは、sync
非同期ディスクI / O専用バッファ用のメモリを解放することです(また、ファイルdirty
システムキャッシュからすべてのエントリを削除して、メモリ不足の状況でそのエントリを削除するための候補にします)。
RAMを追加すると役に立つ可能性が約80~90%だと思います。しかし、どのテストを実行しているのかわからないので、確かに言うことはできません。
定期的にキャッシュを削除しても大丈夫ですか?別の問題を引き起こしますか?
ここで実行する操作は基本的にパフォーマンス調整です(または少なくともその目的で提供されている調整可能な項目を使用しています)。調整可能なパラメータは、しばしば「正しい」答えが不可能または非現実的であると見なされるときに提供されます。実行方法に関する一般的な規則を作成できる場合は、ソフトウェアがこれを実行でき、システム管理者は介入しません。
しかし、これが問題を引き起こさないとは絶対に確信できません。私たちは言うことができますそれおそらく起こらないだろう機能の喪失しかし、私たちは確信できません。ファイルシステムキャッシュはパフォーマンスを向上させるように設計されているため、アプリケーションが読み取る前にディスクからデータを待つように強制することはおそらく望ましくないかもしれません(時には望ましくないが必要になるかもしれません)。
編集する:
@Emmanuelのコメントを読んでください。彼は良い指摘をしています。未使用のスワップスペースがある場合は、スワップスペースを増やして、あまりvm.swappiness
使用されていないアプリケーションメモリをスワップするカーネルの優先順位を上げることができます。より多くのスワップスペースが必要またはない場合は、スワップパーティションとスワップファイルの作成に関するガイドラインをオンラインで見つけることができます。
編集#2
まだこれを使って遊んでいませんが、カーネル文書を見ると、カーネルが自分のdirty_ratio
作業を実行する前にメモリにどれだけの汚れたデータが保持されるかを制御するsysctl調整可能な項目がありますsync
。これを下げると、ファイルシステムキャッシュが「Dirty」と表示され、メモリが必要なときに削除される可能性があります。