私は複数のカスタムハードウェアが接続されているLinux(Ubuntu 14.04.3)を実行するシステム(x86_64ベース)を開発しました。私はカスタムハードウェア用のドライバと制御ソフトウェアを作成しました。
このシステムで長時間(数日)テストを実行した後、使用可能なメモリ量(コマンドで示されている)が着実にcat /proc/meminfo
減少free
することを確認しました。私のユーザースペースプロセスで使用されるメモリ量は適しています。ページキャッシュを消去しましたが、使用可能なメモリ量にほとんど影響はありませんでした。
システムを再起動し、簡単なテストを500回繰り返し、ページキャッシュを消去してから出力を/proc/meminfo
ファイルに書き込むスクリプトを作成しました。その後、このスクリプトを数日間実行していくつかのデータポイントを収集します。結果データを分析した後、空きメモリー(MemFree、MemAvailableも含む)の量は線形的に着実に減少し、他のカテゴリーはほぼ均一に保たれることが確認されました。ここに投稿するにはあまりにも多くのデータを収集しましたが、ここに最初と最後のデータポイントがあります。
_Run 1_ _Run 650_
MemTotal: 65738276 65738276
MemFree: 65182220 30881420
MemAvailable: 65124632 30824008
Buffers: 2292 2064
Cached: 101204 100816
SwapCached: 0 0
Active: 174772 195008
Inactive: 82924 82444
Active(anon): 154304 174712
Inactive(anon): 66624 66628
Active(file): 20468 20296
Inactive(file): 16300 15816
Unevictable: 0 0
Mlocked: 0 0
SwapTotal: 66978812 66978812
SwapFree: 66978812 66978812
Dirty: 188 184
Writeback: 0 0
AnonPages: 154296 180848
Mapped: 99760 99360
Shmem: 66672 66676
Slab: 46836 48352
SReclaimable: 17000 18008
SUnreclaim: 29836 30344
KernelStack: 4176 4128
PageTables: 7244 6680
NFS_Unstable: 0 0
Bounce: 0 0
WritebackTmp: 0 0
CommitLimit: 99847948 99847948
Committed_AS: 433008 417576
VmallocTotal: 34359738367 34359738367
VmallocUsed: 1886988 1886956
VmallocChunk: 34357817344 34357817344
HardwareCorrupted: 0 0
AnonHugePages: 106496 126976
CmaTotal: 0 0
CmaFree: 0 0
HugePages_Total: 0 0
HugePages_Free: 0 0
HugePages_Rsvd: 0 0
HugePages_Surp: 0 0
Hugepagesize: 2048 2048
DirectMap4k: 93872 93872
DirectMap2M: 1894400 1894400
DirectMap1G: 67108864 67108864
システムの64GBのメモリの半分以上が何らかの方法で消費され、他のカテゴリでは大幅に増加していないようです。
問題を解決するために私がしたことは次のとおりです。
- 私はカーネルメモリリークが私のドライバの1つによって引き起こされた可能性があるとすぐに疑い、すべてのドライバコードに感謝しました。私は明らかな問題を見ませんでした。
- また、カーネルのkmemleakチェッカーを有効にし、前述のテストスクリプトを再実行しました。漏れが見つかりませんでした。
- 最近有効にしましたページ所有者定期的な出力を収集しながらカーネル機能をデバッグし、スクリプトを再実行します。出力をソートして比較すると、わずかなデルタが表示されますが(私の計算によると、総デルタは10,872ページまたは約42 MBです)、消費された量はほぼ30 GBに近いです。
私は完全にパニックになり、すぐにアイデアが枯渇しました。
現在の状況に関するアイデアや、この問題を解決する方法に関する提案がある人はいますか?