内核线程
linux系统有几个进程号比较小的进程
- 0号进程:idel进程用来初始化1号进程和2号进程
- 1号进程:systemd进程也叫init进程,用来初始化所有的用户进程
- 2号进程:kthreadd,在内核态运行,用来管理内核线程
常见的几个内核线程
1 |
|
- ksoftirqd:软中断线程
- kworker:用于执行内核工作队列,分为绑定 CPU (名称格式为 kworker/CPU86330)和未绑定 CPU(名称格式为 kworker/uPOOL86330)两类
- migration:在负载均衡过程中,把进程迁移到 CPU 上。每个 CPU 都有一个 migration 内核线程。
调试
场景准备:俩台服务器,服务器一运行docker,服务器二压力机,
服务器一:
1 |
|
服务器二发压命令
1 | # sync_flood攻击 |
这时候服务器变慢,top观察如下
1 |
|
cpu的idel下降,si很高,且进程ksoftirqd占用比较高,初步判断软中断出现了问题,我们之前通过sar和vmstat抓包去看,现在我们可以通过perf家火焰图工具查看,使用方法如下:
1 | #安装 FlameGraph |
生成的火焰图如下:
动态分析
工具如图