فجأة لا يمكن الوصول إليها ؟ Alibaba Cloud ECS CPU تشغيل كامل (100 ٪) استكشاف وتحسين البرنامج التعليمي

سحابة 2026-05-28 阅读 12
1

كان الموقع على ما يرام خلال النهار ، وفجأة عالق في المساء ، واستمر المتصفح في الدوران ، وأخيراً أبلغ عن "504 Gateway Timeout" أو "غير قادر على الاتصال".

لقد فوجئت ، وسرعان ما اتصلت بوحدة تحكم Alibaba Cloud وإلقاء نظرة على مراقبة مثيلات ECS:

تم تحميل وحدة المعالجة المركزية بالكامل وسحب خط أحمر 100 ٪.

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

التحقيق في بيئة الإنتاج عبر الإنترنت وتحسين اللوائح العسكرية

، اتبع الخطوات واخرج من وراء الكواليس في 5 دقائق.

أفكار التحقيق الأساسية: طريقة تحديد المواقع من ثلاث خطوات

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

انظر إلى الكل: ما هي العملية (Nginx أو PHP أو Java أو حصان طروادة) التي ابتلعت الموارد ؟

انظر إلى الأجزاء: أي جزء من الكود ، أي مؤشر ترابط ، أو أي SQL في هذه العملية هو الخمول المجنون ؟

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

الخطوة الأولى: تسجيل الدخول إلى الخادم ، وتحديد عملية المشكلة (دقيقة واحدة)

بغض النظر عن شكل بطاقة موقع الويب ، طالما أن SSH لا يزال متصلاً ، يمكنك الاتصال به على الفور. إذا كان SSH المحلي عالقًا ، فلا يمكن الاتصال به ، مباشرة من خلال Alibabi Cloud Console

$ \ Rightarrow $

مثال ECS

$ \ Rightarrow $

تسجيل الدخول القسري عن بعد (Workbench).

أدخل الأمر التالي ، وهو الأداة النهائية لفحص أداء Linux:

باش

Top

أدخل

Top

بعد الواجهة ، اضغط على الأحرف الكبيرة

بي

(مرتبة حسب استخدام وحدة المعالجة المركزية). سترى قائمة ديناميكية مماثلة أدناه:

نص عادي

PID USER PR NI VIRT RES SHR ٪ CPU % MEM TIME + COMMAND

12345 nginx 20 0 354m 45m 12m R 98.5 2.3 12:34.56 php-fpm

6789 mysql 20 0 2.5g 1.2g 24m S 1.5 60.2 45:12.89 mysqld

تحليل النتائج:

انظر إلى الصف الأول

COMMAND

ما هو:

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

إذا كانت mysqld: فهذا يعني أن قاعدة البيانات قد عانت من استعلام بطيء أو فهرس مفقود أو قفل مرتفع.

إذا كان nginx أو http:: كبير

الاحتمال هو أنك واجهت كمية من الفرشاة الخبيثة أو هجوم CC أو الزحف المجنون.

إذا كانت الحروف الهجائية (مثل kdevtmpfsi ، miner): لا تفكر في ذلك ، فقد تم اختراق الخادم وتم القبض عليه كعامل منجم.

الخطوة الثانية: عمق مشهد التقسيم ، التخلص الدقيق من القنابل (3 دقائق)

وفقا لك في

أعلى

النتيجة التي نراها ، حدد مسار الحل التالي للحصول على مقعد.

المشهد A:Command هو

Mysqld

(قاعدة البيانات عالقة)

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

1. قم بتسجيل الدخول إلى قاعدة البيانات لعرض SQL التي يتم تنفيذها حاليًا

تسجيل الدخول إلى MySQL الخاص بك في المحطة الطرفية:

SQL

Mysql-u root -p

-- التنفيذ بعد تسجيل الدخول

SHOW PROCESSLIST;

إذا كانت قائمة التلميحات طويلة جدًا بحيث لا يتم عرضها بالكامل ، يمكنك استخدام:

SQL

SHOW FULL PROCESSLIST;

2. امسك الشبح الداخلي

في قائمة المخرجات ، لاحظ

الوقت

(وقت التنفيذ) طويل ، و

الدولة

الصريح هو

Sending data

،

Sorting for group

أو

Creating tmp table

هذا الخط. انظر إليها

إنفو

ما هي عبارة SQL مكتوبة في العمود.

التحوط في حالات الطوارئ: انظر إلى SQL البطيئة التي تجعل الناس يتقيئون الدم ، وتذكر Id ، وتشغيل KILL Id مباشرة ؛ (على سبيل المثال ، KILL 142 ؛) ، قم أولاً بتحرير قاعدة البيانات ، ويمكن لموقع الويب استئناف الوصول على الفور.

الحل الجذري: خذ هذا SQL واذهب إلى الكود للعثور على السبب ، وأضف فهرس بسرعة الحقول بعد WHERE أو JOIN ؛ إذا كان ارتباط جدول كبير ، ففكر في إضافة ذاكرة التخزين المؤقت Redis.

المشهد ب: Command هو

