参考博客:
找PID路径
proc目录介绍
进程目录介绍
kworker占用cpu过高
查找有关进程的信息,首先获得PID
ps
iotop
30707 be/4 root 0.00 B/s 0.00 B/s 0.00 % 88.20 % [kworker/u65:1]
例如,PID == 30707
进入/proc目录:
cd /proc/30707
#查看有关文件
#/proc/[pid]/stack显示当前进程的内核调用栈信息,只有内核编译时打开了CONFIG_STACKTRACE编译选项,才会生成这个文件。
less stack
[<ffffffff8af4e343>] get_request+0x243/0x7d0
[<ffffffff8af5121e>] blk_queue_bio+0xfe/0x400
[<ffffffff8af4f467>] generic_make_request+0x147/0x380
[<ffffffff8af4f710>] submit_bio+0x70/0x150
[<ffffffffc08b3b05>] ext4_io_submit+0x25/0x50 [ext4]
[<ffffffffc08b3cb9>] ext4_bio_write_page+0x159/0x2f0 [ext4]
[<ffffffffc08a9df7>] mpage_submit_page+0x57/0x70 [ext4]
[<ffffffffc08aa0b2>] mpage_map_and_submit_buffers+0x172/0x2a0 [ext4]
[<ffffffffc08afd83>] ext4_writepages+0x763/0xcf0 [ext4]
[<ffffffff8adc92f1>] do_writepages+0x21/0x50
[<ffffffff8ae77f70>] __writeback_single_inode+0x40/0x260
[<ffffffff8ae78b04>] writeback_sb_inodes+0x1c4/0x430
[<ffffffff8ae78e0f>] __writeback_inodes_wb+0x9f/0xd0
[<ffffffff8ae792f3>] wb_writeback+0x263/0x2f0
[<ffffffff8ae79dec>] bdi_writeback_workfn+0x1cc/0x460
[<ffffffff8acbd1df>] process_one_work+0x17f/0x440
[<ffffffff8acbe2f6>] worker_thread+0x126/0x3c0
[<ffffffff8acc51b1>] kthread+0xd1/0xe0
[<ffffffff8b38bd37>] ret_from_fork_nospec_end+0x0/0x39
[<ffffffffffffffff>] 0xffffffffffffffff
#fd
#/proc/[pid]/fd是一个目录,包含进程打开文件的情况。
ll fd
总用量 0
#/proc/[pid]/cmdline是一个只读文件,包含进程的完整命令行信息。如果这个进程是zombie进程,则这个文件没有任何内容。
cat cmdline
空
# /proc/[pid]/comm包含进程的命令名。
cat comm
kworker/u65:1
# /proc/[pid]/wchan显示当进程sleep时,kernel当前运行的函数。举例如下:
cat /proc/2948/wchan
get_request
#/proc/[pid]/statm显示进程所占用内存大小的统计信息,包含七个值,度量单位是page(page大小可通过getconf PAGESIZE得到)
cat statm
0 0 0 0 0 0 0
#exe
#/proc/[pid]/exe为实际运行程序的符号链接。举例如下:
ll exe
ls: 无法读取符号链接exe: 没有那个文件或目录
这个kworker占用IO非常高,可能是由于服务器大量文件操作导致,等相关进程结束再来看看。