一部のアプリケーションでメモリリークが発生している兆候kernel_task
は、メモリフットプリントが大きく、一般にギガバイトのオーダーであるということです。異常kext
がこのメモリ使用量を引き起こしている場合、割り当てられたメモリと割り当てられると予想されるメモリとの間に矛盾があることが予想されます。
diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6)
「Wired」および「Name」という単語以外の何かを返します。
論文を書いている間、プレビューで開いているPDFを変更すると、しばしば悪いことが起こることに気づきました:時折、メモリ使用量がkernel_task
約8ギガバイト以上になることがあります。プレビューを強制終了すると、すぐに通常の状態に戻ります。したがって、明らかに何かが間違っています-そして、プレビューはこれらの条件下でメモリをリークしています。
だから、私の質問は次のとおりです:のフットプリントの突然の予期しない増加を介してプロセスがラムをリークしたことを知っている場合kernel_task
、なぜOS Xは何かが間違っていることを知ることができません。プレビューを削除すると、失われたmalloc()
「d」メモリが復元される場合、ダーウィンがガーベッジコレクションを自動的に行わないのはなぜですか?
メモリ管理の仕組みについて根本的な誤解はありますか?
編集:(15/9/15)
これが私が話していることのデモンストレーションです。まず、メモリ使用量が高いことに気付きますkernel_task
(プレビューは開いており、アクティビティモニターの下部に表示されます。333MiBのRAMを使用しています)。
以下のアシュリーによる有益な発言に続いて、各kextの使用量を調べてみましょう。
$ kextstat | awk 'NR==1{ printf "%10s %s\n", $5, $6; } NR!=1{ printf "%10d %s\n", $5, $6; }' | sort -n
...
...
...
1249280 com.apple.driver.DspFuncLib
1769472 com.apple.nvidia.driver.NVDAGK100Hal
2629632 com.apple.nvidia.driver.NVDAResman
6184960 com.apple.driver.AirPort.Brcm4360
$
だから、大量ではありません。私のマシンにはディスクリートGPUと統合GPUの両方があります。彼らのドライバーは、わずか数MiBの有線RAMを使用しています。私の考えでは、プレビューを終了して、のメモリフットプリントがどうなるか見てみましょうkernel_task
。
プレビューはなくなり、カーネルのメモリフットプリントは劇的に低下しました。kextの使用法に変更の証拠はまだありません。上記のコマンドの出力は変更されていません。
編集:No。22701036として報告されたバグ。私はまだアップルからの応答を待っています。ActivityMonitorでプロセスを検査する場合、特に興味深いことはありませんが、何かが足りない可能性があります。
kextstat
。私の理解では、kextがリークしている場合、割り当てられたバイトと、カーネルが割り当てられていることを認識しているバイトは異なることになります。この場合、リークしたkext がないことを示すためにそこに入れました。したがって、2)Previewがramを食べるとき、これは発生しません。代わりに、kernel_task
大きく成長します。この問題を再現して写真を撮ります:-)。
diff
コマンドは、出力からSize
とWired
列を比較していると思いますkextstat
。私はこれSize
が「割り当てられたメモリ」であることに同意しますが、「割り当てられるとWired
予想される」とは思いません(man kextstat
「kextが占有するカーネルメモリの有線バイト数」と説明します)。2)あなたは間の不一致を見ているSize
とWired
するとき、あなたはプレビューで問題がありますか?