عامل ميناء الحاويات وإدارة الموارد، هل تعلم حقا؟

وطبع هذا المقال بإذن من GitChat (ID: GitChat)

الكاتب | تشانغ تاو

ذبيان | (شينخوا)

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

حاوية، باعتبارها واحدة من المزايا الرئيسية للعامل الميناء هو المعرفة مهم للمستخدمين عامل الميناء الذي لا يمكن تجنبه. لفهم المبادئ الأساسية للسفينة، أو حتى كتابة الحاويات الخاصة بها، وليس في عمق فهم محتويات ذات الصلة من إدارة الموارد حاوية من المستحيل تماما.

وسيكون هذا موضوع إدارة الموارد الحاويات إلى عنوان الأسئلة الثلاثة التالية:

  • ما هي الموارد يمكن تخصيصها إلى الحاوية ندير؟

  • كم هو المستخدمة فعليا الموارد حاوية؟

  • كيفية إدارة الموارد الحاويات المستخدمة؟

نوع المورد

بالنسبة للسؤال الأول، عندما نبدأ حاوية عندما يمكن استخدام بعض موارد النظام، وهو ما يتسق أساسا مع بداية دينا على برنامج الجهاز البدني. على سبيل المثال، فئات رئيسية هي:

  • وحدة المعالجة المركزية

  • ذاكرة

  • شبكة

  • I / O

  • GPU

هذه موارد النظام عندما نبدأ الحاويات، وربما تحتاج إلى النظر فيها من قبل الإدارة لدينا. على سبيل المثال، فإننا يمكن أن تؤدي القيادة عامل ميناء المدى --help لمعرفة جميع المعلمات عامل الميناء دعم التشغيل. الآن وقد تم دعم المعلمة عامل الميناء تديرها قيادة أكثر من 90، وليس هنا أحد عشر القوائم.

مشاهدة بصمة الحاويات

احصائيات عامل ميناء

يوفر عامل الميناء ومريحة احصائيات القيادة عامل ميناء والإحصاءات المتاحة لنا للنظر والتي تحتلها الموارد الحاوية.

ما زلنا بدء حاوية رديس كمثال على ذلك.

# بدء الحاويات

(MoeLove) ~ عامل ميناء تشغيل رديس -d

c98c9831ee 73 e9b7 171 9b404f5ecf3b408de0b69aec0f781e42d8 155 75d28ada

# عرض الوضع احتلوا الموارد

(MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql)

حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS

c98c9831ee 73  amazing_torvalds 0.08 2.613MiB / 15.56GiB 0.02 3.66kB / 0B 0B / 0B 4

هنا الحجة التي تم تمريرها إلى تيار -ما لا، لأن عامل ميناء الأمر الافتراضي احصائيات المستمر دفق إخراج ديناميكية (مرة واحدة في الثانية الواحدة)، ويمر عليه المعلمات -ما لا تيار، فإنه سيتم إخراج مرة واحدة فقط الإقلاع عن التدخين.

ثم تعرفت على معنى محتوى انتاجها لك:

  • ID الحاويات: ID الحاوية، هو الرسالة التي لا تغير دورة حياة الحاوية.

  • الاسم: اسم الحاوية، إن لم يكن يدويا باستخدام المعلمة --name المحدد، عامل الميناء سيتم إنشاء عشوائيا، كما يمكن تعديلها أثناء قيادة العملية.

  • CPU: النسبة المئوية من موارد وحدة المعالجة المركزية من الحاويات المستخدمة، فإنه ينطوي على الكثير من التفاصيل أكثر، ما يلي إرادة التفاصيل.

  • م الاستخدام / الحد: استخدام الذاكرة الحالي والحد الأقصى حاوية الذاكرة المتوفرة، وهنا أنا استخدم جهاز كمبيوتر 16G لاختبار.

  • م: النسبة المئوية للموارد الذاكرة من الحاويات المستخدمة.

  • صافي I / O: وعاء من خلال واجهة الشبكة لإرسال وكمية البيانات التي وردت.

  • كتلة I / O: كمية البيانات القراءة والكتابة كتلة الحاويات الجهاز.

  • PIDS: إنشاء سفينة العملية أو عدد من المواضيع.

عامل ميناء رأس

بالإضافة إلى قيادة عامل ميناء المذكورة أعلاه احصائيات، كما يوفر عامل الميناء بسيط نسبيا القيادة عامل ميناء رأس آخر، بما يتفق عادة مع قيادة الحزب الاشتراكى لدينا كما تدعم القيادة المعلمات فرع فلسطين.

