سؤال

أنا أستخدم ejabberd + mochiweb على خادمنا. كلما طالت الأطول وأحتفظ بأجبرد و mochiweb، كلما تم استهلاك المزيد من الذاكرة (الليلة الماضية كانت تستهلك 35٪ من الذاكرة. الآن أصبحت الآن 50٪). اعتقدت أن هذا كان مجرد مشكلة جمع القمامة الناشئة - لذلك قمت بتثبيت Erlang R13B3 وإعادة تشغيل Ejabberd. هذا لم يصلح ذلك.

لذلك لاحظت الآن أنه على ما يزيد قليلا عن 50٪ من استهلاك الذاكرة الكاملة، يبدو أن Ejabberd بدءا من "ترك" للذاكرة والبقاء في حوالي 50٪. هل هذا طبيعي؟ هو ~ 50٪ عتبة ل EJABBERD، بحيث عندما تصل إليه، فإن الوقت: "مهلا وقت السماح بالفعل ببعض الذاكرة تذهب ..." وربما تبقي الراحة في الوصول السريع (مثل تخزين التخزين المؤقت؟)

أنا أقدر أي مدخلات. شكرًا!

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

المحلول 2

اتضح، لا يوجد تسرب الذاكرة (ياي!) ejabberd يأخذ فقط <40 ميجابايت. أخيرا، رأيت الضوء عندما رأيت الرسوم البيانية للاستخدام على المحنين - يتم استخدام 288 ميجابايت فقط، يتم تخزين 550 ميغابايت، ويتم تخزينها 175 ميغابايت مؤقتا. خادم EJABBERD الخاص بي تحديث كل 2.5 ثانية من كل عميل بحيث قد يفسر السبب في أن الكثير مخزن مؤقتا / مؤقتا.

شكرا لجميع مساعدتكم.

نصائح أخرى

يركض erlang:memory(). في قذيفة الخاص بك بين الحين والآخر. يمكنك أيضا إعطاء erlang:system_info(Type). مع allocated_areas و allocator محاولة. يجب أن تعطيك هذه تلميحا على أي نوع من الذاكرة يتسرب.

يمكنك أيضا إعداد memsup. لتحذيرك عن العمليات تخصيص الكثير من الذاكرة.

الذرات التي تم إنشاؤها حديثا في عمليات Erlang مطلقا جمع القمامة. قد تكون هذه مشكلة عندما يتم تسجيل العمليات بواسطة الجبري الذي يخلق أسماء الذرة من عشوائي على سبيل المثال. خلق سلاسل عشوائيا.

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