Linux'ta bir işlemin paylaşılan bellek boyutunu elde etmeye çalıştım.Bir işlemin doğru paylaşılan bellek boyutu nasıl alınır?
mapped: 206672K writeable/private: 4352K shared: 128K
Bunu görebilirsiniz:
üst ve SHR alanıyla kontrol:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1734 root 20 0 201m 4072 1012 S 0.0 0.1 22:00.65 php-fpm
pmap -d Burada 2 farklı komutları kullanarak sonucudur pmap'deki paylaşılan bellek boyutu, üst kısımdan çok daha küçüktür.
Nedenini bulmak için bazı kaynak kodunu okudum.
unsigned long task_statm(struct mm_struct *mm, unsigned long *shared, unsigned long *text, unsigned long *data, unsigned long *resident) { *shared = get_mm_counter(mm, MM_FILEPAGES); *text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK)) >> PAGE_SHIFT; *data = mm->total_vm - mm->shared_vm; *resident = *shared + get_mm_counter(mm, MM_ANONPAGES); return mm->total_vm; }
Tüm dosya sayfaları paylaşılan bellek olarak sayılır görünüyor: Üst/proc // statm değeri okuyor ve değerler hesaplanır görünüyor?
Ve pmap komut/proc // haritalardan bilgi okuma ve daha sonra bazı bayraklar aracılığıyla paylaşılan hafızayı hesaplamak:
3dc822a000-3dc822d000 rw-p 0002a000 08:13 5134288 /usr/lib64/libmcrypt.so.4.4.8 start-end flags file_offset dev_major:dev_minor inode
bayraklar [3] == 's' o zaman bu haritayı olacak olursa Paylaşılan olarak sayılmalıdır.
Bu yüzden sorum, hangisinin daha doğru olduğu? Ve neden paylaşılan bellek boyutunu hesaplamak için farklı yöntemler var?
Şimdiden teşekkürler!