スラブ、スラブメモリリークの分析と管理

クラシックブログ

タイプ 記事
関係スラブのスラブ SLUBとSLABとの違い
体系的導入カーネルメモリリーク検出 Linuxのメモリ管理(22)のメモリ・テスト・テクノロジーLinuxのメモリ使用量とメモリリークの分析のツールと方法
drop_cacheアプリケーション スラブ比較的高い占有問題のliunx
スラブ、スラブメモリリーク診断分化 どのようにhttps://blog.csdn.net/dolpリーク診断SLAB
審判のスラブ、スラブかどうかメモリリーク meminfoにして、Linuxと見つけメモリリークスラブ
カーネルメモリリークのノウハウSLUBリーク分析
はじめに、使用するツール kmemleakの使用

トリガースラブ回復

ボーエン: https://www.iteye.com/blog/fengbin2005-2218722
dentry_cache多数のためのLinuxシステムメモリへの調査以上、なぜこれほど多くのdentry_cacheそれがあるのですか?

  1. まず、dentry_cache概念と機能を把握:キャッシュディレクトリエントリは、Linuxのディレクトリエントリの処理効率を向上させるために設計されたオブジェクト、それはiノードにディレクトリエントリの間のマッピングを記録します。そのため、アプリケーションはSTATシステムコールを起動したときに、それが対応するdentry_cache項目を作成します(すべてのファイルのstatが存在しないファイルがある場合はさらに、その後、常に新しいdentry_cacheの多数の項目が作成されますが存在します)。

  2. 現在のサーバがクラスタノードの嵐、嵐関連の作業プロセスの最初の考えで、ワーカープロセスの嵐についてstraceのは、非常に頻繁にSTATシステムコールが発生した、とのstatファイルは常に新しいファイル名以下のとおりです。sudo strace -fp <pid> -e trace=stat

  3. また、ワーカープロセスがローカルディレクトリに作成頻繁に嵐になることを観察し、オープン、クローズ、削除ファイルは、毎秒新しいファイル名をハートビート:sudo strace -fp <pid> -e trace=open,stat,close,unlink

これらのシステムはそんなにdentry_cacheの嘘である理由です。

異象

の/ proc / meminfoに観察することによってスラブメモリは2つの部分に分割される、実測値:

SReclaimable // 可回收的slab
SUnreclaim // 不可回收的slab

その時に、サーバーの状態:スラブが部分的にメモリによって占められ、ディスプレイのほとんどはSReclaimableあり、リサイクルすることができると言うことです。

slabtopによってOBJSスラブメインメモリ部(dentry_cache)がアクティブほぼすべての観察しかし、表示が100%の状態で使用されます。

OBJのサイズがACTIVEスラブUSE OBJS OBJ / SLABキャッシュ名サイズ
13926348 13926348 773 686 100は0.21K 3494744K dentry_cache 18%である
334 040 262 056 78%40 33404K buffer_head、8351 0.09K
151040 30208 150 537 99%0.74K。5 120832K ext3_inode_cacheの
がショーなぜリサイクルされるが、 ACTIVE状態では?:Linuxは説明見た後に熱狂的な追求人までカーネル
それを回復し、自動的に解放されていないDキャッシュで、その結果、ACTIVE状態原因でしょうか?

システムが自動的にDキャッシュ回復しました

前のセクションでは、我々はすでにサーバー上のメモリのスラブのほとんどは、我々が一定時間で自動的にトリガ・リカバリ操作にオペレーティングシステムに彼を任せることはできない、SReclaimableリサイクル可能な状態で、言及していますか?答えはイエスです。

トリガー回復キャッシュを変更します。

次のようにリリースされるkswapdカーネルプロセスの作業をされたトリガ、臨界しきい値の後にメモリにオペレーティングシステムで見つかったLinuxのデータキャッシュにいくつかの関連情報を確認し、このしきい値が計算されます。

  1. まず、grepを低に/ proc / zoneinfoの、以下の結果が得られました。

     low      1
     low      380
     low      12067
    
  2. この方法により算出し、このしきい値は、回復閾値現在のサーバーの後に発見された4キロバイトを掛けた3一緒に、上記される唯一の48メガバイトは、この現象を確認することは困難であるので、実際には回復を待つことができなかった、オペレーティングシステムがハングする、ありますライブ応答していません。

  3. 以下の方法が大きなこのしきい値によって呼び出すことができます。vm.extra_free_kbytesはvm.min_free_kbytesを設定し、同じ大きさとしては/ proc / zoneinfoの高いしきい値が成長する一方で、対応する低しきい値をするために、倍になりますように。

    $ sudo sysctl -a | grep free_kbytes       
    vm.min_free_kbytes = 39847
    vm.extra_free_kbytes = 0
    ######1GB
    $ sudo sysctl -w vm.extra_free_kbytes=836787  
    ####系统中 没有vm.extra_free_kbytes 这个参数,修改下面的参数
    $ /sbin/sysctl -w vm.min_free_kbytes=836787
    
  4. 例えばDキャッシュはシステム復旧によって起動中に、システムの空きメモリが、より少ない1ギガバイト、開始観測kswapd処理(ランニング変更寝からプロセス状態)よりも大きい場合、低い閾値は、1GBの時間に設定されている場合、システムまでのフリーメモリは、再生を停止し、低域と高しきい値のしきい値の間にあります。

公開された93元の記事 ウォン称賛12 ビュー40000 +

おすすめ

転載: blog.csdn.net/mcsbary/article/details/104694762