كيف تقلل عمل الـ garbage collector في لغة جو ؟
كيفية تعيين قيمة GOGC 🔗
يمكنك تعيين قيمتها في طرفية (terminal) بهذه الطريقة:
GOGC=200
أو يمكنك تغييرها في ملف yaml الخاص بمتغيرات البيئة عند استخدام Docker أو Kubernetes.
ما هي القيمة الافتراضية لـ GOGC؟ 🔗
القيمة الافتراضية لـ GOGC هي 100 ، مما يعني أن عملية جمع القمامة ستعمل عندما يتضاعف عدد التخصيصات (استهلاك الذاكرة) من عدد التخصيصات السابقة.
ماذا يمكنني أن أفعل لتقليل تأثير الـ garbage collection في Go؟ 🔗
إذا كان برنامج Go الخاص بك يحتوي على مجموعة بيانات ثابتة كبيرة ، فأضبط GOGC
على نسبة مئوية أصغر ؛ على سبيل المثال GOGC=50
. كلما زاد الرقم ، كلما قل حجم استهلاك الذاكرة (heap memory) ، ولكن كلما زاد استخدام وحدة المعالجة المركزية (CPU).
إذا كان برنامج Go الخاص بك يحتوي على كومة صغيرة وعدد قليل من الـ memory allocations وعمل GC سريع ، فأضبط GOGC
على نسبة مئوية أعلى بحيث يحدث الـ garbage collection بشكل أقل تكراراً. وبالتالي ، سيستجيب برنامجك بشكل أسرع وتكون الـ latency أقل. لكنه سيستخدم ذاكرة الوصول العشوائي (RAM) أكثر من الإعداد الافتراضي.
إذا كان برنامجك يعمل لفترة زمنية قصيرة مثل المترجم ، فقد يكون من الجيد إيقاف تشغيل الـ GC . يمكنك إيقاف تشغيل الـ garbage collector بواسطة GOGC=off
. وبالتالي ، يعمل البرنامج بشكل أسرع ، ولكن قد يتعطل (ينتهي بسبب استخدام أكثر من ذاكرة الوصول العشوائي المتاحة / المسموح بها). لذلك يوصى بالتحليل والقياس قبل وبعد تغيير قيمة GOGC.
فيما يلي القيم في جدول موجز.
الحالة | الإجراء | الايجابيات | السلبيات |
---|---|---|---|
مجموعة بيانات ثابتة كبيرة | GOGC = 50 أو أقل | ذاكرة RAM أقل | استهلاك أعلى في وحدة المعالجة المركزية (CPU) |
بيانات أقل ، GC سريع | GOGC = 200 أو أكثر | زمن انتظار (latency) أقل | استهلاك عالي من ذاكرة الوصول العشوائي (RAM) |
تنفيذ لمرة واحدة | GOGC=off | يعمل بشكل أسرع | قد يتعطل وينهي البرنامج |
![waffarx cash back](/img/waffarx-banner.png)