สาเหตุของการโหลด CPU สูงในเอ็นจิ้นเราติ้งของเราเตอร์


20

เมื่อเร็ว ๆ นี้การใช้ CPU ของเอ็นจิ้นการกำหนดเส้นทางบนเราเตอร์ peering เราเตอร์สองก้อนของ Juniper เพิ่มขึ้นจากโหลดเฉลี่ย ~ 10-20% เป็น 80 +% ฉันพยายามหาสาเหตุที่ทำให้เกิดปัญหานี้ (และวิธีที่จะทำให้โหลดสูงกลับมา)

ข้อมูลบางอย่างเกี่ยวกับเราเตอร์: ทั้งคู่เรียกใช้ JunOS รุ่นเดียวกันโดยทั้งคู่เชื่อมต่อกับ IXP LAN สองเครื่องเดียวกันและมีจำนวนมาก (หลายร้อย) เซสชัน (เหมือนกันเกือบ) IPv4 และ IPv6 เราเตอร์ทั้งสองมีการเชื่อมต่อกับผู้ให้บริการขนส่ง IP ที่แตกต่างกันและเชื่อมต่อในลักษณะเดียวกันกับเครือข่ายที่เหลือของเรา โหลด CPU ของเอ็นจิ้นการจัดเส้นทางไม่ได้อยู่ในแนวเดียวกับ 80 +% มีการลดลงกลับสู่ระดับปกติเป็นเวลาหลายนาทีถึงหลายชั่วโมง แต่การลดลงเหล่านี้ไม่บ่อยนัก

สิ่งที่ฉันได้ตรวจสอบ:

  • ไม่มีการเปลี่ยนแปลงการกำหนดค่าในขณะที่เริ่มเพิ่มขึ้น
  • ไม่มีการรับส่งข้อมูลแบบ non-unicast เพิ่มขึ้นที่ระนาบการควบคุม
  • ไม่มีการเปลี่ยนแปลงปริมาณการรับส่งข้อมูล (แม้ว่าจะเพิ่มขึ้น แต่ไม่ควรสำคัญ)
  • show system processes summaryบ่งชี้ว่าrpdกระบวนการทำให้เกิด CPU โหลดสูง
  • ไม่มีเพื่อนฝูง BGP กระพืออย่างรวดเร็วทำให้เกิดการเปลี่ยนแปลง BGP จำนวนมาก

คำอธิบายที่เป็นไปได้ข้อหนึ่งที่ฉันสามารถทำได้คือเพียร์ (หรือมากกว่าหนึ่ง) ในหนึ่งใน IXP ของเราเตอร์ทั้งสองเชื่อมต่อกับการส่งการอัปเดต BGP จำนวนมาก ขณะนี้ฉันมีสถิติเกี่ยวกับจำนวนข้อความ BGP สำหรับเซสชันการขนส่งของฉันเท่านั้น (แสดงไม่มีกิจกรรมที่ผิดปกติ) และด้วยเซสชัน BGP หลายร้อยรายการบน LAN แบบเพียร์นิ่งมันไม่ง่ายเลยที่จะมองเห็นเซสชั่นที่มีปัญหาได้ ทุกช่วง

คำถามของฉันคือ:

  • มีสิ่งอื่นใดอีกบ้างที่ฉันควรตรวจสอบเพื่อค้นหาสาเหตุของการเพิ่มขึ้นของโหลด CPU ในเอ็นจิ้นการกำหนดเส้นทาง
  • ฉันจะทราบได้อย่างง่ายดายว่าเซสชันใดที่ทำให้เกิดปัญหาเหล่านี้ (ถ้าข้อสันนิษฐานของฉันถูกต้อง) การเปิดใช้งานการติดตาม BGP สร้างข้อมูลจำนวนมาก แต่ฉันไม่แน่ใจว่าจะให้ข้อมูลเชิงลึกจริง ๆ หรือไม่

คำตอบ:


17

อาจจะมีบางข้อมูลที่เป็นประโยชน์สำหรับคุณที่ศูนย์การเรียนรู้ของจูนิเปอร์

