Linux 排查
一、排查CPU使用率过高
1. 找出耗CPU的进程
使用top命令查看内存、cpu及各进程信息
2.找出耗cpu的线程情况
top -H -p [进程id]
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu | grep [进程id]
3.定位线程堆栈信息,找到异常代码
printf "%x\n" [线程id] 将线程id转换为16进制 jstack pid |grep tid -A 30 [16进制线程id] 打印线程的堆栈信息
二、排查可执行程序崩溃
1.core文件
是程序崩溃后的内存数据,用gdb打开core文件,打开就是崩溃位置
gdb --core=./core main
bt //看调用栈
2.使用demsg
编译程序,-g 表示编译时加入调试信息
gcc -o test1 -g test1.c
使用dmesg命令查看系统日志错误信息
dmesg | grep main
[54106.016179] test1[8352] trap divide error ip:400506 sp:7fff2add87e0 error:0 in test1[400000+1000]
这条信息里的ip字段后面的数字就是test1程序出错时所程序执行的位置。使用addr2line就可以将400506转换成出错程序的位置:
$ addr2line -e test1 400506 /home/hanfoo/code/test/addr2line/test1.c:5
指的是test1.c的第5行
3.strace
strace -p pid // 打印进程的系统调用信息,包括参数、返回值等
三、查看端口号占用情况
netstat -anp |grep 3306 查看3360端口号的占用情况,LISTEN则表示被占用