لغة بايثون تمتلك...">
0 تصويتات
755 مشاهدات
في تصنيف تقني بواسطة شيخ كبير (135ألف نقاط) 415 621 627
مغلق بواسطة

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

مغلق

1 إجابة واحدة

0 تصويتات
بواسطة شيخ كبير (135ألف نقاط) 415 621 627
 
أفضل إجابة

لغة بايثون تمتلك نظاماً آلياً لتنظيف الذاكرة يُسمى (Garbage Collector)، ولكن في التطبيقات التي تعمل 24/7 (مثل البوتات وسكربتات جلب البيانات)، قد تمتزئ ذاكرة الـ RAM تدريجياً حتى يتوقف التطبيق عن العمل (Crash). يحدث هذا غالباً بسبب "المراجع الدائرية" (Circular References) أو نسيان إغلاق الاتصالات.

خطوات التشخيص والحل:

  1. إغلاق الجلسات بدقة: أكثر الأسباب شيوعاً هو فتح اتصالات مع قواعد البيانات (MySQL/PostgreSQL) أو اتصالات شبكة (باستخدام requests أو aiohttp) دون إغلاقها. يجب دائماً استخدام تعليمة with (Context Managers) لضمان إغلاق الاتصال وتحرير الذاكرة بمجرد انتهاء المهمة.

  2. تجنب المتغيرات العامة (Global Variables): المتغيرات المعرفة خارج الدوال (Functions) تظل في الذاكرة طوال فترة عمل السكربت. لتخزين القوائم المؤقتة أو البيانات اللحظية، يجب تمريرها داخل الدوال ليتكفل الـ Garbage Collector بحذفها بمجرد انتهاء عمل الدالة.

  3. استخدام أدوات التتبع التقنية: لتحديد سطر الكود المسبب للتسرب بدقة، يتم استيراد مكتبة tracemalloc المدمجة في بايثون. تقوم هذه المكتبة بأخذ "لقطات" (Snapshots) للذاكرة في أوقات مختلفة ومقارنتها، لتخبرك بالضبط أي دالة تستهلك وتكدس الميغابايتات دون مسحها.

اسئلة متعلقة

0 تصويتات
1 إجابة 467 مشاهدات
0 تصويتات
1 إجابة 221 مشاهدات
سُئل أغسطس 28 في تصنيف بوابة موقع سؤال وجواب بواسطة o0s شيخ كبير (135ألف نقاط) 415 621 627
0 تصويتات
1 إجابة 840 مشاهدات
0 تصويتات
1 إجابة 2.1ألف مشاهدات
0 تصويتات
1 إجابة 625 مشاهدات
سُئل ديسمبر 23، 2023 بواسطة o0s شيخ كبير (135ألف نقاط) 415 621 627
0 تصويتات
0 إجابة 472 مشاهدات
سُئل مايو 11، 2022 بواسطة o0s شيخ كبير (135ألف نقاط) 415 621 627
0 تصويتات
1 إجابة 584 مشاهدات
0 تصويتات
1 إجابة 503 مشاهدات
0 تصويتات
1 إجابة 525 مشاهدات
0 تصويتات
1 إجابة 553 مشاهدات
0 تصويتات
1 إجابة 679 مشاهدات
+1 تصويت
1 إجابة 584 مشاهدات
+1 تصويت
1 إجابة 651 مشاهدات
سُئل يوليو 12، 2022 بواسطة مجهول No data
+1 تصويت
1 إجابة 670 مشاهدات
0 تصويتات
1 إجابة 623 مشاهدات
...