大きなファイルを読み込んでメモリ(または単にmallocされたchar *)に保存し、そのメインプロセスがforkされるプロセスがある場合、子プロセスがそのメモリ(またはchar * copy-on-writeによれば、ポインタが保存されているメモリはコピーされず、どちらか一方がそのメモリに書き込もうとするまで、親と子の両方が同じメモリを共有する。その場合、プロセスはメモリのコピーを作るそれを変更します。Linuxでコピーオンライトでフォークされたプロセス間でどのくらいのメモリが共有されているかを調べる方法はありますか?
私の質問は、コピーオン書き込みが実装されている場合、メインプロセスと共有されていない子供が使用するメモリの量を知る方法があるかどうかです。 つまり、いくつかの読み込み呼び出しで親メモリを使用する場合、子プロセスは実際にどれだけのメモリを使用しますか?
top、またはpsコマンドは、子が持つと想定されるメモリの総量のみを返します。 (すなわち、メモリまたはポインタ内のデータが子によってコピーされていると仮定して)
実際にCoWセマンティクスで使用されるデータの量を取得する方法はありますか?
私はをaixとMatが示唆しているように調べましたが、見つかったのはたくさんの空白のファイルでした。 tail -n 5 */smaps | less
と私が得たO/Pは
==> 1012/smaps <==
==> 1074/smaps <==
==> 10/smaps <==
==> 1148/smaps <==
==> 11862/smaps <==
==> 11/smaps <==
==> 1355/smaps <==
==> 1356/smaps <==
==> 1357/smaps <==
==> 1358/smaps <==
==> 1361/smaps <==
==> 13/smaps <==
==> 14900/smaps <==
==> 14/smaps <==
==> 1501/smaps <==
==> 15/smaps <==
==> 1684/smaps <==
==> 1685/smaps <==
==> 16/smaps <==
==> 17772/smaps <==
==> 17827/smaps <==
==> 17/smaps <==
==> 18490/smaps <==
==> 18/smaps <==
==> 1932/smaps <==
==> 1934/smaps <==
==> 19863/smaps <==
==> 19/smaps <==
==> 1/smaps <==
==> 20125/smaps <==
==> 20126/smaps <==
==> 20127/smaps <==
==> 20128/smaps <==
==> 20129/smaps <==
==> 20134/smaps <==
==> 20135/smaps <==
==> 20811/smaps <==
==> 20868/smaps <==
==> 20/smaps <==
==> 21116/smaps <==
==> 21774/smaps <==
==> 21/smaps <==
==> 22393/smaps <==
==> 22394/smaps <==
==> 22395/smaps <==
==> 22398/smaps <==
==> 22639/smaps <==
==> 22824/smaps <==
==> 22/smaps <==
==> 23009/smaps <==
==> 23058/smaps <==
==> 23059/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
==> 23835/smaps <==
==> 23961/smaps <==
==> 23962/smaps <==
==> 23963/smaps <==
==> 23964/smaps <==
==> 23/smaps <==
==> 24180/smaps <==
==> 24268/smaps <==
==> 24467/smaps <==
==> 24/smaps <==
==> 252/smaps <==
==> 25352/smaps <==
==> 25435/smaps <==
==> 25/smaps <==
==> 26465/smaps <==
==> 26/smaps <==
==> 27884/smaps <==
==> 27/smaps <==
==> 28/smaps <==
==> 29/smaps <==
==> 2/smaps <==
==> 303/smaps <==
==> 30/smaps <==
==> 316/smaps <==
==> 31/smaps <==
==> 32074/smaps <==
==> 32076/smaps <==
==> 32112/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
==> 32116/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
==> 322/smaps <==
==> 32466/smaps <==
==> 32467/smaps <==
==> 32/smaps <==
==> 33/smaps <==
==> 34/smaps <==
==> 37/smaps <==
==> 38/smaps <==
==> 3991/smaps <==
==> 3992/smaps <==
==> 39/smaps <==
==> 3/smaps <==
==> 4005/smaps <==
==> 4006/smaps <==
==> 4007/smaps <==
==> 4008/smaps <==
==> 4009/smaps <==
==> 4010/smaps <==
==> 4018/smaps <==
==> 4029/smaps <==
==> 4038/smaps <==
==> 4044/smaps <==
==> 4045/smaps <==
==> 4046/smaps <==
==> 4053/smaps <==
==> 4054/smaps <==
==> 4055/smaps <==
==> 40/smaps <==
==> 41/smaps <==
==> 42/smaps <==
==> 4339/smaps <==
==> 435/smaps <==
==> 436/smaps <==
==> 43/smaps <==
==> 44/smaps <==
==> 45/smaps <==
==> 46/smaps <==
==> 47/smaps <==
==> 48/smaps <==
==> 49/smaps <==
==> 4/smaps <==
==> 50/smaps <==
==> 51/smaps <==
==> 52/smaps <==
==> 53/smaps <==
==> 54/smaps <==
==> 55/smaps <==
==> 56/smaps <==
==> 57/smaps <==
==> 58/smaps <==
==> 5988/smaps <==
==> 59/smaps <==
==> 5/smaps <==
==> 6058/smaps <==
==> 6059/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
==> 60/smaps <==
==> 61/smaps <==
==> 62/smaps <==
==> 63/smaps <==
==> 64/smaps <==
==> 65/smaps <==
==> 66/smaps <==
==> 67/smaps <==
==> 68/smaps <==
==> 69/smaps <==
==> 6/smaps <==
==> 70/smaps <==
==> 71/smaps <==
==> 72/smaps <==
==> 73/smaps <==
==> 74/smaps <==
==> 771/smaps <==
==> 77/smaps <==
==> 782/smaps <==
==> 78/smaps <==
==> 79/smaps <==
==> 7/smaps <==
==> 80/smaps <==
==> 814/smaps <==
==> 819/smaps <==
==> 81/smaps <==
==> 82/smaps <==
==> 83/smaps <==
==> 84/smaps <==
==> 8654/smaps <==
==> 8655/smaps <==
==> 8656/smaps <==
==> 892/smaps <==
==> 8/smaps <==
==> 949/smaps <==
==> 950/smaps <==
==> 9/smaps <==
==> self/smaps <==
Private_Dirty: 0 kB
Referenced: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
それでは、私は今行うことになっていた:私はそれらのデータを持つファイルを見つけるために、このコマンドを試してみましたか?私は空白のスワップが実行されているプロセスがあります。どのように私はそれらのpidのスワップを取得するのですか?
オペレーティングシステムによって異なります。 Linux? – Mat
はいosはlinuxです。 –
http://unix.stackexchange.com/questions/33381/getting-information-about-a-process-memory-usage-from-proc-pid-smapsが参考になる場合があります – Mat