หาก RPD ใช้งาน CPU สูงให้ดำเนินการตรวจสอบและตรวจสอบพารามิเตอร์ต่อไปนี้:

  • ตรวจสอบอินเทอร์เฟซ: ตรวจสอบว่าอินเทอร์เฟซใด ๆ กระพือบนเราเตอร์ สิ่งนี้สามารถตรวจสอบได้โดยดูที่ผลลัพธ์ของข้อความบันทึกการแสดงและแสดงคำสั่งอย่างละเอียด ge-x / y / z แก้ปัญหาว่าทำไมพวกเขาถึงกระพือ หากเป็นไปได้คุณสามารถพิจารณาเปิดใช้งานการระงับเวลาสำหรับลิงก์ขึ้นและลิงก์ลง

  • ตรวจสอบว่ามีข้อความข้อผิดพลาด syslog ที่เกี่ยวข้องกับอินเทอร์เฟซหรือ FPC / PIC ใด ๆ โดยดูที่ผลลัพธ์ของข้อความบันทึกการแสดง

  • ตรวจสอบเส้นทาง: ตรวจสอบจำนวนเส้นทางทั้งหมดที่เราเตอร์เรียนรู้โดยดูที่ผลลัพธ์ของการแสดงสรุปเส้นทาง ตรวจสอบว่าถึงขีด จำกัด สูงสุดหรือไม่

  • ตรวจสอบงาน RPD: ระบุสิ่งที่ทำให้กระบวนการไม่ว่าง สิ่งนี้สามารถตรวจสอบได้โดยการเปิดใช้งานการบัญชีงานชุด สำคัญ: ตัวมันเองอาจเพิ่มโหลดบน CPU และการใช้ประโยชน์ ดังนั้นอย่าลืมที่จะปิดเมื่อคุณทำกับคอลเลกชันเอาท์พุทที่ต้องการ จากนั้นรันการแสดงภารกิจบัญชีและค้นหาเธรดที่มีเวลา CPU สูง:

    user@router> show task accounting
    Task                       Started    User Time  System Time  Longest Run
    Scheduler                   146051        1.085        0.090        0.000
    Memory                           1        0.000            0        0.000  <omit>
    BGP.128.0.0.4+179              268       13.975        0.087        0.328
    BGP.0.0.0.0+179      18375163 1w5d 23:16:57.823    48:52.877        0.142
    BGP RT Background              134        8.826        0.023        0.099
    

ค้นหาสาเหตุที่เธรดซึ่งเกี่ยวข้องกับคำนำหน้าเฉพาะหรือโปรโตคอลกำลังใช้ CPU สูง

  • นอกจากนี้คุณยังสามารถตรวจสอบว่าเส้นทางกำลังสั่น (หรือปั่นเส้นทาง) โดยดูที่ผลลัพธ์ของคำสั่งเชลล์: %rtsockmon –t

  • ตรวจสอบหน่วยความจำ RPD บางครั้งการใช้หน่วยความจำสูงอาจทำให้ CPU สูงโดยทางอ้อม


1
RPD เป็นกล่องดำที่น่ารำคาญเล็กน้อย ด้านบนของคำแนะนำที่ดี rtsockmon -t และแสดงบัญชีงานฉันยังต้องการเพิ่ม 'คิวคิวแสดง' เป็นเครื่องมือที่มีประโยชน์
ytti

แสดงคิว krt จะแสดงให้คุณเห็นการปรับปรุงเส้นทางใด ๆ ที่เกิดขึ้นในรูปแบบการควบคุมไปยังระนาบข้อมูล คุณไม่ควรเห็นอะไรเลยรอเกือบตลอดเวลา เมื่อแผ่นพับเกิดขึ้นสิ่งนี้สามารถอยู่ในคิวได้เป็นระยะเวลาหนึ่ง
mellowd