(MoeLove) ~ عامل ميناء رأس $ (عامل ميناء ملاحظة -ql)

UID PID PPID C STIME TTY الوقت CMD

؟ سيستم دي + 627562480 16:500:00:24 رديس خادم *: 63 79

# يمكنك استخدام المعلمات قيادة الحزب الاشتراكى

(MoeLove) ~ عامل ميناء رأس $ (عامل ميناء ملاحظة -ql) -o معرف المنتج، والقانون الأساسي، كمد

PID STAT CMD

6275 خدمة تصميم المواقع رديس خادم *: 63 79

حاوية إدارة الموارد وحدة المعالجة المركزية

عندما نستخدم الحاويات، وحدة المعالجة المركزية والذاكرة هي أننا لا سيما اهتمام الموارد. ومع ذلك، من أجل إدارة الموارد وحدة المعالجة المركزية، وتغطي بعض من الطابق الأرضي سيكون أكثر منحازة، بعض المتعلقة جدولة وحدة المعالجة المركزية الأساسية، مثل CFS (تماما جدولة عادلة) وهلم جرا.

يمكننا أن نبدأ لنرى ما يوفر عامل الميناء القادم موارد وحدة المعالجة المركزية السيطرة المعلمات ذات الصلة. استخدام عامل ميناء تشغيل --help | CPU البقرى إلى الرأي.

(MoeLove) ~ عامل ميناء المدى --help | CPU البقرى

--cpu الفترة كثافة الحد CPU CFS (تماما معرض جدولة) الفترة

--cpu حصص الباحث الحد CPU CFS (تماما معرض جدولة) حصة

--cpu-غ-فترة كثافة الحد CPU فترة زمنية حقيقية في ميكروثانية

--cpu-غ-وقت التشغيل كثافة الحد CPU وقت التشغيل في الوقت الحقيقي في ميكروثانية

-c، --cpu سهم سهم CPU INT (الوزن النسبي)

--cpus عشري عدد من وحدات المعالجة المركزية

--cpuset-وحدات المعالجة المركزية وحدات المعالجة المركزية سلسلة فيه للسماح التنفيذ (0-3، 0،1)

لا يجري محددة يعني المعلمات الأولى على قدم وساق هنا، نحن مباشرة إلى العديد من الأمثلة لتوضيح، على التوالي، لمساعدتك على فهم.

افتراضي غير محدود

ملاحظة: أنا هنا لإثبات كمبيوتر CPU 4 النواة.

الآن نبدأ حاوية، لدينا جبال الألب لينكس صغير جدا كمثال للخير.

(MoeLove) ~ عامل ميناء المدى --rm -من جبال الألب

/ #

في إطار آخر، تنفيذ الأوامر لعرض الموارد الحاوية المذكورة أعلاه:

(MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql)

حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS

106a24399bc9 friendly_varahamihira 0.00 1.047MiB / 15.56GiB 0.01 5.01kB / 0B 1.67MB / 0B 1

تستطيع أن ترى، ليس هناك تيار في حاوية استهلاك CPU الزائد، وPIDS هو 1، مشيرا إلى أن عملية واحدة فقط.

الآن نعود إلى مجرد بداية الحاويات، وتنفيذ الأمر التالي:

sha256sum / ديف / صفر

  • Sha256sum هو أمر لحساب والتحقق من المعلومات أداة سطر SHA256.

  • / ديف / صفر على نظام لينكس هو جهاز خاص، عند قراءة ذلك، فإنه يمكن توفير سلسلة غير محدودة فارغة (0x00، أو ما شابه ذلك).

لذا فإن الأمر أعلاه، ** السماح sha256sum قراءة باستمرار فارغة سلسلة / ديف / صفر ولدت ومحسوبة. ** هذا سوف تستهلك بسرعة موارد وحدة المعالجة المركزية.

دعونا ننظر في استخدام الموارد في هذا الوقت الحاويات:

(MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql)

حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS

106a24399bc9 friendly_varahamihira 100.59 1.5MiB / 15.56GiB 0.01 14.4kB / 0B 1.99MB / 0B 2

(MoeLove) ~ عامل ميناء رأس $ (عامل ميناء ملاحظة -ql) -o معرف المنتج، ج، كمد

PID C CMD

8250 / بن / ش

