Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 手動でLinuxメモリを解放する方法

手動でLinuxメモリを解放する方法

  

Linuxのメモリ管理について疑問を抱いている友人はいつもたくさんいます。コアの新しいバージョンでは、それがこの問題に対する新しい解決策を提供しているようです。私はあなたの参考のためにそれを明らかにします。最後に、私はこの方法についても私の意見を添付しました。ファイルがLinuxの下で頻繁にアクセスされると、物理メモリはすぐに使い果たされますプログラムが終了すると、メモリは正常に解放されませんが、常にキャッシュされます。この質問は多くの人が尋ねているようですが、彼らは良い解決策を見ていません。それでは、この問題について話させてください。

まず、通常は最初のfreeコマンドです。reference [root @ server〜]#free -mtotalは、空き共有バッファを使用します。cachedMem:249 163 86 0 10 94 - /+ buffers /cache:58 191スワップ: 511 0 511

ここで、使用されている総メモリ使用済みメモリ使用中の空き空きメモリ共有されている複数のプロセスで共有されているメモリの合計バッファバッファキャッシュおよびキャッシュされたページキャッシュディスクキャッシュサイズ-buffers /cacheメモリ:使用済みバッファ - バッファ付き+バッファ/キャッシュメモリ:空きバッファ+キャッシュ+キャッシュ

使用可能メモリ=空きメモリ+バッファ+キャッシュ済み。

この基盤では、私は現在163MB、空きは86MB、バッファとキャッシュは10MB、94MBです。それでは、コピーファイルを実行した場合にメモリに変更があるかどうかを確認しましょう参照[root @ server〜]#cp -r /etc〜/test /[root @ server〜]#free -mtotal使用済み空き共有バッファcachedMem :249 244 4 0 8 174 - /+ buffers /cache:62 187スワップ:511 0 511

使用したmyコマンドの実行後は244MB、空きは4MB、バッファは8MB、キャッシュは174MB、日はこんにちは、それらはすべてキャッシュされて食べられています。心配しないでください、これはファイル読み取りの効率を改善するためです。

ディスクアクセスの効率を向上させるために、Linuxはキャッシュのdentry(VFSではファイルパス名をinode変換に高速化する)に加えて、次の2つの主要なCacheメソッドを採用しています。 BufferCacheとPageCache。前者はディスクブロックの読み書き用であり、後者はファイルiノードの読み書き用です。これらのキャッシュは、I /Oシステムコール(read、write、getdentsなど)の時間を効果的に短縮します。

そのため、しばらくの間、Linuxは自動的に使用されているメモリを解放するという人もいます。しばらく待ってから、無料でもう一度試して、リリースがあるかどうかを確認しましょう。参照[root @ server test]#free -mtotal使用済み空き共有バッファcachedMem:249 244 5 0 8 174 - /+ buffers /cache:61 188スワップ:511 0 511

変更はないようです。 (実際、メモリ管理もSwapに関連しています)

では、このメモリを手動で解放することはできますか?答えはイエスです!

次に、手動リリースキャッシュ/procは仮想ファイルシステムです。カーネルエンティティとの通信手段として読み書き操作ができます。つまり、/proc内のファイルを変更することによって現在のカーネルの動作を調整できます。それから/proc /sys /vm /drop_cachesを調整することでメモリを解放できます。操作は以下のとおりです。参照[root @サーバーテスト]#cat /proc /sys /vm /drop_caches0

最初に、/proc /sys /vm /drop_cachesの値はデフォルトで0になります。参照[root @ server test]#sync

手動でsyncコマンドを実行します(説明:syncコマンドはsyncサブルーチンを実行します。システムを停止する必要がある場合は、syncコマンドを実行してファイルシステムの整合性を確保します。書き込まれていないシステムバッファはすべて、変更されたiノード、遅延ブロックI /O、および読み書き可能マッピングファイルを含むディスクに書き込まれます。参照[root @ server test]#echo 3> /proc /sys /Vm /drop_caches [ルート@サーバーテスト]#cat /proc /sys /vm /drop_caches3

/proc /sys /vm /drop_cachesの値を3に設定します。[root @サーバーテスト]#free -mtotal used空き共有バッファcachedMem:249 66 182 0 0 11 - /+ buffers /cache:55 194スワップ:511 0 511

再度freeコマンドを実行すると、現在使用されている容量は66MB、空き容量は182MB、バッファ容量は0MBです。キャッシュは11MBです。そのため、バッファとキャッシュを効果的に解放します。

◎/proc /sys /vm /drop_cachesの使い方を説明します/proc /sys /vm /drop_caches(Linux 2.6.16以降)このファイルに書き込むと、カーネルはクリーンなキャッシュを削除します。

ページキャッシュを解放するには、echo 1> /proc /sys /vm /drop_cachesを使用し、3つのdentriesとiノードを使用するには、echo 2> /proc /を使用します。 Sys /vm /drop_caches;ページキャッシュ、dentries、およびiノードを解放するには、echo 3> /proc /sys /vm /drop_cachesを使用します。

これは破壊的ではない操作で、汚れたオブジェクトは解放できません。最初にsyncを実行する必要があります。

3、私の意見上記の記事は長い間Linuxメモリ管理に関する多くのユーザーの質問であり、「直感的」な比較をしています。コア開発チームによる侵害この値を使用する必要があるのか​​、それともユーザーにこの値を言及する必要があるのか​​について、私は予約しています。参考文献1、manから、この値は2.6.16以降のコアバージョンからのみ利用可能です。 Red Flag DC5.0、RHEL 4.xなどのバージョンがそうでないようなu>オペレーティングシステム
; 2、システムメモリが観察するのに十分であれば、私はまだスワップ使用量とsi /so 2を見るつもりです値のサイズ;

ユーザーにとってよくある質問は、なぜ無料がこんなに小さいのですか。アプリケーションを閉じた後にメモリが解放されないのですか。しかし実際には、これはLinuxのメモリ管理が Windows
と異なるためです、free smallはメモリが足りないことを意味するのではなく、freeの2行目の最後の値になるはずです。 /+ buffers /cache:58 191

これはシステムで利用可能なメモリ容量です。実際のプロジェクトでは、アプリケーションがメモリリークやオーバーフローなどの問題を抱えている場合、スワップからの使用量は比較的迅速に判断できることがわかりますが、上記を見るのはより困難です。逆に、現時点でユーザーにシステムの値を変更するように指示した場合、"空きメモリ"空き容量は大きいです。ユーザーはどう思いますか?オペレーティングシステムに問題があると感じることはありませんか。つまり、コアはバッファやキャッシュをすばやくクリアすることができるので、これを実行するのは難しくありませんが(上記の操作から明らかです)、コアはこれを実行しません(デフォルト値は0です)。変更するだけです。

Copyright © Windowsの知識 All Rights Reserved