المقدمة
يصف هذا المستند التحقيق في تنبيه الحمل العالي والحلول البديلة الموصى بها في مجموعة سياسات Cisco (CPS).
المتطلبات الأساسية
المتطلبات
توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:
cisco أيضا يوصي أن يتلقى أنت امتياز جذر وصول إلى CPS CLI.
المكونات المستخدمة
تستند المعلومات الواردة في هذا المستند إلى CPS 19.4
تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.
معلومات أساسية
يمثل "متوسط الحمولة" متوسط حمل النظام على خادم Linux لفترة زمنية محددة. وبمعنى آخر، فإن طلب وحدة المعالجة المركزية (CPU) الخاص بخادم يتضمن مجموع مؤشرات الترابط النشطة والخاملة.
يعتبر قياس معدل التحميل أمرا بالغ الأهمية لفهم كيفية أداء الخوادم؛ فإذا كان التحميل الزائد، يجب عليك التخلص من العمليات التي تستهلك كميات كبيرة من الموارد أو تحسين أدائها، أو توفير المزيد من الموارد لموازنة حمل العمل.
نموذجيا، يوفر الأمر top أو uptime متوسط حمل الخادم مع مخرجات تبدو مثل:
[root@cps-194-aio-mob ~]# uptime
11:41:08 up 6 days, 5:20, 2 users, load average: 0.71, 0.35, 0.24
[root@cps-194-aio-mob ~]#
[root@cps-194-aio-mob ~]# top
top - 12:17:26 up 6 days, 5:56, 2 users, load average: 0.09, 0.12, 0.13
Tasks: 185 total, 1 running, 183 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.8 us, 0.8 sy, 0.0 ni, 98.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 12137348 total, 4128956 free, 5219860 used, 2788532 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 6586848 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7070 root 5 -15 8263680 1.3g 21728 S 12.5 11.6 561:38.74 java
1 root 20 0 191384 4320 2620 S 0.0 0.0 3:11.17 systemd
هذه الأرقام هي متوسط حمل النظام خلال فترة تبلغ دقيقة واحدة وخمس دقائق و 15 دقيقة.
قبل أن تتحرك إلى أبعد من ذلك، دعنا نفهم العبارتين المهمتين في كل الأنظمة الشبيهة بنظام Unix:
حمل النظام/حمل وحدة المعالجة المركزية - هو قياس تجاوز إستخدام وحدة المعالجة المركزية (CPU) أو نقصه في نظام لينوكس، وعدد العمليات التي يتم تنفيذها بواسطة وحدة المعالجة المركزية (CPU) أو في حالة الخمول.
متوسط الحمولة - هو متوسط حمل النظام الذي يتم حسابه خلال فترة زمنية معينة تبلغ 1 و 5 و 15 دقيقة.
المشكلة
كلما تجاوز متوسط حمل الجهاز الظاهري CPS الحد المحدد، يتم إنشاء HighLoadAlert. يتم تحديد قيمة الحد لتنبيه HighLoad على أنها 1.5*لا توجد وحدات معالجة مركزية (CPU) في VM. يتم توفير هذا التكوين في /etc/snmp/snmpd.conf:
load 12 12 12
# 1, 5 and 15 Minute Load Averages (UCD-SNMP-MIB la)
proxy -v 2c -c broadhop localhost .1.3.6.1.4.1.26878.200.3.2.70.1.4 .1.3.6.1.4.1.2021.10.1.5.1
proxy -v 2c -c broadhop localhost .1.3.6.1.4.1.26878.200.3.2.70.1.5 .1.3.6.1.4.1.2021.10.1.5.2
proxy -v 2c -c broadhop localhost .1.3.6.1.4.1.26878.200.3.2.70.1.6 .1.3.6.1.4.1.2021.10.1.5.3
proxy -v 2c -c broadhop localhost .1.3.6.1.4.1.26878.200.3.2.70.1.4.0 .1.3.6.1.4.1.2021.10.1.5.1
proxy -v 2c -c broadhop localhost .1.3.6.1.4.1.26878.200.3.2.70.1.5.0 .1.3.6.1.4.1.2021.10.1.5.2
proxy -v 2c -c broadhop localhost .1.3.6.1.4.1.26878.200.3.2.70.1.6.0 .1.3.6.1.4.1.2021.10.1.5.3
نموذج تنبيه الحمل العالي:
2021-10-31T14:25:36.572711+05:30 XXXXX-lb01 snmptrapd[5717]: 2021-10-31 14:25:36 pcrfclient01 [UDP: [XX.XX.XX.XX]:46046->[XX.XX.XX.XX]:162]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = 99307800#011SNMPv2-MIB::snmpTrapOID.0 = OID: DISMAN-EVENT-MIB::mteTriggerFired#011DISMAN-EVENT-MIB::mteHotTrigger.0 = STRING: HighLoadAlert#011DISMAN-EVENT-MIB::mteHotTargetName.0 = STRING: #011DISMAN-EVENT-MIB::mteHotContextName.0 = STRING: #011DISMAN-EVENT-MIB::mteHotOID.0 = OID: UCD-SNMP-MIB::laErrorFlag.1#011DISMAN-EVENT-MIB::mteHotValue.0 = INTEGER: 1#011UCD-SNMP-MIB::laNames.1 = STRING: Load-1#011UCD-SNMP-MIB::laErrMessage.1 = STRING: 1 min Load Average too high (= 64.84)
أستكشاف أخطاء HighLoad وإصلاحها
قبل إجراء المزيد من التحقيقات، تأكد من أن الأجهزة الافتراضية المتأثرة يتوفر لديها عدد وحدات المعالجة المركزية (CPU) وفقا للمعايير. ويمكن القيام بذلك باستخدام دليل تثبيت CPS الخاص حيث يشير إلى عدد وحدات المعالجة المركزية (CPU) المطلوب لكل جهاز افتراضي (VM).
إن أمر لينوكس الوحيد الذي يوفر مجتمعا متوسط الحمولة واستخدام وحدة المعالجة المركزية (CPU) حسب العمليات هو الأمر العلوي. لتحديد العملية التي تتسبب في HighLoad، يجب تنفيذ الأمر top في VM المتأثر على فترات زمنية منتظمة لمدة معينة تغطي مثيل HighLoad. يوفر هذا الأمر مخرجات عليا لكل 3 ثواني، ل 15000 عدد من المرات (يمكنك تغيير الرقم طبقا لسيناريو):
#top -b -n15000 >> top.txt &
[root@cps-194-aio-mob ~]# top
top - 09:32:11 up 7 days, 3:11, 3 users, load average: 0.13, 0.16, 0.15
Tasks: 184 total, 1 running, 182 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.8 us, 0.8 sy, 0.0 ni, 98.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 12137348 total, 3911352 free, 5262096 used, 2963900 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 6520076 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7014 redis 20 0 147356 2372 1184 S 6.7 0.0 48:15.15 redis-server
7070 root 5 -15 8263688 1.4g 21744 S 6.7 11.8 645:12.88 java
1 root 20 0 191384 4320 2620 S 0.0 0.0 3:38.65 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.12 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:04.51 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:01.76 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 11:53.47 rcu_sched
قم بالترابط الوثيق بين مثيل HighLoadAlert ومقارنة مخرج الأمر top، وحدد العملية التي يتم إستخدامها بشكل كبير لوحدة المعالجة المركزية (CPU) في وقت التنبيه.
ثم لتجميع المزيد من المعلومات حول تلك العملية، قم بتشغيل هذا الأمر:
Command Template:
#ps -ef | grep {PID}
Sample command:
[root@cps-194-aio-mob ~]# ps -ef | grep 7070
root 7070 1 6 Dec02 ? 12:17:06 /usr/bin/java -server -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -Xms2048m -Xmx2048m -javaagent:/opt/broadhop/qns-1/bin/jmxagent.jar -Dqns.config.dir=/etc/broadhop/pcrf -Dqns.instancenum=1 -Dlogback.configurationFile=/etc/broadhop/logback.xml -Djmx.port=9045 -Dorg.osgi.service.http.port=8080 -Dsnmp.port=1161 -Dcom.broadhop.run.systemId=lab -Dcom.broadhop.run.clusterId=cluster-1 -Dcom.broadhop.run.instanceId=cps-194-aio-mob-1 -Dcom.broadhop.config.url=http://pcrfclient01/repos/run/ -Dcom.broadhop.repository.credentials.isEncrypted=true -Dcom.broadhop.repository.credentials=qns-svn/3300901EA069E81CE29D4F77DE3C85FA@pcrfclient01 -Dcom.broadhop.referencedata.local.location=/var/broadhop/checkout -DdisableJms -DrefreshOnChange=true -DenableRuntimePolling=true -DdefaultNasIp=127.0.0.1 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 -Dua.version.2.0.compatible=true -Denable.compression=true -Denable.dictionary.compression=true -DuseZlibCompression=true -DenableBestCompression=true -DenableQueueSystem=false -Dredis.keystore.connection.string=lb01:lb01:6379:6379 -DbrokerUrl=failover:(tcp://lb01:61616,tcp://lb02:61616)?randomize=false -DjmsFlowControlHost=lb02 -DjmsFlowControlPort=9045 -Dosgi.framework.activeThreadType=normal -jar /opt/broadhop/qns-1/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -console cps-194-aio-mob:9091 -clean -os linux -ws gtk -arch x86_64
root 7846 7587 0 11:00 pts/0 00:00:00 grep --color=auto 7070
[root@cps-194-aio-mob ~]#
الحل
بمجرد تحديد العملية التي تتسبب في HighLoadAlert، يمكن إعتبار هذه الحلول البديلة:
الخطوة 1. قم بإعادة تشغيل العملية.
#monit stop {Process Name}
Wait for 10 secs
#monit start {Process Name}
الخطوة 2. إذا كانت العملية تتضمن تسجيل الخروج، فتحقق من أي مسجل بمستوى سجل تصحيح الأخطاء وقم بتغيير مستوى السجل للمشغلات من تصحيح الأخطاء للتحذير/الخطأ.
الخطوة 3. إذا كانت الخطوة 1. والخطوة 2. لا تعمل، فعليك بضبط ملف التكوين الخاص، بمساعدة فريق التطوير إذا لزم الأمر.