96599 sha256sum / ديف / صفر

يمكنك ان ترى كان استخدام CPU الحالي حوالي 100 من الوقت.

دعونا نفتح نافذة جديدة، في وعاء، وتنفيذ نفس الأمر:

(MoeLove) ~ عامل ميناء إكسيك -من $ (عامل ميناء ملاحظة -ql) ش / # Sha256sum / ديف / صفر

عرض استخدام الموارد في حاوية:

(MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql) حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS f359d4ff6fc6 nice_zhukovsky 200. 79 1. 79 3MiB / 15.56GiB 0.01 4.58kB / 0B 0B / 0B 4 (MoeLove) ~ عامل ميناء رأس $ (عامل ميناء ملاحظة -ql) -o معرف المنتج، ج، كمد PID C CMD 8250 / بن / ش 96599 sha256sum / ديف / صفر 12360 ش 129799 sha256sum / ديف / صفر

الآن يمكنك ان ترى عمليتين، وقد سمح لها اثنين من وحدة المعالجة المركزية على التوالي في حمولة كاملة. وتجدر الإشارة إلى أن إضافية حدد sha256sum، على سبيل المثال، لأنه هو برنامج ترابط واحد، كل مرة يتم فيها تشغيل وحدة المعالجة المركزية الأساسية sha256sum لا تستهلك موارد أخرى.

ويمكن أن نخلص إلى أنه، إن لم يكن ضمن القيود المفروضة على الموارد CPU برنامج حاوية، قد تستهلك الكثير من موارد وحدة المعالجة المركزية، مما يؤثر على برامج أخرى أو يؤثر على استقرار النظام.

تخصيص 0.5 وحدة المعالجة المركزية

ثم الذي يليه، ونحن تقييد موارد وحدة المعالجة المركزية لهذه الحاوية، ويمكن استخدام هذه القيود فقط 0.5 وحدة المعالجة المركزية.

(MoeLove) ~ تحديث عامل ميناء --cpus "0.5" $ (عامل ميناء ملاحظة -ql) f359d4ff6fc6

يمكننا إعادة تشغيل الحاويات، عندما عامل ميناء التشغيل إضافة حدود الموارد لذلك.

ولكن سوف أعرض لكم لطريقة ديناميكية لتغيير حدود الموارد، أمر التعديل استخدام عامل ميناء. على سبيل المثال، في هذا المثال، ونحن نستخدم الترتيب التالي لكبح جماح الحاوية يستخدم فقط 0.5 وحدة المعالجة المركزية.

للراحة، ونحن مباشرة من عملية sha256sum فقط اضغط على Ctrl + c لإنهاء العملية. ومن ثم إعادة تشغيل الأمر:

# إنهاء عملية / # Sha256sum / ديف / صفر ^ C # برنامج البداية / # Sha256sum / ديف / صفر

عرض استهلاك الموارد:

(MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql) حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS f359d4ff6fc6 nice_zhukovsky 49.87 1.777MiB / 15.56GiB 0.01 112kB / 0B 1.59MB / 0B 3 (MoeLove) ~ عامل ميناء رأس $ (عامل ميناء ملاحظة -ql) -o معرف المنتج، ج، كمد PID C CMD 8250 / بن / ش 12360 ش 766249 sha256sum / ديف / صفر

ويمكن ملاحظة أن عملية يستخدم حوالي 50 من وحدة المعالجة المركزية. نحن ثم بدء العملية مرة أخرى من sha256sum آخر:

/ # Sha256sum / ديف / صفر

عرض استخدام الموارد:

(MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql) حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS f359d4ff6fc6 nice_zhukovsky 50.92 1.891MiB / 15.56GiB 0.01 113kB / 0B 1.59MB / 0B 4 (MoeLove) ~ عامل ميناء رأس $ (عامل ميناء ملاحظة -ql) -o معرف المنتج، ج، كمد PID C CMD 8250 / بن / ش 12360 ش

ويمكن ملاحظة أن الحاوية ككل يستغرق 50 من وحدة المعالجة المركزية، واحدة من sha256sum عمليتين تمثل كل ل25.

لقد بنجاح كما هو متوقع انه تم تخصيص 0.5 وحدة المعالجة المركزية.

تخصيص 1.5 وحدة المعالجة المركزية

وبعد ذلك، كرر الخطوات المذكورة أعلاه، ولكنه كان 1.5 تخصيص وحدة المعالجة المركزية، لنرى كيف الوضع الفعلي.

