Penyebab beban CPU yang tinggi pada mesin routing router Juniper peering

20

Baru-baru ini penggunaan mesin routing CPU pada dua router peering Juniper kami meningkat dari ~ 10-20% rata-rata beban menjadi 80 +%. Saya mencoba mencari tahu apa yang menyebabkan ini (dan bagaimana mendapatkan kembali beban tinggi ini).

Beberapa info tentang router: keduanya menjalankan versi JunOS yang sama, keduanya terhubung ke dua LAN IXP peering yang sama dan memiliki sejumlah besar (beberapa ratusan) sesi IPv4 dan IPv6 (hampir identik). Kedua router memiliki koneksi ke penyedia transit IP yang berbeda dan terhubung dengan cara yang sama ke seluruh jaringan kami. Beban CPU engine perutean tidak rata pada 80 +%, ada penurunan kembali ke level normal selama beberapa menit hingga berjam-jam, tetapi penurunan ini tidak sesering itu.

Hal-hal yang telah saya periksa:

  • tidak ada perubahan konfigurasi yang dibuat saat peningkatan dimulai
  • tidak ada peningkatan lalu lintas non-unicast yang diarahkan pada bidang kontrol
  • tidak ada (substansial) perubahan dalam jumlah lalu lintas yang diteruskan (meskipun bahkan peningkatan tidak masalah)
  • show system processes summarymenunjukkan rpdproses menyebabkan beban CPU yang tinggi
  • tidak ada rekan BGP yang mengepak dengan cepat menyebabkan sejumlah besar perubahan BGP

Satu penjelasan yang mungkin saya dapat berikan adalah rekan (atau lebih dari satu) di salah satu IXP kedua router terhubung untuk mengirim sejumlah besar pembaruan BGP. Saat ini saya hanya memiliki statistik tentang jumlah pesan BGP untuk sesi transit saya (tidak menunjukkan aktivitas abnormal) dan dengan beberapa ratus sesi BGP pada LAN mengintip, tidaklah mudah untuk menemukan sesi yang bermasalah jika saya harus membuat grafik untuk semua sesi.

Pertanyaan saya adalah:

  • apakah ada hal lain yang harus saya periksa untuk menemukan penyebab peningkatan beban CPU pada mesin routing?
  • bagaimana saya bisa dengan mudah mengetahui sesi mana yang menyebabkan masalah ini (jika asumsi saya benar)? Mengaktifkan opsi BGP menghasilkan data dalam jumlah besar, tapi saya tidak yakin apakah itu memberi saya wawasan nyata.
Teun Vink
sumber

Jawaban:

17

Mungkin ada beberapa informasi bermanfaat bagi Anda di Pusat Pengetahuan Juniper .

Jika RPD mengkonsumsi CPU tinggi, maka lakukan pemeriksaan berikut dan verifikasi parameter berikut:

  • Periksa antarmuka: Periksa apakah ada antarmuka yang mengepak di router. Ini dapat diverifikasi dengan melihat output dari pesan log acara dan menunjukkan antarmuka perintah ge-x / y / z ekstensif. Pecahkan masalah mengapa mereka mengepak; jika memungkinkan Anda dapat mempertimbangkan mengaktifkan waktu tunggu untuk tautan naik dan tautan turun.

  • Periksa apakah ada pesan kesalahan syslog terkait dengan antarmuka atau FPC / PIC, dengan melihat output dari pesan log acara.

  • Periksa rute: Verifikasi jumlah total rute yang dipelajari oleh router dengan melihat output dari ringkasan acara rute. Periksa apakah sudah mencapai batas maksimum.

  • Periksa tugas RPD: Identifikasi apa yang membuat proses sibuk. Ini dapat diperiksa dengan terlebih dahulu mengaktifkan set task accounting on. Penting: Ini sendiri dapat meningkatkan beban pada CPU dan pemanfaatannya; jadi jangan lupa untuk mematikannya ketika Anda selesai dengan koleksi output yang diperlukan. Kemudian jalankan show task accounting dan cari utas dengan waktu CPU yang tinggi:

    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
    