Java

(الحلقة الميتة الداخلية للبرنامج/OOM)

ترتفع وحدة المعالجة المركزية لتطبيقات Java ، وعادة ما يقع مؤشر ترابط معين

While (true)

الدورة الميتة ، أو إعادة تدوير القمامة بشكل متكرر (Full GC).

1. تعرف على الخيط الذي يستهلك أكثر وحدة المعالجة المركزية

لنفترض أن عملية Java PID هي

12345

. أدخل الأمر لمعرفة مؤشرات الترابط التي تستهلك الموارد أكثر ضمن هذه العملية:

باش

Top-Hp 12345

اضغط

بي

الفرز ، إذا تم التقاط PID الخيط الأكثر استهلاكًا لوحدة المعالجة المركزية

12366

.

2. تحويل النظام

سوف الخيط PID

12366

تحويل إلى سداسي عشري:

باش

Printf "% x \ n" 12366

# نتائج الإخراج: 304e

3. طباعة معلومات المكدس

استخدام JDK يأتي مع

Jstack

أداة ، مباشرة إلى سطر التعليمات البرمجية المشكلة:

باش

Jstack 12345 | grep "304e" -A 20

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

المشهد C:Command هو

Nginx

/

Php-fpm

(واجه حجم الفرشاة الخبيثة/هجوم CC)

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

1. إحصائيات IP الأكثر زيارة في الآونة الأخيرة

باش

# افترض أن سجل Nginx الخاص بك في/var/log/nginx/. log

Awk '{print $1}' /var/log/nginx/plate. log | sort | uniq -c | sort -nr | head -n 20

إذا وجدت أن IP غير مألوف قد تم تنظيفه عشرات الآلاف من المرات في بضع دقائق ، فلا شك في أنك تم استهدافك.

2-حظر الملكية الفكرية في حالات الطوارئ

استخدم مباشرة جدار الحماية الخاص بنظام Linux أو مجموعة أمان Alibaba Cloud لركل عنوان IP هذا في القائمة السوداء:

باش

# حظر استخدام iptables

Iptables-I INPUT -s عناوين IP الضارة-j DROP

إذا كنت تستخدم Alibaba Cloud ، فاذهب مباشرة إلى "قاعدة مجموعة الأمان" الخاصة بـ ECS وأضف قاعدة رفض (Drop) في الاتجاه.

المشهد D: عملية غير مألوفة بشكل غير متوقع (يصبح الخادم دجاج التسمين/التعدين)

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

اتبع الكروم: استخدم ls -l /proc/عملية PID/exe لعرض مكان اختباء هذا البرنامج الضار.

إزالة الجذور: Bashkill -9 عملية PID # قتل العملية بالقوة rm -rf مسار البرنامج الضار # حذف ملف الفيروس

تحقق من الباب الخلفي: غالبًا ما يكتب المتسللون مهام موقوتة. أدخل crontab -l لمعرفة ما إذا كان هناك برنامج نصي مؤقت لتنزيل الفيروس تلقائيًا ، وإذا كان هناك ، فسيتم حذفه باستخدام crontab -e.

الوقاية النهائية: كيف تتجنب الخط الأحمر الطويل في المرة القادمة ؟

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

استخدم Alibaba Cloud "Cloud Monitor" لتكوين إنذار ، لا تنتظر عدم فتح ملاحظات المستخدم قبل التحقيق. في مراقبة علي يونيون ، تم وضع قاعدة: "عندما يكون معدل استخدام وحدة المعالجة المركزية ECS أكبر من 85 ٪ لمدة 5 دقائق ، أرسل رسالة نصية/إنذار على الفور". تدخلت عندما كانت هناك علامات.

تكوين أكبر عملية عمل PHP-FPM / Nginx

إذا كان الخادم عبارة عن 4G 2 نواة ، فسيتم تقييد max_children في php-fpm.conf بحوالي 30-40. بهذه الطريقة ، حتى لو انفجرت حركة المرور ، فإن بعض المستخدمين فقط يطالبون 502 بأن الطبقة السفلية للخادم لن تكون متصلة بـ SSH بسبب ضغط الذاكرة ووحدة المعالجة المركزية تمامًا.

الاستخدام المعقول لـ "التلسكوبية المرنة" إذا كان موقع الويب الخاص بك أو تطبيقك يشارك بالفعل في الأنشطة ، أو لأن البحث الساخن قد أدى إلى "تدفق حركة المرور" الحقيقي ، فلا فائدة من تحسين جهاز واحد. اسرع إلى Alibian لفتح التلسعة المرنة (ESS) ، قم بتكوين قاعدة: عندما تتجاوز وحدة المعالجة المركزية 80 ٪ ، ستساعدك تلقائيًا على استنساخ وسحب ECS الثاني والثالث وفقًا للفوترة الكمية لمشاركة حركة المرور ، وإطلاقها تلقائيًا بعد انتهاء النشاط. استخدم الفائدة المركبة التقنية لمحاربة عدم ثبات حركة المرور.

cloud
← 返回新闻中心