启动zebra进程sudozebra-d查看zebra进程状态ubuntu@ubuntu:~$sudotop-b-n1-H-p`pidofzebra`top-03:23:3810分钟,1个用户,平均负载:0.05、0.17、0.19线程:总共2个,0个正在运行,2个正在睡眠,0个已停止,0个僵尸%Cpu(s):6.2us,0.0sy,0.0ni,93.8id,0.0wa,0.0hi,0.0si,0.0stMiBMem:总计3918.7,2696.1免费,607.3使用,615.4buff/cacheMiB交换:总计2048.0,免费2048.0,使用0.0。CPU%MEMTIME+COMMAND1474frr2008400855963076S0.00.10:00.00zebra1475frr2008400855963076S0.00.10:00.00Zebradplaneubuntu@ubuntu@ubuntu:~$启动信息,从上面可以看出它启动一个子线程zebradplane。启动staticdsudostaticd-d查看zebra进程的线程:ubuntu@ubuntu:~$sudotop-b-n1-H-p`pidofzebra`top-03:26:53up14min,1user,平均负载:0.00、0.08、0.15线程:总共3个,运行0个,睡眠3个,停止0个,僵尸0%Cpu(s):0.0us,6.2sy,0.0ni,93.8id,0.0wa,0.0hi,0.0si,0.0stMiB内存:总计3918.7,免费2692.0,已使用610.8,615.9buff/cacheMiB交换:总计2048.0,免费2048.0,已使用0.0。3051.1availMemPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND1474frr20015815663683696S0.00.20:00.00zebra1475frr20015815663683696S0.00.210Zebra0d0.00.210:00.00zebra15815663683696S0.00.20:00.00ubzebra_static,zebra多了一个线程zebra_apic。可以猜测staticd和zebra线程之间是有联系的,zebra创建了一个线程来处理staticd请求。启动bgpdsudobgpd-d查看zebra线程数:ubuntu@ubuntu:~$sudotop-b-n1-H-p`pidofzebra`top-03:31:05up18min,2users,load平均值:0.00、0.03、0.10线程:总共5个,运行0个,睡眠5个,停止0个,僵尸0%Cpu(s):0.0us,0.0sy,0.0ni,100.0id,0.0wa,0.0hi,0.0si,0.0stMiB内存:总计3918.7,免费2677.2,已使用621.3,620.2buff/cacheMiB交换:总计2048.0,免费2048.0,已使用0.0。3040.5availMemPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND1474frr20030562063683696S0.00.20:00.00zebra1475frr20030562063683696S0.00.210Zebra0frr20.210:00斑马30562063683696S0.00.20:00.00zebra_apic1882frr20030562063683696S0.00.20:00.00zebra_apic1883frr20030562063683696S0.00.20:00.00zebra_apicubuntu@ubuntu:~$Itcanbeseenthatafterstartingbgpd进程,zebra中还有两个zebra_apic线程。可以猜测是bgpd和zebra线程之间有联系,zebra创建了一个线程来处理bgpd的请求。启动vtyshsudovtysh检查zebra线程数:ubuntu@ubuntu:~$sudotop-b-n1-H-p`pidofzebra`top-03:32:59up20min,2users,loadaverage:0.16、0.05、0.10线程:总共5个,0个正在运行,5个正在睡眠,0个已停止,0个僵尸%Cpu(s):0.0us,0.0sy,0.0ni,100.0id,0.0wa,0.0hi,0.0si,0.0stMiB内存:总计3918.7,免费2669.6,已使用628.9,620.3buff/cacheMiB交换:总计2048.0,免费2048.0,已使用0.0。3032.9availMemPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND1474frr20030562063683696S0.00.20:00.00zebra1475frr20030562063683696S0.00.200.210Zebra00.00.200:00.00斑马30562063683696S0.00.20:00.00zebra_apic1882frr20030562063683696S0.00.20:00.00zebra_apic1883frr20030562063683696S0.00.20:00.00zebra_apicubuntu@ubuntu:~$Itcanbeseenthataftervtysh开始,斑马线进程数没有改变。rib的增删改查过程在rib_process_add_fib函数中设置断点触发路由的添加(邻居利用网络发布路由)。线程1"zebra"在zebra/zebra_rib.c:17091709rib_process_add_fib(zvrf,rn,new_fib);(gdb)bt_add_fib(new_process_fib)0x55c3cabb3b50,rn=0x55c3cabb3c30,zvrf=0x55c3caba2150)在zebra/zebra_rib.c:1709#1rib_process(rn=0x55c3cabb3c30)在zebra/zebra_rib.c:1709#2process_subq(qindex=0'\000',subcq3=0x5)在zebra/zebra_rib.c:2137#3meta_queue_process(dummy=