# تحديث التكوين، واستخدام وحدة المعالجة المركزية 1.5 (MoeLove) ~ تحديث عامل ميناء --cpus "1.5" $ (عامل ميناء ملاحظة -ql) f359d4ff6fc6

استخدام نافذتين قبل تنفيذ sha256sum اختبار / ديف / صفر:

/ # Sha256sum / ديف / صفر

عرض استخدام الموارد:

(MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql) حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS f359d4ff6fc6 nice_zhukovsky 151 0.23 2MiB / 15.56GiB 0.01 122kB / 0B 1.59MB / 0B 4 (MoeLove) ~ عامل ميناء رأس $ (عامل ميناء ملاحظة -ql) -o معرف المنتج، ج، كمد PID C CMD 8250 / بن / ش 12360 ش 2516777 sha256sum / ديف / صفر 2521174 sha256sum / ديف / صفر

تستطيع أن ترى، فإن النتائج أساسا بما يتماشى مع توقعاتنا، 150 حول بالمائة من وحدة المعالجة المركزية، في حين أن عمليات اختبار اثنين، يتم تقسيم ما يقرب من موارد وحدة المعالجة المركزية.

وحدة المعالجة المركزية يمكن استخدامها لتحديد

--Cpuset-وحدات المعالجة المركزية يمكن استخدامها لتحديد تخصيص وحدة المعالجة المركزية يمكن استخدامها، وهنا أنا المعينة ك 0 لاستخدام وحدة المعالجة المركزية الأساسية الأولى.

(MoeLove) ~ تحديث عامل ميناء --cpus "1.5" --cpuset-وحدات المعالجة المركزية 0 $ (عامل ميناء ملاحظة -ql) f359d4ff6fc6

استخدام نافذتين قبل تنفيذ sha256sum اختبار / ديف / صفر:

/ # Sha256sum / ديف / صفر

عرض الموارد:

(MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql) حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS f359d4ff6fc6 nice_zhukovsky 99.18 1.988MiB / 15.56GiB 0.01 221kB / 0B 1.59MB / 0B 4 (MoeLove) ~ عامل ميناء رأس $ (عامل ميناء ملاحظة -ql) -o معرف المنتج، ج، كمد PID C CMD 8250 / بن / ش 12360 ش 2511950 sha256sum / ديف / صفر 251 64  48 sha256sum / ديف / صفر

يمكننا أن نرى، على الرغم من أننا لا تزال تستخدم --cpus محدد 1.5 وحدة المعالجة المركزية، ولكن نظرا لاستخدام --cpuset-وحدات المعالجة المركزية السماح فقط ليتم تشغيله على وحدة المعالجة المركزية الأولى، وبالتالي فإن العمليتين سيختبر فقط CPU على درجة . مقتبس من العمود.

ملخص

من خلال المثال أعلاه، غطيت كيفية الحد من موارد وحدة المعالجة المركزية التي يمكن استخدامها من قبل المعلمات حاوية --cpus، تحديد عمليات وحدة المعالجة المركزية تشغيل داخل الحاوية المستخدمة من قبل المعلمات --cpuset-وحدات المعالجة المركزية، ويمكن تحديثها مباشرة في التحديث عامل ميناء على التوالي تتصل التكوين حاوية.

الآن نعود إلى المدى --help استخدام عامل ميناء سابقة | CPU البقرى، انظر عامل الميناء خيارات الدعم حاوية للمعلمات ذات الصلة وحدة المعالجة المركزية:

(MoeLove) ~ عامل ميناء المدى --help | CPU البقرى --cpu الفترة كثافة الحد CPU CFS (تماما معرض جدولة) الفترة --cpu حصص الباحث الحد CPU CFS (تماما معرض جدولة) حصة --cpu-غ-فترة كثافة الحد CPU فترة زمنية حقيقية في ميكروثانية --cpu-غ-وقت التشغيل كثافة الحد CPU وقت التشغيل في الوقت الحقيقي في ميكروثانية -c، --cpu سهم سهم CPU INT (الوزن النسبي) --cpus عشري عدد من وحدات المعالجة المركزية --cpuset-وحدات المعالجة المركزية وحدات المعالجة المركزية سلسلة فيه للسماح التنفيذ (0-3، 0،1)

