سؤال

لديّ خفيون Linux الذي يتقدم ببعض الأطفال ويراقبهم للحصول على حوادث (إعادة تشغيل حسب الحاجة). سيكون من الرائع أن يتمكن الوالد من مراقبة استخدام ذاكرة عمليات الطفل - للكشف عن تسرب الذاكرة وإعادة تشغيل عمليات الطفل عند تجاوز حجم معين. كيف يمكنني أن أفعل هذا؟

هل كانت مفيدة؟

المحلول

يجب أن تكون قادرًا على الحصول على معلومات تفصيلية للذاكرة من/proc/{pid}/الحالة:

Name:   bash
State:  S (sleeping)
Tgid:   6053
Pid:    6053
PPid:   6050
TracerPid:  0
Uid:    1007    1007    1007    1007
Gid:    1007    1007    1007    1007
FDSize: 256
Groups: 1007 
VmPeak:    48076 kB
VmSize:    48044 kB
VmLck:         0 kB
VmHWM:      4932 kB
VmRSS:      2812 kB
VmData:     2232 kB
VmStk:        84 kB
VmExe:       832 kB
VmLib:      6468 kB
VmPTE:       108 kB
Threads:    1
SigQ:   0/8190
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001010
SigCgt: 0000000188020001
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
Cpus_allowed:   0f
Mems_allowed:   00000000,00000001
voluntary_ctxt_switches:    69227121
nonvoluntary_ctxt_switches: 19071

ومع ذلك ، ما لم تكن تسريبات الذاكرة مثيرة ، فمن الصعب اكتشافها في النظر في إحصائيات العملية ، لأن Malloc و Free عادة ما تكون مجردة تمامًا من مكالمات النظام (BRK/SBRK) التي تتوافق معها.

يمكنك أيضًا التحقق من/proc/$ {pid}/statm.

نصائح أخرى

يمكنك محاولة وجود برنامج نصي شاشة يعمل على تشغيل VMSTAT بالتوازي مع عمليتك (لاحظ أن هذه ليست فكرة جيدة إذا كنت تقوم بتشغيل هذا البرنامج النصي عدة مرات حيث ستحصل على نسخ متعددة VMSTAT). بعد ذلك ، يمكن أن يأخذ برنامج الشاشة هذا الذاكرة المجانية بالإضافة إلى حجم المخزن المؤقت وذاكرة التخزين المؤقت للحصول على كمية الذاكرة التي يتوفرها نظام التشغيل ويمكنك تتبع ذلك. ثم إذا حصل ذلك على بعض العتبة ، يمكنك التحقق من أكبر العمليات عن طريق الاتصال بـ PS -e -o ... (انظر صفحة MAN للحصول على التفاصيل ولكن جرب VSZ ، PCPU ، المستخدم ، PID ، ARGS كنقطة انطلاق).

أنصح بتشغيل هذا الشاشة كعملية منفصلة وجعلها تقتل عملية المارقة عندما تصبح كبيرة جدًا. يمكنك تقييد مجموعة العمليات التي يتم مراقبتها باستخدام

-u user-name

المعلمة إلى PS.

هذا كله اختراق (معنى المملكة المتحدة) - الحل الصحيح هو إصلاح التسريبات ، على افتراض أن لديك الرمز.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top