使用crash需要两个前提条件:通过echo ‘c’ > /proc/sysrq-trigger生成vmcore(需要kexec/kdump),安装kernel-debuginfo包,并获得带有debuginfo信息的vmlinx

命令使用

1. bt

bt打印当前进程堆栈(触发crash的?)
bt pid/taskp打印指定pid或者指定task_struct结构体堆栈
bt -a打印当前所有cpu的进程堆栈
bt -c $cpuid打印制定cpu的进程堆栈
bt -r打印raw的栈内存,最多两个页大小
bt -l打印栈的同时打印代码行号
bt -f打印栈的同时打印完整的frame的栈内存
bt -e打印user exception的栈
bt -E打印irq栈
bt -v搜索kernel stack overflow

2. dev

dev -i打印ioport和iomem使用
dev -d打印物理盘的IO统计

3. mod

e.g mod -s ext4,把ext4.ko加载进来

4. sym

sym -l打印所有的symbol
sym -M打印所有模块里面的symbol
sym -m ext4打印ext4模块的symbol
sym -q ext4_read打印所有ext4_read*开头的symbol

5. dis

dis打印函数汇编
dis -l打印函数汇编,带行号
dis symbol/addr打印地址开始的汇编代码
dis symbol/addr count打印地址开始的汇编代码一共count行

6. files

files打印打开的文件
files pid打印指定进程打开的文件
files -d打印指定dentry地址的文件信息,包括inode, superblock, file type, file path
files -p打印指定inode地址的文件信息
files -c打印指定进程打开的文件,同时包含inode, i_mapping, page cache里的页个数,文件类型,文件路径

7. kmem

kmem -s打印slab信息
kmem -S打印指定slab cache信息
kmem -n打印node信息
kmem -z打印per zone信息
kmem -v打印vmalloc内存分配信息
kmem -V打印vmstat信息
kmem -f打印free内存信息
kmem -m lru打印每个页.lru信息

8. task

task pid/taskp打印指定进程task_struct
task -R打印指定进程的成员项

9. irq

irq打印系统中断信息
irq -d打印系统IDT
irq -a打印中断和cpu亲和性
irq -b打印软中断SOFTIRQ_VEC
irq -s打印系统中断统计

10. net

net打印当前net namespace的网络设备
net -s打印进程的socket
net -S打印进程socket,同时打印内核对应的socket, sock结构体信息
net -a打印arp cache

11. ps

ps打印所有进程
ps -p打印进程和父进程
ps -c打印进程和子进程
ps -k打印内核线程
ps -u打印用户态进程
ps -S打印不同状态进程数统计
ps -r打印进程的ulimit信息
ps -m -C打印指定cpu的last run timestamp(进程调度时间?)
ps -t打印进程实际运行时间