背景
私の質問は基本的にこの質問に対するフォローアップです。質問そして回答、特にこれはコメント。
大量のファイルをコピーまたは再同期する必要があるたびに、システムのメモリがいっぱいになる傾向があるため、rootとして次のスクリプトを実行します。
while true ; do echo "syncing" && sync && echo 3 > /proc/sys/vm/drop_caches && echo "done" && sleep 60 ; done ;
質問
- これはどのようにしてシステムに害を及ぼすか、悪影響を及ぼしますか? (具体的に引用されたレビューで言及されている「リスク」とは何ですか?)
- 答えが「いいえ」(私が疑うもの)なら、Linuxがデフォルトでこのコマンドを自動的に実行しないのはなぜですか? (目立つ変化は見られず、メモリが不足していないことだけを確認しました...)
答え1
キャッシュを削除しても役に立たないからです。物事を忘れてしまうのは利益のある場所ではありません。利点は、とにかく起こるメモリを再利用することです。一部のポイントデータがメモリから消去されるためです。
ただし、これらの大規模なタスクを実行するとパフォーマンスが低下する可能性があります。データがキャッシュされているが再利用されない場合は、何の利点もなく他のデータが削除されます。
したがって、キャッシュなしでジョブを実行する必要があります(残念ながら、これを実行するコマンドは覚えていません)。
答え2
Linuxがキャッシュを自動的に消去しないのはなぜですか?
そうだろう。
ron> free -g
total used free shared buffers cached
Mem: 504 415 88 1 0 352
-/+ buffers/cache: 62 441
Swap: 0 0 0
キャッシュメモリはまだ利用可能なメモリと見なされるべきです。
空き容量がゼロに減少すると、キャッシュから取得されます。
これはどのようにしてシステムに害を及ぼすか、悪影響を及ぼしますか?
有害さ=いいえ。ちょっと調べてみるとecho 3 > /proc/sys/vm/drop_caches
わかるでしょう。非破壊的仕事。
悪影響は、ディスクからキャッシュの内容を読み取る必要があるため、パフォーマンスが低下することです。たとえば、10GBのデータファイルを読み取るCプログラムを作成します。初めて実行すると、ディスクから読み取られるために遅くなりますが、それ以降はデータファイルがメモリにキャッシュされるため、はるかに高速になります。キャッシュを削除すると、データファイルを読み取る次のプログラムの実行が最初の実行と同じくらい遅くなります。これは観察し、繰り返しやすい。
答えが「いいえ」の場合、Linuxがデフォルトでこのコマンドを自動的に実行しないのはなぜですか?
何が起こるのか、どこで目撃したのかを詳しく説明する必要があります。現在、Linux(RHEL / CentOS 7.7など)ではこれを知りません。しかし、以前のLinux(例えば3.0より前)は、数年前にSLES 11.4を使用したときに、SuSEの従業員がキャッシュを自動的に削除するコードを書いていないと確信しています。しかし、一部のジョブサーバーでは、キャッシュを購入して当時私たちのためにSLESを構成した人がいました。 crontabを使用して定期的にキャッシュを削除する場合、これが行われる理由は灰色の領域です。これは決して破壊的な命令ではなく、実際に害を及ぼすことができなかったので、管理態度=良い考え方だと思います。 sles 11.4で手動で何度か実行したのは、トラブルシューティングecho 3 > drop_caches
のためでした。最終的に再起動が必要な問題は実際には解決されていないからです。
RHELパフォーマンス調整ガイドと仮想メモリ調整を確認してください。 Linuxディストリビューションにのみ適用されるのではなく、すべてのLinuxカーネルに関連するのと同じくらい低いレベルではなく、RHELにのみ適用されるものがどれほどあるのかわかりません。また、カーネル 2.6 から 3.x、4.x に移行し、この領域の変更が重要であると確信しているので、Linux カーネルのリリースノートを読んでください。