Cari tahu mengapa utas, yang terkait dengan awalan atau protokol tertentu, menggunakan CPU tinggi.

  • Anda juga dapat memverifikasi apakah rute berosilasi (atau rute berputar) dengan melihat output dari perintah shell: %rtsockmon –t

  • Periksa Memori RPD. Beberapa kali penggunaan memori yang tinggi secara tidak langsung dapat menyebabkan CPU tinggi.

Artanix
sumber
1
RPD adalah blackbox yang sedikit mengganggu. Di atas saran hebat rtsockmon -t dan tampilkan akun tugas, saya juga ingin menambahkan 'tampilkan krt antrian' sebagai alat yang berpotensi bermanfaat.
ytti
show krt queue akan menunjukkan kepada Anda setiap pembaruan rute yang akan membentuk kontrol ke data plane. Anda harus melihat tidak ada yang mengantri untuk sebagian besar waktu. Ketika sebuah flap terjadi, ini dapat tetap dalam antrian untuk beberapa waktu
mellowd
Karena PR836197 secara harfiah bisa dalam jam :(
ytti
Beberapa poin itu terlalu jelas untuk disebutkan (mengepakkan antarmuka, kesalahan dalam log), tetapi saran rtsockmon dan akuntansi tugas yang berwawasan luas. Sepertinya banyak siklus CPU digunakan untuk SNMP, jadi selanjutnya adalah mencari tahu kotak dan alat mana yang melakukan polling pada router ini.
Teun Vink
1
Maaf jika mereka terlalu jelas, saya datang dari latar belakang dukungan di mana membuat pengguna memeriksa apakah dicolokkan itu merepotkan!
Artanix
2

Saya tahu utas ini sudah lama tetapi demi kelengkapan:

Jika cpu tinggi terjadi secara acak dan Anda tidak dapat menentukan proses yang menyebabkannya, kami dapat membuat skrip di bawah ini.

Dengan skrip ini, kami akan menangkap proses secara ekstensif ketika proses meningkatkan lebih dari ambang normal atau yang diharapkan, ini seharusnya tidak mengganggu lalu lintas apa pun tetapi MW masih disarankan. Namun saya melihat Anda telah mempersempitnya menjadi 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;
            }
        }
    }
}

OUTPUT SET TAMPILAN>

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

Anda juga sudah memeriksa apakah ada pesan ddos ​​yang dilaporkan? Anda dapat menjalankan perintah berikut:

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

Maka tergantung apa yang Anda lihat dapat dipersempit misalnya:

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*/*

Juniper juga memiliki daftar koleksi untuk jenis masalah ini di bawah KB22637

Perintah CPU CLI Tinggi

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

Aktifkan akuntansi tugas dan kumpulkan output detail akuntansi tugas (tiga kali dengan selisih 30 detik). Jangan lupa mematikannya setelah selesai.

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

Log

Arsipkan / var / log seperti yang ditentukan pada Langkah 1 di atas Traceoptions

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

Juga jika Anda menjalankan versi lama yang rentan terhadap bug, Anda mungkin ingin memeriksa dukungan masa pakai kode:

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

Hal lain yang bisa disebut serangan vektor adalah tidak melindungi RE Anda dari lalu lintas pengecualian yang tidak diinginkan. Pastikan Anda memiliki filter firewall di bawah loopback.

Saya telah melihat di skrip sebelumnya pada router menyebabkan cpu tinggi tidak yakin apakah rpd masuk ke pandangan saya, tapi ini adalah sesuatu yang Anda mungkin tidak ingin mengabaikannya.

Jika Anda melihat di log banyak klik dengan RPD_MPLS_PATH_BANDWIDTH_CHANGE Anda mungkin menggunakan interval penyesuaian yang sangat agresif

Periksa setiap tetes pada "show antrian sistem: ini adalah antrian kernel, beberapa petunjuk mungkin muncul.

DRP
sumber