Talk is cheap,show you the code!
kprobe_kworker.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/kprobes.h>
#define MAX_SYMBOL_LEN 64
static char symbol[MAX_SYMBOL_LEN] = "rht_deferred_worker";
//rht_deferred_worker可根据需要改成要探测的函数
module_param_string(symbol, symbol, sizeof(symbol), 0644);
/* For each probe you need to allocate a kprobe structure */
static struct kprobe kp = {
.symbol_name = symbol,
/* kprobe pre_handler: called just before the probed instruction is executed */
static int handler_pre(struct kprobe *p, struct pt_regs *regs)
#ifdef CONFIG_X86
pr_info("<%s>,pid = %ld\n",current->comm, current->pid);
struct work_struct *work = (struct work_struct *)regs->di;
pr_info("<%s> pre_handler: %x\n",p->symbol_name,work->func);
#endif
#ifdef CONFIG_ARM64
pr_info("<%s> pre_handler: p->addr = %pF, pc = 0x%lx,"
" pstate = 0x%lx\n",
p->symbol_name, p->addr, (long)regs->pc, (long)regs->pstate);
#endif
/* A dump_stack() here will give a stack backtrace */
return 0;
/* kprobe post_handler: called after the probed instruction is executed */
static void handler_post(struct kprobe *p, struct pt_regs *regs,
unsigned long flags)
#ifdef CONFIG_X86
struct work_struct *work = (struct work_struct *)regs->di;
pr_info("<%s> post_handler: %x\n",p->symbol_name,work->func);
// pr_info("<%s> post_handler: p->addr = %pF, flags = 0x%lx\n",
// p->symbol_name, p->addr, regs->flags);
#endif
#ifdef CONFIG_ARM64
pr_info("<%s> post_handler: p->addr = %pF, pstate = 0x%lx\n",
p->symbol_name, p->addr, (long)regs->pstate);
#endif
* fault_handler: this is called if an exception is generated for any
* instruction within the pre- or post-handler, or when Kprobes
* single-steps the probed instruction.
static int handler_fault(struct kprobe *p, struct pt_regs *regs, int trapnr)
pr_info("fault_handler: p->addr = %pF, trap #%dn", p->addr, trapnr);
/* Return 0 because we don't handle the fault. */
return 0;
static int __init kprobe_init(void)
int ret;
kp.pre_handler = handler_pre;
kp.post_handler = handler_post;
kp.fault_handler = handler_fault;
ret = register_kprobe(&kp);
if (ret < 0) {
pr_err("register_kprobe failed, returned %d\n", ret);
return ret;
pr_info("Planted kprobe at %pF\n", kp.addr);
return 0;
static void __exit kprobe_exit(void)
unregister_kprobe(&kp);
pr_info("kprobe at %pF unregistered\n", kp.addr);
module_init(kprobe_init)
module_exit(kprobe_exit)
MODULE_LICENSE("GPL");
Makefile
obj-m := kprobe_kworker.o
KBUILD_EXTRA_SYMBOLS:=/mod_a/Module.symvers
CROSS_COMPILE=''
KDIR := /lib/modules/4.19.8-1.el7.elrepo.x86_64/build
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c .*.cmd *.symvers modul*
insmod kprobe_kworker.ko
rmmod kprobe_kworker.ko
dmesg查看结果
dmesg
什么是kworker?kworker表示进行“工作”(处理系统调用)的Linux内核进程。在进程列表中可以有多个:kworker/0:1在第一个CPU内核上kworker/1:1是一个,在第二个CPU内核上是一个,依此类推。
为什么kworker占用您的CPU?...
问题描述 某一台服务器上面 程序在每小时内偶尔丢包 排查服务器所有性能瓶颈之后发现一个奇怪的问题 程序丢包前后 会有IO过高的情况 于是使用iotop命令排查是哪个程序偶尔占用过高的磁盘IO所用命令 iotop相关参数 -o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件
最近用华为鲲鹏跑了一段时间服务后,出现了系统负载40多居高不下的情况,一排查发现是kworker进程占用CPU很高,而且还杀不掉。
通过华为的监控发现是磁盘I/O很高,重启服务器后能短暂解决问题,但是过几天负载还是会很高,导致很多进程被系统杀死。
但是出现问题的就一台鲲鹏,其他的鲲鹏没有出现,通过比较发现内核版本不一样,执行uname -a输出如下
正常的鲲鹏
Linux kpv7-pbx-0001 4.18.0-80.7.2.el7.aarch64 #1 SMP Thu Sep 12 16:1
收到IO占用高告警
系统信息:Linux version 2.6.32-696.18.7.1.el6.ucloud.x86_64 (root@59c188f3c79d)(gcc version 4.4.6 20120305
(Red Hat 4.4.6-5) (GCC) ) #1 SMP Fri Jan 5 16:48:58 CST 2018
1、到机器上看到io使用率忽高,同时iow...
Linux操作系统load average过高,kworker占用较多cpu
今天巡检发现,mc1的K8S服务器集群有些异常,负载不太均衡。其中10.2.75.32-34,49的load average值都在40以上,虽然机器的cpu核数都是40或48核不算严重,但也值得重视。
登陆机器查看,执行top发现,cpu的使用率接近40%,sys有20-30,user有10-20。也发现有大量...
服务器使用的是Centos7.2 64位系统。发现服务器异常,一般先想到用top命令查看占用CPU高的进程,但如果是高手入侵,可能会替换掉你系统的一些重要命名。所以建议装系统后,把诸如/usr/bin目录的top、ps、kill等重要命令先备份好。一旦发现被入侵,先检查这些命令是否被篡改,如果你使用凶手的kill,当然怎么也杀不死对方了。
这里发现没异常,直接使用top命令:
这里是一个名为su...
一段时间没有上来看过了,前两天上来发现页面加载速度变慢了很多,查看cpu占用发现几乎是100%,再用top去查看,发现有好几个名叫kworkerds的进程,百度了一下才发现原来这是个恶意挖矿病毒,感染上后会给你的主机添加一个定时任务,不断去远程获取脚本然后执行,后来百度了一番在这里记录下解决步骤。
top查看进程信息,发现有几个名为kworkerds的进程,即为挖矿进程
使用...
在上一篇博文Linux系统发现占用CPU达100%的进程并处理 里面以为已经把挖矿程序sustse处理干净了,可是没过两天又收到阿里云短信提醒,说服务器有问题,难道还有后门吗?也多亏阿里云给出提示“出现了可疑安全事件:Linux共享库文件预加载配置文件可疑篡改”。网上查了查相关内容,原来这个后门是动态链接库预加载机制造成的。
动态链接库预加载机制是系统提供给用户运行自定义动态链接库的一种方式,在可...
大部分格式都是 kworker /u2:0或者 kworker /0:0H, 查看资料得知:
内核中有很多kworker,有绑定cpu的和不绑定cpu的,它支持cpu的hotplug时work的迁移。
u:是unbound的缩写,代表没有绑定特定的CPU,kworker /u2:0中的 2 是 work_pool 的I...