「/proc/PID/status」ファイルから子プロセスのピーク メモリ使用量を取得するプログラムを Python で作成しています。情報を正常に取得できますが、それはプロセスが開始されたときの最初のメモリ使用量であり、ピーク時のメモリ使用量ではありません。これが私のコードです:
def worker(self):
cmd = ["/home/orlando/CountMem","400000000","2000"]
p = subprocess.Popen(cmd,stdout=subprocess.PIPE)
id_list = []
id_list.append(p.pid)
for num in id_list:
stat_file = open("/proc/{0}/status".format(num))
for i, line in enumerate(stat_file):
if i == 3:
print line
if i == 10:
print line
return id_list
if __name__ == '__main__':
count = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes = count)
print(pool.map(worker,['ls']*count))
このコードから得られる出力は次のとおりです。
Pid: 7839
Pid: 7838
VmPeak: 12 kB
VmPeak: 12 kB
Pid: 7841
VmPeak: 2400 kB
Pid: 7840
VmPeak: 2400 kB
Pid: 7843
VmPeak: 12 kB
Pid: 7842
VmPeak: 12 kB
Pid: 7844
VmPeak: 12 kB
Pid: 7845
VmPeak: 2400 kB
これをもう少し明確にするために、プロセスが終了するまで「/proc/PID/status」ファイルを複数回読み取って、初期メモリ使用量ではなくピークメモリ使用量を取得できるようにしたいと考えています。どんな洞察も大歓迎です、ありがとう。