--cpus هو عامل الميناء 1.13 عند إضافته، ويمكن استخدامها لتحل محل --cpu الفترة الأصلية و--cpu نظام الحصص. وهذه المعايير سيغروبس ثلاثة تؤثر في نهاية المطاف لينكس CFS النواة وحدة المعالجة المركزية جدولة الفعلية (تماما معرض جدولة ونزيهة تماما جدولة الخوارزمية) جدولة نتيجة لهذه العملية.

بشكل عام، فمن المستحسن استخدام --cpus مباشرة، دون الحاجة إلى وجود مجموعة منفصلة --cpu الفترة و--cpu نظام الحصص، إلا إذا كان لديك بالفعل ما يكفي من المعرفة لجنة الأمن الغذائي العالمي وحدة المعالجة المركزية جدولة، وتوفير المعلمات --cpus هي فريق عامل الميناء من أجل تبسيط تكلفة المستخدم يمكن زيادة، فإنه يكفي لتلبية معظم احتياجاتنا.

خيار أسهم --cpu، رغم ما فيه من أهمية عملية، ولكن من الأفضل أن --cpus بديهية، وسوف تتأثر من قبل الدولة التشغيل للنظام الحالي، لكي لا تعطينا مشكلة بسبب ذلك، ومن هنا لم يعد أدخلت.

سوف --cpu-غ-فترة ومعلمتين --cpu-غ-وقت تؤثر في الوقت الحقيقي جدولة وحدة المعالجة المركزية. ولكن جدولة الوقت الحقيقي بحاجة إلى دعم من المعلمات النواة، وتكوين الوقت الحقيقي جدولة هو أيضا أحد كبار أو عملية خطيرة، فإنه قد يؤدي إلى كل أنواع المشاكل غريبة، وهنا لم يعد من الممكن توسيعها.

موارد الذاكرة حاوية إدارة

كما سبق وصفها كيفية إدارة الحاويات الموارد وحدة المعالجة المركزية، ثم ننظر في كيفية إدارة موارد الذاكرة من الحاوية. بالمقارنة مع موارد وحدة المعالجة المركزية، وإدارة موارد الذاكرة على أبسط كثيرا.

وبالمثل، فإننا نلقي نظرة على ما لدينا معلمات التكوين المتاحة، لمعناه I سيتم شرحه لاحقا:

(MoeLove) ~ عامل ميناء المدى --help | egrep "الذاكرة | أوم" --kernel الذاكرة بايت حد الذاكرة النواة -m، بايت --memory الحد الذاكرة --memory-حجز بايت ذاكرة حد لينة --memory مبادلة بايت الحد مبادلة يساوي إلى الذاكرة بالإضافة إلى تبادل: '-1' لتمكين تبادل غير محدود --memory-swappiness الباحث اللحن swappiness الذاكرة الحاويات (0-100) (الافتراضي -1) --oom القتل-تعطيل تعطيل OOM القاتل تفضيلات OOM --oom-درجة-صفة المضيف الباحث اللحن (-1000-1000)

OOM

قبل البدء في محتويات الذاكرة إدارة الحاويات، ونحن قد ترغب في الحديث عن شائعة جدا، ولكن كان أيضا لمواجهة السؤال: OOM (من الذاكرة).

عندما يكتشف النواة التي لا توجد ذاكرة كافية لتشغيل النظام، وظائف معينة عندما أثار استثناء OOM، وسوف تستخدم OOM القاتل لقتل بعض من هذه العملية، إلى غرفة جعل لضمان سير العمل العادي للنظام.

هنا نبذة مختصرة مقدمة المقبل عملية العامة OOM القاتل من أجل فهم مضمون المتابعة للجميع.

ويمكن رؤية كود OOM القاتل نواة في تورفالدس / لينكس / مم / oom_kill.c مباشرة، وهنا مع نواة لينكس 5.2، على سبيل المثال.

الذي استشهد تعليق:

إذا كان لنا أن نفدت الذاكرة، لدينا الاختيار بين إما قتل مهمة العشوائي (سيئة)، والسماح للانهيار النظام (أسوأ).

أو تحاول أن تكون ذكية حول العملية التي قتل. ملاحظة أننا لا يجب أن الكمال هنا، علينا فقط أن تكون جيدة.

الترجمة، عندما نكون في OOM، لدينا العديد من الخيارات، وقتل عشوائي أي مهمة (ليست جيدة)، والسماح للانهيار النظام (أسوأ)، أو محاولة لفهم العمليات التي يمكن أن يكون قتل. لاحظ أن هنا نحن لسنا بحاجة السعي وراء الكمال، ونحن بحاجة فقط للحصول على أفضل (أن تكون جيدة) على خط المرمى.

