مؤخرا في واحدة من خوادم افتراضيةواجهت مشكلة استغرقت وقتًا طويلاً للكتابة على القرص. وتحت هذا الموضوع، وجدت موضوعًا مثيرًا للاهتمام، والذي يناقش بالتفصيل عمل عمليات الكتابة على قرص التخزين المؤقت في Linux. اليوم ستكون هناك ترجمة لهذا المقال.
عند كتابة البيانات على القرص (بواسطة أي برنامج)، يقوم Linux بتخزين هذه المعلومات مؤقتًا في منطقة من الذاكرة تسمى "Page Cache". يمكن عرض المعلومات حول منطقة الذاكرة هذه باستخدام الأوامر مجاني، فمستاتأو قمة. معلومات كاملةيمكنك أن ترى حول منطقة الذاكرة هذه في الملف /proc/meminfo. فيما يلي مثال لهذا الملف على خادم مزود بذاكرة وصول عشوائي (RAM) سعة 4 جيجابايت:
إجمالي الذاكرة: 3950112 كيلو بايت MemFree: 622560 كيلو بايت المخازن المؤقتة: 78048 كيلو بايت مخزنة مؤقتًا: 2901484 كيلو بايت مخزنة مؤقتًا: 0 كيلو بايت نشط: 3108012 كيلو بايت غير نشط: 55296 كيلو بايت عالي الإجمالي: 0 كيلو بايت عالي مجاني: 0 كيلو بايت منخفض الإجمالي: 3950112 كيلو بايت منخفض مجاني: 62256 0 كيلو بايت إجمالي المبادلة: 4198272 كيلو بايت قابلة للتبديل : 4198244 كيلو بايت متسخ: 416 كيلو بايت الكتابة: 0 كيلو بايت المعينة: 999852 كيلو بايت اللوحة: 57104 كيلو بايت الالتزام_AS: 3340368 كيلو بايت جداول الصفحات: 6672 كيلو بايت Vmalloc الإجمالي: 536870911 كيلو بايت Vmalloc المستخدمة: 35300 كيلو بايت VmallocChunk: 53683 5 611 كيلو بايت صفحات ضخمة_الإجمالي: 0 صفحات ضخمة_مجانية: 0 حجم صفحات ضخمة: 2048 كيلو بايت
يظهر حجم ذاكرة التخزين المؤقت للصفحة في المعلمة "نسخة مخبأة"، في في هذا المثالتبلغ مساحتها 2.9 جيجابايت. أثناء كتابة الصفحات في الذاكرة، يزداد حجم المعلمة "القذرة". عند بدء الكتابة مباشرة على القرص، ستزداد معلمة "الكتابة" حتى انتهاء التسجيل. من الصعب جدًا رؤية معلمة "إعادة الكتابة" عالية، نظرًا لأن قيمتها تزيد فقط أثناء الاستقصاء، عندما تكون عمليات الإدخال/الإخراج (I/O) في قائمة الانتظار ولكن لم تتم كتابتها بعد على القرص.
يقوم Linux عادةً بكتابة البيانات من ذاكرة التخزين المؤقت إلى القرص باستخدام عملية ما pdflush. في أي لحظة يوجد من 2 إلى 8 خيوط تعمل في النظام pdflush. في الملف /proc/sys/vm/nr_pdflush_threadsيمكنك معرفة عدد المواضيع النشطة النشطة حاليًا. في كل مرة تكون جميع سلاسل pdflush الموجودة مشغولة على الأقل 1 ثانية. تحاول الخيوط الجديدة كتابة البيانات لتحرير قوائم انتظار الأجهزة، بحيث يوجد لكل جهاز نشط مؤشر ترابط واحد يقوم بمسح البيانات من ذاكرة التخزين المؤقت. في كل مرة تمر ثانية دون أي نشاط من pdflush، تتم إزالة موضوع واحد. في نظام التشغيل Linux، يمكنك ضبط الحد الأدنى والحد الأقصى لعدد سلاسل عمليات pdflush.
يتم التحكم في كل دفق pdflush بواسطة عدة معلمات في /proc/sys/vm:
تصف معظم الوثائق هذه المعلمة كنسبة مئوية من إجمالي ذاكرة الوصول العشوائي (RAM)، ولكن وفقًا لـ رموز المصدرنواة لينكس ليست كذلك. بالنظر إلى meminfo، يتم حساب المعلمة dirty_background_ratio من القيمة MemFree + مخبأة - تم تعيينها. لذلك بالنسبة لنظامنا التجريبي، فإن 10% أقل بقليل من 250 ميجابايت، ولكن ليس 400 ميجابايت.
في التكوين الافتراضي، تظل البيانات المكتوبة على القرص في الذاكرة حتى:
إذا حدثت عمليات الكتابة بشكل متكرر على الخادم، فسيتم الوصول إلى المعلمة dirty_background_ratio يومًا ما، وستكون قادرًا على رؤية أن جميع عمليات الكتابة إلى القرص تمر عبر هذه المعلمة فقط دون انتظار انتهاء صلاحية المعلمة dirty_expire_centithans.
المعلمة /proc/sys/vm/dirty_ratio(الافتراضي 40): الحد الأقصى للنسبة المئوية لإجمالي ذاكرة الوصول العشوائي التي يمكن تخصيصها لذاكرة التخزين المؤقت للصفحة قبل أن يكتب pdflush البيانات إلى القرص.
ملحوظة: أثناء الكتابة على القرص، يتم منع كافة العمليات من الكتابة، وليس فقط تلك التي ملأت مخزن الكتابة المؤقت. يمكن أن يتسبب هذا في قيام عملية واحدة بحظر كافة عمليات الإدخال/الإخراج على النظام. نفذ هذا
عادةً ما يواجه الأشخاص عند محاولتهم زيادة أداء النظام الفرعي للقرص مشكلة قيام Linux بتخزين الكثير من المعلومات مؤقتًا في وقت واحد. وهذا أمر صعب بشكل خاص بالنسبة للعمليات التي تتطلب المزامنة نظام الملفاتباستخدام مكالمات fsync. إذا كان هناك الكثير من البيانات في ذاكرة التخزين المؤقت أثناء هذه المكالمة، فقد يتجمد النظام حتى تنتهي هذه المكالمة.
آخر مشكلة شائعةيحدث بسبب الحاجة إلى كتابة الكثير قبل بدء الكتابة على القرص الفعلي، وتحدث عمليات الإدخال/الإخراج بشكل متكرر أكثر مما يحدث أثناء التشغيل العادي. ستحصل على فترات أطول لا تحدث فيها أي عمليات كتابة على القرص حتى تمتلئ ذاكرة التخزين المؤقت الكبيرة، وعند هذه النقطة سيتم تشغيل أحد مشغلات pdflush وسيتم كتابة البيانات بأقصى سرعة.
dirty_background_ratio: أداة التعديل الرئيسية عادة ما تقلل هذه المعلمة. إذا كان هدفك هو تقليل كمية البيانات المخزنة في ذاكرة التخزين المؤقت، بحيث تتم كتابة البيانات على القرص تدريجيًا وليس دفعة واحدة، فإن تقليل هذه المعلمة هو الطريقة الأكثر فعالية. تكون القيمة الافتراضية مقبولة أكثر للأنظمة التي تحتوي على الكثير من ذاكرة الوصول العشوائي والأقراص البطيئة.
نسبة القذرة: المعلمة الثانية الأكثر أهمية للتكوين. إذا تم تقليل هذا الإعداد بشكل كبير، فسيتم حظر التطبيقات التي تحتاج إلى الكتابة على القرص معًا.
dirty_expire_centisecs: في محاولة للحد من ذلك، ولكن ليس كثيرا. يسمح لك بتقليل الوقت الذي تقضيه الصفحات في ذاكرة التخزين المؤقت قبل كتابتها على القرص، ولكن هذا سوف يقلل بشكل كبير من متوسط سرعة الكتابة على القرص، لأن إنها أقل كفاءة. سيكون هذا ملحوظًا بشكل خاص على الأنظمة ذات الأقراص البطيئة.
في الملف /etc/sysctl.confندخل مثلا :
Vm.dirty_background_ratio = 10 vm.dirty_ratio = 40
ثم نقوم بمزامنة ذاكرة التخزين المؤقت وبيانات القرص ومسح ذاكرة التخزين المؤقت وحفظ الإعدادات.
مزامنة؛ صدى 3 > /proc/sys/vm/drop_caches; سيسكتل -ص
دعونا نغير سلوك Ubuntu فيما يتعلق باستخدام ذاكرة الوصول العشوائي (RAM) والمبادلة (قسم المبادلة). هناك معلمة تسمى vm.swappiness، والتي تكون قيمتها الافتراضية 60 وتتحكم في النسبة المئوية ذاكرة مجانية، حيث سيبدأ الإلقاء النشط للصفحات في قسم المبادلة. بمعنى آخر، عند 100-60=40% من الذاكرة المشغولة، سيبدأ Ubuntu بالفعل في استخدام قسم المبادلة. في كميات كبيرةذاكرة الوصول العشوائي (RAM) في الكمبيوتر، من الأفضل تغيير معلمة vm.swappiness إلى 10 وبالتالي أمر Ubuntu بعدم استخدام المبادلة حتى تصل ذاكرة الوصول العشوائي المشغولة إلى 100-10=90%. لنقم بتعيين القيمة على 10 بدلاً من 60. في وحدة التحكم، أدخل الأمر التالي:
صدى 10 > /proc/sys/vm/swappiness
Sysctl -w vm.swappiness=10
لحفظ الإعداد بعد إعادة التشغيل، أضف السطر التالي إلى نهاية الملف /etc/sysctl.conf:
Vm.swappiness=10
لتطبيق الإعداد على الفور:
سيسكتل -ص
بالإضافة إلى ذلك، يمكننا التحدث عن عدة معلمات أخرى.
يقوم الملف الزائف vfs_cache_pressure بتخزين قيمة - مستوى الذاكرة المخصصة لذاكرة التخزين المؤقت. القيمة الافتراضية: 100. تؤدي زيادة هذه المعلمة إلى قيام النواة بتفريغ صفحات الذاكرة غير المستخدمة من ذاكرة التخزين المؤقت بشكل أكثر نشاطًا، أي. ستزداد كمية ذاكرة الوصول العشوائي المخصصة لذاكرة التخزين المؤقت بشكل أبطأ، مما يؤدي بدوره إلى تقليل احتمالية استخدام قسم المبادلة. من خلال تقليل هذه المعلمة، فإن النواة، على العكس من ذلك، ستحتفظ بصفحات الذاكرة في ذاكرة التخزين المؤقت لفترة أطول، بما في ذلك المبادلة. وهذا منطقي عندما يكون هناك كمية صغيرة من ذاكرة الوصول العشوائي، على سبيل المثال، إذا كان لدينا 512 ميجابايت من الذاكرة، فإن يمكن ضبط المعلمة vfs_cache_pressure على 50. سيؤدي ذلك إلى تقليل عدد عمليات القرص في قسم المبادلة، وبالتالي فإن إزالة الصفحات غير المستخدمة ستحدث بشكل أقل تكرارًا مما قد يؤدي إلى نقص الذاكرة.
إذا كنت تريد تسريع النظام ولديك ذاكرة وصول عشوائي كافية (2 جيجابايت أو أكثر)، فقم بتغيير قيمة النظام مثل هذا: Swappiness = 10, vfs_cache_pressure = 1000 (افتراضي 100)، أضف السطر التالي إلى /etc/sysctl ملف .conf:
Vm.vfs_cache_pressure=1000
أو على الطاير:
Sysctl -w vm.vfs_cache_pressure=1000
عند كتابة البيانات على القرص (بواسطة أي برنامج)، يقوم Linux بتخزين هذه المعلومات مؤقتًا في منطقة من الذاكرة تسمى "Page Cache". يمكن عرض المعلومات حول منطقة الذاكرة هذه باستخدام الأوامر المجانية أو vmstat أو الأوامر العليا. يمكن الاطلاع على المعلومات الكاملة حول منطقة الذاكرة هذه في الملف /proc/meminfo. فيما يلي مثال لهذا الملف على خادم مزود بذاكرة وصول عشوائي (RAM) سعة 4 جيجابايت:
مجموع الذاكرة: 3950112 كيلو بايت
MemFree: 622560 كيلو بايت
المخازن المؤقتة: 78048 كيلو بايت
مخبأة: 2901484 كيلو بايت
SwapCached: 0 كيلو بايت
نشط: 3108012 كيلو بايت
غير نشط: 55296 كيلو بايت
إجمالي عالي: 0 كيلو بايت
HighFree: 0 كيلو بايت
الإجمالي المنخفض: 3950112 كيلو بايت
منخفض مجاني: 622560 كيلو بايت
إجمالي المبادلة: 4198272 كيلو بايت
SwapFree: 4198244 كيلو بايت
القذرة: 416 كيلو بايت
إعادة الكتابة: 0 كيلو بايت
المعينة: 999852 كيلو بايت
بلاطة: 57104 كيلو بايت
Commit_AS: 3340368 كيلو بايت
جداول الصفحات: 6672 كيلو بايت
فمالوكالإجمالي: 536870911 كيلو بايت
Vmalloc المستخدمة: 35300 كيلو بايت
VmallocChunk: 536835611 كيلو بايت
صفحات ضخمة_الإجمالي: 0
صفحات ضخمة_مجانية: 0
حجم الصفحة ضخم: 2048 كيلو بايت
يظهر حجم ذاكرة التخزين المؤقت للصفحة في المعلمة "نسخة مخبأة"، وفي هذا المثال يبلغ 2.9 جيجابايت. أثناء كتابة الصفحات في الذاكرة، يزداد حجم المعلمة "القذرة". عند بدء الكتابة على القرص، ستزداد معلمة "الكتابة" حتى انتهاء التسجيل. من الصعب جدًا رؤية معلمة "إعادة الكتابة" عالية، نظرًا لأن قيمتها تزيد فقط أثناء الاستقصاء، عندما تكون عمليات الإدخال/الإخراج (I/O) في قائمة الانتظار ولكن لم تتم كتابتها بعد على القرص.
يقوم Linux عادةً بكتابة بيانات ذاكرة التخزين المؤقت على القرص باستخدام عملية pdflush. في أي لحظة، هناك من 2 إلى 8 سلاسل pdflush قيد التشغيل على النظام. في الملف /proc/sys/vm/nr_pdflush_threads، يمكنك معرفة عدد سلاسل الرسائل النشطة حاليًا. في كل مرة تكون جميع سلاسل pdflush الموجودة مشغولة لمدة ثانية واحدة على الأقل. تحاول الخيوط الجديدة كتابة البيانات لتحرير قوائم انتظار الأجهزة، بحيث يوجد لكل جهاز نشط مؤشر ترابط واحد يقوم بمسح البيانات من ذاكرة التخزين المؤقت. في كل مرة تمر ثانية دون أي نشاط من pdflush، تتم إزالة موضوع واحد. في نظام التشغيل Linux، يمكنك ضبط الحد الأدنى والحد الأقصى لعدد سلاسل عمليات pdflush.
إعداد pdflush
يتم التحكم في كل موضوع pdflush بواسطة عدة معلمات في /proc/sys/vm:
متى يبدأ pdflush التسجيل؟
في التكوين الافتراضي، تظل البيانات المكتوبة على القرص في الذاكرة حتى:
إذا حدثت عمليات الكتابة بشكل متكرر على الخادم، فسيتم الوصول إلى المعلمة dirty_background_ratio يومًا ما، وستكون قادرًا على رؤية أن جميع عمليات الكتابة إلى القرص تمر عبر هذه المعلمة فقط دون انتظار انتهاء صلاحية المعلمة dirty_expire_centithans.
عملية كتابة الصفحة
المعلمة /proc/sys/vm/dirty_ratio (الافتراضي 40) هي النسبة المئوية القصوى لإجمالي ذاكرة الوصول العشوائي التي يمكن تخصيصها لذاكرة التخزين المؤقت للصفحة قبل أن يكتب pdflush البيانات إلى القرص.
ملاحظة: أثناء الكتابة على القرص، يتم حظر كافة عمليات الكتابة، وليس فقط العملية التي ملأت مخزن الكتابة المؤقت. يمكن أن يتسبب هذا في قيام عملية واحدة بحظر كافة عمليات الإدخال/الإخراج على النظام.
أفضل الممارسات لتحسين Linux للعمليات كثيفة الكتابة
عادةً، عند محاولة زيادة أداء النظام الفرعي للقرص، يواجهون مشكلة قيام Linux بتخزين الكثير من المعلومات مؤقتًا في وقت واحد. يكون هذا ملحوظًا بشكل خاص بالنسبة للعمليات التي تتطلب مزامنة نظام الملفات باستخدام مكالمات fsync. إذا كان هناك الكثير من البيانات في ذاكرة التخزين المؤقت أثناء هذه المكالمة، فقد يتجمد النظام حتى تنتهي هذه المكالمة.
تحدث مشكلة شائعة أخرى بسبب الحاجة إلى كتابة الكثير قبل بدء الكتابة على القرص الفعلي، حيث تحدث عمليات الإدخال/الإخراج بشكل متكرر أكثر من التشغيل العادي.
ونتيجة لذلك نحصل
في الملف /etc/sysctl.conf نضيف:
Vm.dirty_background_ratio = 10 vm.dirty_ratio = 40
ثم نقوم بمزامنة ذاكرة التخزين المؤقت وبيانات القرص ومسح ذاكرة التخزين المؤقت وحفظ المعلمات:
مزامنة؛ صدى 3 > /proc/sys/vm/drop_caches; سيسكتل -ص
لتقليل عدد عمليات إنهاء الكتابة على القرص، تحتاج إلى ضبط:
Vm.dirty_writeback_centisecs = 15000
عندما يتعلق الأمر بتحسين أداء نظام Linux، فإن الذاكرة الفعلية هي العامل الأكثر أهمية. وبطبيعة الحال، يقدم Linux العديد من الخيارات للتحكم في استخدام موارد الذاكرة الثمينة. تختلف الأدوات المختلفة من حيث دقة المراقبة (على سبيل المثال، على مستوى النظام، لكل عملية، لكل مستخدم)، والواجهة (على سبيل المثال، الرسومية، سطر الأوامر، ncurses) أو وضع التشغيل (على سبيل المثال، التفاعلي، الوضع الدفعي).
فيما يلي قائمة جزئية بواجهة المستخدم الرسومية أو برامج سطر الأوامر لتمنحك الكثير للاختيار من بينها للتحقق من الذاكرة المستخدمة والمجانية على منصات Linux.
أسهل طريقة للتحقق من استخدام ذاكرة الوصول العشوائي هي من خلال /proc/meminfo. تم تحديث هذا ديناميكيًا الملف الظاهري، في الواقع، مصدر معلومات العرض للعديد من الأدوات الأخرى المتعلقة بالذاكرة مثل الأدوات المجانية والأعلى وps. بدءًا من مقدار الذاكرة المتوفرة/المادية وحتى حجم المخزن المؤقت المتوقع كتابته مرة أخرى على القرص، يحتوي /proc/meminfo على كل ما تريد معرفته حول الاستخدام ذاكرة النظام. معلومات ذاكرة العملية متاحة أيضًا من /proc/
$ cat /proc/meminfo
الأمر atop هو نظام تفاعلي قائم على ncurses ومراقب عمليات للبيئة الطرفية. يعرض معلومات موجزة محدثة ديناميكيًا حول مصادر النظام (وحدة المعالجة المركزية، الذاكرة، الشبكة، الإدخال/الإخراج، النواة) مع تحذيرات مرمزة بالألوان في حالة تحميل النظام العالي. ويمكنه أيضًا فرز العمليات (أو المستخدمين) حسب أعلى استهلاك للموارد، بحيث مسؤول النظاميمكن معرفة العملية أو المستخدم المسؤول عن تشغيل النظام. تتضمن تقارير إحصائيات الذاكرة الذاكرة الإجمالية/الحرة، والذاكرة المخزنة مؤقتًا/المخزنة، ومعلومات الذاكرة الظاهرية.
$ سودو فوق
يعد الأمر المجاني طريقة سريعة وسهلة للحصول على نظرة عامة على استخدام الذاكرة المستمدة من /proc/meminfo. يعرض لقطة من الذاكرة الفعلية الإجمالية/المتوفرة ومبادلة النظام بالإضافة إلى المساحة المخزنة المستخدمة/المجانية في kernel.
GNOME System Monitor هو تطبيق رسومي يعرض تاريخًا مختصرًا لاستخدام موارد النظام لوحدة المعالجة المركزية والذاكرة ومساحة المبادلة والشبكة. كما يوفر أيضًا عملية مراقبة لاستخدام وحدة المعالجة المركزية والذاكرة.
$ جنوم-نظام-مراقبة
الأمر htop هو عارض عمليات تفاعلي يستند إلى ncurses ويعرض استخدام الذاكرة حسب العملية في الوقت الفعلي. يمكنه الإبلاغ عن أثر ذاكرة العملية في الذاكرة الرئيسية (RSS)، وإجمالي حجم البرنامج في الذاكرة، وحجم المكتبة، وإجمالي حجم الصفحة، وحجم الصفحة القذرة (في ذاكرة التخزين المؤقت) لجميع العمليات الجارية. يمكنك التمرير أفقيًا أو رأسيًا عبر القائمة (المرتبة) لجميع العمليات.
بينما يحتوي سطح مكتب جنوم على شاشة نظام جنوم، فإن سطح مكتب كيدي له نظير خاص به: شاشة نظام كيدي. تشبه وظائفه في الغالب إصدار جنوم، أي يعرض سجلًا في الوقت الفعلي لاستخدام موارد النظام، بالإضافة إلى استهلاك وحدة المعالجة المركزية/الذاكرة للعمليات الفردية.
$ksysguard
تعد الأداة المساعدة memstat مفيدة لتحديد العمليات (العمليات) القابلة للتنفيذ والمكتبات المشتركة التي تستهلك الذاكرة الظاهرية. من خلال الحصول على معرف العملية، يكشف memstat عن مقدار الذاكرة الافتراضية المستخدمة بواسطة التعليمات البرمجية القابلة للتنفيذ والبيانات والمكتبات المشتركة المرتبطة بهذه العملية.
$ ميمستات -ص
الأداة المساعدة nmon هي أداة قياس أداء النظام المستندة إلى ncurses والتي تراقب وحدة المعالجة المركزية والذاكرة وإدخال/إخراج القرص والنواة ونظام الملفات ومصادر الشبكة بشكل تفاعلي. استنادًا إلى استخدام الذاكرة، يمكنه عرض معلومات مثل الذاكرة الإجمالية/الفارغة، ومساحة المبادلة، والذاكرة المخزنة مؤقتًا/المخزنة مؤقتًا، وإحصائيات الذاكرة الافتراضية المحملة/المفرغة، كل ذلك في الوقت الفعلي.
يمكن للأمر ps إظهار استخدام الذاكرة للعمليات الفردية في الوقت الفعلي. تتضمن معلومات استخدام الذاكرة المعروضة %MEM (النسبة المئوية للذاكرة الفعلية المستخدمة)، وVSZ (إجمالي مقدار الذاكرة الافتراضية المستخدمة)، وRSS (إجمالي مقدار الذاكرة الفعلية المستخدمة). يمكنك فرز قائمة العمليات باستخدام خيار "-فرز". على سبيل المثال، للفرز بترتيب RSS تنازلي:
$ ps aux --sort -rss
يسمح لك الأمر smem بقياس استخدام الذاكرة الفعلية لمختلف العمليات والمستخدمين بناءً على المعلومات المتوفرة من /proc. تستخدم هذه الأداة مقياس الحجم المتناسب (PSS) لتقدير الاستخدام بدقة عمليات لينكسحجم الذاكرة الفعال يمكن تصدير تحليل استخدام الذاكرة إلى الرسوم البيانيةعلى شكل أعمدة ومقطعة إلى قطع.
$ sudo smem - اسم الفطيرة -c "pss"
يوفر الأمر العلوي المراقبة العمليات الجاريةفي الوقت الحقيقي إلى جانب إحصائيات مختلفة لعمليات استخدام الموارد. تتضمن المعلومات المتعلقة بالذاكرة %MEM (النسبة المئوية للذاكرة المستخدمة)، وVIRT (إجمالي مقدار الذاكرة الافتراضية المستخدمة)، وSWAP (مقدار الذاكرة الافتراضية المبادلة)، وCODE (مقدار الذاكرة الفعلية المخصصة لتنفيذ التعليمات البرمجية)، وDATA (مقدار الذاكرة الفعلية الذاكرة المخصصة لعدم التنفيذ). - البيانات القابلة للتنفيذ)، RES (إجمالي حجم الذاكرة الفعلية المستخدمة، CODE+DATA) وSHR (حجم الذاكرة التي يحتمل مشاركتها مع العمليات الأخرى). يمكنك فرز قائمة العمليات بناءً على استخدام الذاكرة أو حجمها.
تعرض الأداة المساعدة لسطر الأوامر vmstat إحصائيات فورية ومتوسطة لمختلف أنشطة النظام، بما في ذلك وحدة المعالجة المركزية والذاكرة والمقاطعات وإدخال/إخراج القرص. كمصدر لمعلومات الذاكرة، لا يعرض هذا الأمر فقط استخدام الذاكرة الفعلية (على سبيل المثال، الذاكرة الإجمالية/المستخدمة والمخزن المؤقت للذاكرة/ذاكرة التخزين المؤقت)، ولكن أيضًا إحصائيات الذاكرة الظاهرية (على سبيل المثال، الصفحات المحملة/الذاكرة المقسمة إلى صفحات، المقسمة إلى صفحات/المحملة).
تعرض الأداة المساعدة لسطر الأوامر vmstat إحصائيات فورية ومتوسطة لأنشطة النظام المختلفة التي تغطي وحدة المعالجة المركزية والذاكرة والمقاطعات والقرصالإدخال/الإخراج. أما بالنسبة لمعلومات الذاكرة، فإن الأمر لا يعرض فقط استخدام الذاكرة الفعلية (على سبيل المثال، إجمالي الذاكرة/الذاكرة المستخدمة والذاكرة المؤقتة/ذاكرة التخزين المؤقت)، ولكن أيضًا إحصائيات الذاكرة الافتراضية (على سبيل المثال، الذاكرة المقسمة إلى صفحات داخل/خارج، والمبدلة داخل/خارج).
$ فمستات-س
مسح ذاكرة التخزين المؤقت للصفحة:
#مزامنة؛ صدى 1 > /proc/sys/vm/drop_caches
تنظيف inode و dentrie:
#مزامنة؛ صدى 2 > /proc/sys/vm/drop_caches
تنظيف inode و dentrie و PageCache:
#مزامنة؛ صدى 3 > /proc/sys/vm/drop_caches
قبل تشغيل أي من هذه الأوامر، قم بتشغيل:
$سو -
يعد ذلك ضروريًا لأن كل أمر يتطلب حقوق المستخدم المتميز للعمل. الآن دعونا نلقي نظرة على ما يحدث عند تنفيذ هذه الأوامر.
جدوى مزامنةيؤدي إلى قيام النظام بكتابة جميع البيانات المخزنة مؤقتًا ولكن لم تتم كتابتها بعد على القرص. وهذا ضروري لتحرير أكبر قدر ممكن المزيد من الذاكرة. افتراضيًا، لا يتم حذف البيانات من ذاكرة التخزين المؤقت بعد كتابتها على القرص؛ وهذا ضروري حتى يتمكن البرنامج من قراءتها بشكل أسرع إذا لزم الأمر.
إذا لم يتم تنفيذ الأمر مزامنةسنقوم أيضًا بتحرير بعض المساحة، ولكن بعد القيام بذلك ستكون النتيجة أفضل.
رمز القسمة يخبر الصدفة بالانتظار حتى يكتمل الأمر الأول قبل تنفيذ أمر آخر. الأمر الأخير صدى 1 > /proc/sys/vm/drop_cachesيكتب القيمة 1 إلى الملف /proc/sys/vm/drop_caches. يشير هذا إلى النواة بأننا بحاجة إلى مسح نوع ذاكرة التخزين المؤقت التي اخترناها.
PageCache أو ذاكرة التخزين المؤقت للصفحة هي المكان الذي تضع فيه النواة جميع البيانات التي كتبتها أو قرأتها من القرص. يؤدي هذا إلى تسريع النظام بشكل كبير، لأنه إذا احتاج البرنامج إلى نفس البيانات للمرة الثانية، فسيتم أخذها ببساطة من ذاكرة الوصول العشوائي (RAM). ولكن لهذا السبب، تشغل ذاكرة التخزين المؤقت هذه المساحة الأكبر.
يمكنك عرض حجم ذاكرة التخزين المؤقت للصفحة باستخدام الأداة المساعدة المجانية. يظهر هنا في العمود الأخير - مخبأ:
$ مجانا -ح
يعد هذا النوع من ذاكرة التخزين المؤقت هو الأكثر كفاءة وأمانًا للمسح.
تنتمي ذاكرة التخزين المؤقت inode و dentrie أيضًا إلى نظام الملفات. فقط ليست البيانات نفسها مكتوبة عليها، ولكن بنية نظام الملفات، وموقع الملفات والمجلدات. عندما يُطلب منك تحديد موقع الملف أو محتويات المجلد، تقوم النواة بإنشاء هياكل خاصة تحتوي على كل هذه المعلومات. في المرة التالية التي يتم فيها تقديم الطلب، سيتم بالفعل تخزين الهياكل في الذاكرة. يحتوي كل نظام ملفات على ذاكرة تخزين مؤقت خاصة به وذاكرة تخزين مؤقت مشتركة.
تشغل ذاكرة التخزين المؤقت هذه القليل جدًا من الذاكرة. يتم تقديم البيانات بالبايت، وكما ترون، فهي صغيرة جدًا. يمكنك مشاهدته باستخدام الأمر:
$ القط /proc/slabinfo | egrep dentry\|inode
لا يُنصح بمسحها لتحرير ذاكرة Linux، حيث يتم استهلاك القليل من الذاكرة، ويستغرق الفحص الجديد لنظام الملفات وقتًا طويلاً نسبيًا.
هل أحتاج إلى مسح ذاكرة التخزين المؤقت على الإطلاق؟
أولاً، إذا كان هناك قدر كبير من الذاكرة المستخدمة، فقد ترغب في مسح ذاكرة التخزين المؤقت للصفحة، خاصة إذا كانت ذاكرة التخزين المؤقت للصفحة هي التي تستهلك قدرًا كبيرًا من الذاكرة. ثانيًا، قد تحتاج إلى مسح ذاكرة التخزين المؤقت لذاكرة Linux إذا قمت بتغيير أي نظام ملفات أو إعدادات kernel، وتريد الآن التحقق من مدى تأثير ذلك على سرعة عمليات القراءة/الكتابة. في هذه الحالة، يمكنك مسح كافة ذاكرة التخزين المؤقت والقيام بذلك دون إعادة التشغيل، وهو أمر مريح للغاية.
غرفة العمليات نظام لينكستم تصميمه بحيث يتم عرض ذاكرة التخزين المؤقت للقرص قبل الوصول إلى القرص، وإذا كانت البيانات الضرورية موجودة، فلن يكون هناك إمكانية الوصول إلى القرص. إذا قمت بمسح ذاكرة التخزين المؤقت لنظام Linux بعد ذلك نظام التشغيلسيكون أبطأ قليلاً لأنه سيتعين عليه البحث عن البيانات الموجودة على القرص.
أولاً، لنقم بإنشاء برنامج نصي bash بالمحتوى التالي:
$ sudo vi /usr/local/bin/clearcache.sh
#!/bin/bash sync ; صدى 1 > /proc/sys/vm/drop_caches
سنقوم فقط بمسح ذاكرة التخزين المؤقت للصفحة، لأنها تستهلك معظم المساحة. لن نتطرق إلى الأنواع الأخرى، حتى لا نقلل من أداء النظام بلا داع.
بعد ذلك، اجعل البرنامج النصي قابلاً للتنفيذ:
$ sudo chmod 755 /usr/local/bin/clearcache.sh
كل ما تبقى هو إضافة المهمة إلى برنامج جدولة cron. للقيام بذلك، قم بتشغيل الأمر:
$ سودو كرونتاب -e
وفي المحرر الذي يفتح، أضف السطر:
0 2 * * * /usr/local/bin/clearcache.sh
الآن سيتم تشغيل هذا البرنامج النصي كل ليلة وتنظيف الذاكرة حتى يتمكن الخادم من العمل بشكل طبيعي.
الملف هو المسؤول عن هذا. يحتوي على مقياس نسبي لمدى قوة إزالة الصفحات من ذاكرة التخزين المؤقت. افتراضيًا، يتم تعيين المعلمة على 100. إذا قمت بتقليلها، ستحذف النواة الصفحات بشكل أقل وسيؤدي ذلك إلى زيادة سريعة جدًا في ذاكرة التخزين المؤقت. إذا تم التعيين على صفر، فلن يتم حذف الصفحات على الإطلاق. إذا كانت القيمة أكبر من 100، فسينمو حجم ذاكرة التخزين المؤقت بشكل أبطأ وستتم إزالة الصفحات غير المستخدمة على الفور.
على سبيل المثال، لنجعل الحد الأدنى لحجم ذاكرة التخزين المؤقت:
# صدى 1000 > /proc/sys/vm/vfs_cache_pressure
لا تنس أن هذا سوف يقلل بشكل كبير من أداء نظامك لأنه سيتم قراءة البيانات من القرص بدلاً من ذاكرة التخزين المؤقت.