เนื่องจาก PR836197 อาจเป็นจริงในเวลา :(
ytti

จุดสองจุดเหล่านี้ชัดเจนเกินไปที่จะกล่าวถึง (อินเทอร์เฟซการสลับข้อผิดพลาดในบันทึก) แต่คำแนะนำ rtsockmon และการบัญชีงานนั้นเฉียบแหลม ดูเหมือนว่าวงจร CPU จำนวนมากถูกใช้สำหรับ SNMP ดังนั้นขั้นตอนต่อไปคือการหาว่ากล่องและเครื่องมือใดบ้างที่ทำการสำรวจเราเตอร์เหล่านี้
Teun Vink

1
ขออภัยหากพวกเขาชัดเจนเกินไปฉันมาจากพื้นหลังการสนับสนุนที่ให้ผู้ใช้ตรวจสอบว่าการเสียบปลั๊กนั้นยุ่งยากหรือไม่!
Artanix

2

ฉันรู้ว่าหัวข้อนี้เก่า แต่เพื่อความสมบูรณ์:

หาก CPU สูงเกิดขึ้นแบบสุ่มและคุณไม่สามารถระบุกระบวนการที่ทำให้เกิดสิ่งนี้เราสามารถสร้างสคริปต์ด้านล่าง

ด้วยสคริปต์นี้เราจะจับกระบวนการอย่างกว้างขวางเมื่อกระบวนการเพิ่มมากกว่าเกณฑ์ปกติหรือที่คาดไว้สิ่งนี้ไม่ควรรบกวนการรับส่งข้อมูลใด ๆ แต่ยังแนะนำให้ใช้ MW อย่างไรก็ตามฉันเห็นว่าคุณได้ จำกัด ให้เป็น RPD

snmp {
    health-monitor {
        interval 30;
        rising-threshold 60;
        falling-threshold 50;
    }
}

event-options {
    policy MONITOR-CPU {
        events snmpd_health_mon_thresh_cross;
        attributes-match {
            snmpd_health_mon_thresh_cross.event-name matches "Health Monitor.+CPU.+rising";
        }
        then {
            execute-commands {
                commands {
                    "show system processes extensive";
                }
                output-filename cpu-processes;
                destination local-flash;
                output-format text;
            }
        }                               
    }
    destinations {
        local-flash {
            archive-sites {
                /var/tmp;
            }
        }
    }
}

DISPLAY SET OUTPUT>

set snmp health-monitor interval 30
set snmp health-monitor rising-threshold 60
set snmp health-monitor falling-threshold 50
set event-options policy MONITOR-CPU events snmpd_health_mon_thresh_cross
set event-options policy MONITOR-CPU attributes-match snmpd_health_mon_thresh_cross.event-name matches "Health Monitor.+CPU.+rising"
set event-options policy MONITOR-CPU then execute-commands commands "show system processes extensive"
set event-options policy MONITOR-CPU then execute-commands output-filename cpu-processes
set event-options policy MONITOR-CPU then execute-commands destination local-flash
set event-options policy MONITOR-CPU then execute-commands output-format text
set event-options destinations local-flash archive-sites /var/tmp

คุณได้ตรวจสอบด้วยหรือไม่หากมีการรายงานข้อความ ddos? คุณสามารถเรียกใช้คำสั่งต่อไปนี้:

show ddos-protection protocols statistics brief
show ddos-protection statistics
show ddos-protection version

จากนั้นขึ้นอยู่กับสิ่งที่คุณเห็นมันสามารถถูก จำกัด ให้แคบลงตัวอย่างเช่น:

show ddos-protection protocols ttl statistics
show ddos-protection protocols ttl violations
show ddos-protection protocols ttl flow-detection detail  */*this cm needs prior config*/*

จูนิเปอร์ยังมีรายการคอลเลกชันสำหรับปัญหาประเภทนี้ภายใต้ KB22637

คำสั่งCPU CLI สูง

set cli timestamp
show chassis routing-engine (multiple snapshots, atleast 5)
show system processes extensive (multiple snapshots atleast 5)
show system users
show system connections
show system statistics

เปิดการบัญชีงานและรวบรวมเอาท์พุทรายละเอียดการบัญชีงาน (สามครั้งด้วยระยะห่าง 30 วินาที) อย่าลืมปิดหลังจากเสร็จสิ้น

set task accounting on 
show task accounting detail
set task accounting off

show task memory detail
show task memeory summary
show task io
show task history
show task statistics
show task job
show task jobs
show krt queue
show krt state

ท่อน

เก็บถาวร / var / log ตามที่ระบุในขั้นตอนที่ 1 ด้านบน Traceoptions

user@router# show routing-options 
traceoptions { 
file routing-trace size 10m files 20 world-readable; 
flag task; 
flag state; 
flag timer; 
}

นอกจากนี้หากคุณใช้เวอร์ชั่นเก่าซึ่งมีแนวโน้มที่จะเกิดข้อบกพร่องคุณอาจต้องการตรวจสอบการสนับสนุนชีวิตของรหัส:

http://www.juniper.net/support/eol/junos.html

อีกจุดที่กล่าวถึงซึ่งอาจเป็นการโจมตีแบบเวกเตอร์ไม่มีการป้องกัน RE ของคุณจากทราฟฟิกที่ไม่ต้องการ ตรวจสอบให้แน่ใจว่าคุณมีตัวกรองไฟร์วอลล์ภายใต้ลูปแบ็ค

ฉันเคยเห็นในสคริปต์ที่ผ่านมาในเราเตอร์ที่ก่อให้เกิดซีพียูสูงไม่แน่ใจว่า rpd เข้ามาในมุมมองของฉัน แต่นี่เป็นสิ่งที่คุณอาจไม่ต้องการมองข้าม

หากคุณเห็นในบันทึกการเข้าชมจำนวนมากด้วย RPD_MPLS_PATH_BANDWIDTH_CHANGE คุณอาจกำลังใช้ช่วงการปรับตัวที่ก้าวร้าวมาก

ตรวจสอบหยดใด ๆ ใน "show system queue: นี่คือเคอร์เนลคิวบางส่วนอาจปรากฏขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.