وبالفعل فعلت ذلك، سواء قتل عشوائي أي عملية أو تحطم وتحرق، وهذا هو ما لا نريده.

العودة إلى رمز النواة عند منخفض، يتم تشغيل نظام الذاكرة out_of_memory بعد وظيفة المكالمات select_bad_process، حدد عملية سيئة للقتل.

ما هو نوع العملية هي عملية سيئة؟ دائما بعض الشروط. select_bad_process هو حلقة بسيطة، التي تدعو إلى أن تكون العملية oom_evaluate_task ظروف مدروسة لتحديد منطق الأساسية هي واحدة من oom_badness.

غير موقعة oom_badness طويلة (task_struct البنية * ص، البنية mem_cgroup * memcg، CONST nodemask_t * nodemask، totalpages طويلة غير موقعة) { نقطة طويلة؛ صفة الطويل؛ إذا (oom_unkillable_task (ع، memcg، nodemask)) العودة 0؛ ع = find_lock_task_mm (ع)؛ إذا (! ع) العودة 0؛ / * * لا يفكرون حتى في المهام التي يتم وضع علامة صراحة أوم * Unkillable أو كانت بالفعل أوم يجن أو هي في * وميل دد لو من vfork * / صفة = (المدى) P- signal- oom_score_adj. إذا (صفة == OOM_SCORE_ADJ_MIN || test_bit (MMF_OOM_SKIP، وP- mm- الأعلام) || in_vfork (ع)) { task_unlock (ع)؛ العودة 0؛ } / * * خط الأساس لدرجة السوء هي نسبة RAM أن كل * آر إس إس العمل، وpagetable واستخدام الفضاء المبادلة. * / نقطة = get_mm_rss (P- مم) + get_mm_counter (P- مم، MM_SWAPENTS) + mm_pgtables_bytes (P- ملم) / PAGE_SIZE. task_unlock (ع)؛ / * تطبيع إلى وحدات oom_score_adj * / صفة * = totalpages / 1000. نقاط + = صفة. / * * أبدا العودة 0 لمهمة المؤهلة بغض النظر عن مكافأة الجذرية و * Oom_score_adj (oom_score_adj لا يمكن أن يكون OOM_SCORE_ADJ_MIN هنا). * / نقطة عودة  ؟ 0 نقاط: 1؛ }

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

