1. dmesg
dmesg主要用于在进程崩溃掉的时候,显示内核的相关信息。
dmesg | tail -f #打印当前信息
dmesg -c #打印后,清除缓冲区内容
dmesg -s 1024 #定义缓冲区大小
root@localhost:~$ dmesg | tail -f
[72728.302787] perf: interrupt took too long (3195 > 3167), lowering kernel.perf_event_max_sample_rate to 62500
[78343.525539] kauditd_printk_skb: 56 callbacks suppressed
[78343.857433] audit: type=1400 audit(1563488119.848:70): apparmor="STATUS"
2. ldd
ldd命令主要查看进程依赖的共享链接库。
root@localhost:~$ ldd /usr/lib/ssl/bin/openssl
linux-vdso.so.1 (0x00007ffe7edfd000)
libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007ff244a0a000)
libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007ff2445c7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff2441d6000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff243fd2000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff244c72000)
3. core文件
当程序偶发性崩溃的时候,我们可以借助系统的core dump来查看崩溃时候的错误信息。排查段错误等异常信息非常给力。
开启core dump,首选需要设置ulimit
root@localhost:~$ ulimit -c unlimited
一般情况下,core dump后的文件会在当前目录,也有可能是统一的core dump目录。统一目录可以查看:
cat /proc/sys/kernel/core_pattern
4. pstack
pstack一般查看线程。对于多线程c程序,容易引起死锁,使用pstack来检查是否有死锁情况。
root@localhost:~$ ps aux | grep gnatsd
root 1811 0.0 0.0 1743380 3744 pts/0 Sl 7月18 1:39 gnatsd
root 28640 0.0 0.0 21552 1024 pts/1 S+ 15:36 0:00 grep --color=auto gnatsd
root@localhost:~$ pstack 1811
4. gdb
参考gdb调试。