وهما أكبر قدر من الفائدة الهامة لهذا الخيار هي:

  • يمكنك استرداد الكثير من الذاكرة.

  • بعد تجنب سهولة OOM، بدأت عملية المتابعة اللاحقة ذاكرة إعادة OOM-الشفعة.

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

    لذلك عامل الميناء في الإعدادات الافتراضية بدء التشغيل oom_score_adj عملية عامل الميناء -500 قدر الإمكان لتجنب OOM القاتل أن يقتل نفسه.

    إذا كنا نريد حاوية، قدر الإمكان ألا يكون قتل OOM القاتل، فإننا يمكن أن تمر --oom-درجة-صفة تكوين قيمة منخفضة نسبيا لذلك.

    ولكن كن حذرا: لا تعطيل تبادل OOM القاتل من قبل --oom القتل-تعطيل، أو مجموعة إلى الحاوية دون عملية oom_score_adj قيمة dockerd، مما قد يؤدي إلى عدم استقرار النظام في بعض الحالات. إلا إذا كنت تعرف بالضبط تؤثر على عملها سيجلب.

    موارد الذاكرة حاوية إدارة

    قدم أكثر من OOM، تعلمون أنه بالمقارنة مع الضرر الناجم عن الإرهاق الذاكرة، ونحن نواصل إدخال كيفية إدارة موارد الذاكرة من الحاوية.

    (MoeLove) ~ عامل ميناء المدى --help | البقرى 'الذاكرة' --kernel الذاكرة بايت حد الذاكرة النواة -m، بايت --memory الحد الذاكرة --memory-حجز بايت ذاكرة حد لينة --memory مبادلة بايت الحد مبادلة يساوي إلى الذاكرة بالإضافة إلى تبادل: '-1' لتمكين تبادل غير محدود --memory-swappiness الباحث اللحن swappiness الذاكرة الحاويات (0-100) (الافتراضي -1)

    معلمات التكوين المتاحة المذكورة أعلاه هي عدة، ونحن عادة استخدام معلمات --memory مباشرة لتقييد حجم الذاكرة المتوفرة للحاوية. نحن نستخدم أيضا موصوفة بعض الأمثلة:

    بدء الحاويات، وتمرير المعلمات --memory الذاكرة الحد 10M التي يمكن استخدامها هي 10 م.

    (MoeLove) ~ عامل ميناء المدى --rm -من --memory 10M جبال الألب / #

    كيف يمكننا التحقق من حجم المتاحة ذاكرته هو كم؟ على آلة المادية، ونحن عادة استخدام أدوات مجانية للعرض. ولكن في بيئة الحاويات، سواء كانت تجري؟

    / مجاني # -m تستخدم مجموعه مخازن المشتركة حرة مؤقتا م: 159 32 144 91 144 1 181 45 64  3632 - / + مخازن / مخبأ: 102945637 مبادلة: 84716937778

    ومن الواضح أن حصلت على النتائج باستخدام معلومات مجانية على المضيف. وبطبيعة الحال، قدمنا بالفعل قيادة لعامل ميناء احصائيات، نستخدمها لعرض استخدام الموارد الحالي:

    (MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql) حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS e260e9 187 4d8 busy_napier 0.00 1.172MiB / 10MiB 11.72 16.1kB / 0B 0B / 0B 1

    يمكنك الاطلاع على المعلومات MEM العمود الاستعمال / LIMIT التي اتخذت الواقع، هذه هي الطريقة توقعنا.

    هل هناك طرق أخرى أن نرى هذه الرسالة؟ بالطبع، هناك:

    # نفذ في حاوية / # /sys/fs/cgroup/memory/memory.limit_in_bytes القط 10485760

    أو قد يتم تنفيذ بالترتيب التالي على المضيف:

    (MoeLove) ~ القط /sys/fs/cgroup/memory/system.slice/docker-$(docker تفقد --format '{{.Id}} $ (عامل ميناء ملاحظة -ql)). نطاق / memory.limit_in_bytes 10485760

    ملاحظة: يتم تمرير الأمر أعلاه في لينكس 5.2 نواة الاختبار، وبنية الدليل بين الإصدارات المختلفة تختلف قليلا.

    حاوية المحدثة حدود الموارد الذاكرة

    عندما العملية حاوية لبعض الوقت، مما يزيد الذاكرة المستخدمة من قبل هذه العملية، ونحن نريد أن تسمح للحاوية إلى استخدام المزيد من موارد الذاكرة، ثم كيفية تشغيلها؟

    تحديث عامل ميناء يمكننا الاستمرار في استخدام الأمر صفها الانتهاء سابقا.

    على سبيل المثال، استخدم الأمر التالي لتوسيع الذاكرة المتوفرة إلى 20M:

    (MoeLove) ~ تحديث عامل ميناء 20M --memory $ (عامل ميناء ملاحظة -ql) e260e9 187 4d8 # تحقق من بدء نفاذ (MoeLove) ~ عامل ميناء احصائيات -ما لا تيار $ (عامل ميناء ملاحظة -ql) حاويات ID اسم CPU MEM الاستعمال / LIMIT MEM NET I / O BLOCK I / O PIDS e260e9 187 4d8 busy_napier 0.00 1.434MiB / 20MiB 7.17 35.3kB / 0B 0B / 0B 1

    إذا لم يكن كافيا، فإنه يحتاج إلى أن توسع الى 100m؟

    (MoeLove) ~ تحديث عامل ميناء 100M --memory $ (عامل ميناء ملاحظة -ql) استجابة خطأ من الشيطان: لا يمكن تحديث e260e9 الحاويات 187 4d8 181 b6d0078c8534876 139 يجب أن يكون الحد ذاكرة أصغر من بالفعل تعيين الحد memoryswap، تحديث memoryswap في نفس الوقت: 07cd9ada2af35d630a7bef204654982

    سوف تجد هناك رسالة خطأ. مفادها أن الحد الأقصى للذاكرة يجب أن يكون أصغر من الحد memoryswap التي تم تكوينها، ضرورة memoryswap التحديث.

    يمكن لك الخلط، قبل أن مجرد لحد من الذاكرة ل10M، 20M، ويمتد الوقت إلى النجاح. لماذا 100M عند حدوث خطأ؟

    ويتصل هذا سلوك معين من هذه المعايير، أنا قادم لك أحد عشر مقدمة.

    حد الذاكرة معلمات سلوك معين

    هنا سلوك بعض المعلمات، يشير أساسا إلى --memory كنا سابقا ولم قدم --memory مبادلة هذه المعلمتين.

    1. --memory للحد من كمية استخدام الذاكرة، وأنها تمثل مجموع --memory مبادلة للذاكرة ومبادلة.

    وهذا ما يفسر ما سبق "الحد الذاكرة يجب أن يكون أصغر من بالفعل تعيين الحد memoryswap"، لأن --memory مبادلة ينبغي أن يكون دائما أكبر من أو يساوي --memory (بعد كل شيء، لا يمكن إلا أن يكون الحد الأدنى مبادله 0).

    2. إلا إذا كان --memory سيتم تعيين النهائي --memory مبادلة لتكون ضعف --memory. وهذا هو، في الحالة التي يكون فيها فقط --memory نقل، الحاوية يمكن استخدامها فقط مع نفس حجم جسم --memory.

    وهذا ما يفسر أيضا ما سبق "بمد مباشرة لآخر 20M بنجاح، ولكن سيتم تمديد الوقت الى 100m الأخطاء" في السيناريو أعلاه محددة فقط --memory إلى 10M، بحيث يتم تعيين --memory مبادلة الافتراضي لتصبح 20M.

    3. إذا --memory --memory مبادلة وتعيين القيمة نفسها، ثم لا تستخدم تبديل.

    4. إذا تم تعيين الحد مبادلة --memory مبادلة إلى -1 يشير إلى عدم استخدام الحاوية.

    5. إذا إعدادات المعلمة --memory مبادلة، يجب تعيين المعلمات --memory.

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

    عندما أوصى إدارة وحدة المعالجة المركزية --cpus، فإن دلالات يكون أكثر وضوحا. إذا لينكس هو جدولة وحدة المعالجة المركزية CFS هو مألوف جدا، وهناك طلب قوي على التخصيص، في هذه الحالة إعادة استخدام --cpu الفترة و--cpu حصص أكثر ملاءمة.

    عندما إدارة الذاكرة، هناك-swappiness --memory تحتاج المعلمات أيضا الالتفات إلى إلى أخرى، فإنه يمكن تعيين كنسبة مئوية من 0 إلى 100، بما يتفق مع السلوك swappiness نرى عادة، يتم تعيين إلى 0 لعدم استخدام مبادلة صفحة مجهولة، مجموعة 100 يمثل صفحات مجهولة يمكن تبادلها. إذا لم يكن محددا، فإنه التخلف يرث من المضيف.

    في هذه الورقة، على ضوء الحاوية على حد الذاكرة المضيف، وأنا أعطى الأوامر:

    (MoeLove) ~ القط /sys/fs/cgroup/memory/system.slice/docker-$(docker تفقد --format '{{.Id}} $ (عامل ميناء ملاحظة -ql)). نطاق / memory.limit_in_bytes 10485760

    مقتبس من العمود GitChat، كزة على الرابط لمعرفة التفاصيل: الشبكي:؟ //Gitbook.cn/m/mazi/comp/column columnId = 5d70cfdc4dc2 130 91bfca46f

    7 في عام 2020 للمساعدة في جمع عادتك قليلا

    ما تحصل عليه ليس المظروف الأحمر للسنة الصينية الجديدة بل السحابة

    ماذا تعلمت ستة أشهر بيثون، أو لا يمكن العثور على عمل؟

    صعود وهبوط مهندس البرمجيات برنامج فني

    المطورين الروبوت في سبيل الله

    لا قانون التنمية ليست بالضبط الزائفة الطلب؟

    كيفية الخروج من الأمور بشكل جيد من الموت؟

    هوهيهوت ممارسة كافتيريا المدرسة الثانوية ترحيل شخص من الوقاية من الاوبئة والسيطرة على مائدة الطعام المدرسية

    تدل، وقوانغشى الناس أقلية جعل الملونة الأرز الدبق احتفال "3 آذار"

    اولمبياد لعبة كبيرة الغيب: وسطا فقط، لا توجد الفائزين

    GUOTAI جونان للاوراق المالية: صناعة المستهلك في النصف الثاني القرص الانتعاش العلامة التجارية الوطنية إحياء "الفرسان الثلاثة"

    GUOTAI جونان للاوراق المالية: الصين أزمة الغذاء هذا العام سيحدث؟