1、strace
這個功能很強大,能夠看到很多底層調用,便於分析問題
舉例:
[wangbin@localhost pas]$ strace -p 10472
Process 10472 attached - interrupt to quit
futex(0x4113be8, FUTEX_WAIT, 10482, NULL
<unfinished ...>
Process 10472 detached
我們可以看出這個進程已經死鎖了,所以strace命令非常有用,特別是網絡程序
2、tcpdump
在分析fastcgi程序時,我們利用這個命令來查看tcp包的情況
[root@localhost ~]# tcpdump -i lo -s 1500 port 9000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 1500 bytes
15:23:16.901004 IP localhost.localdomain.50867 > localhost.localdomain.9000: S 3482201970:3482201970(0) win 32767 <mss 16396,sackOK,timestamp 2296841391 0,nop,wscale 7>
15:23:16.901025 IP localhost.localdomain.9000 > localhost.localdomain.50867: S 3473410857:3473410857(0) ack 3482201971 win 32767 <mss 16396,sackOK,timestamp 2296841391 2296841391,nop,wscale 7>
15:23:16.901039 IP localhost.localdomain.50867 > localhost.localdomain.9000: . ack 1 win 256 <nop,nop,timestamp 2296841391 2296841391>
15:23:16.901150 IP localhost.localdomain.50867 > localhost.localdomain.9000: P 1:1377(1376) ack 1 win 256 <nop,nop,timestamp 2296841391 2296841391>
15:23:16.901170 IP localhost.localdomain.9000 > localhost.localdomain.50867: . ack 1377 win 256 <nop,nop,timestamp 2296841391 2296841391>
15:23:16.901214 IP localhost.localdomain.9000 > localhost.localdomain.50867: P 1:97(96) ack 1377 win 256 <nop,nop,timestamp 2296841391 2296841391>
15:23:16.901222 IP localhost.localdomain.50867 > localhost.localdomain.9000: . ack 97 win 256 <nop,nop,timestamp 2296841391 2296841391>
15:23:16.901236 IP localhost.localdomain.9000 > localhost.localdomain.50867: F 97:97(0) ack 1377 win 256 <nop,nop,timestamp 2296841391 2296841391>
15:23:16.901822 IP localhost.localdomain.50867 > localhost.localdomain.9000: F 1377:1377(0) ack 98 win 256 <nop,nop,timestamp 2296841392 2296841391>
15:23:16.901836 IP localhost.localdomain.9000 > localhost.localdomain.50867: . ack 1378 win 256 <nop,nop,timestamp 2296841392 2296841392>
我們通過這個命令可以發現是9000端口主動關閉了連接,這說明在另一端保持連接是沒有效果的。
3、core文件
這個作用就是像取款機旁邊的攝像機,能夠記錄下程序崩潰時的場景,對於分析高難度問題非常有用
不過用這個,一定要權限配置正確了。
4、gdb
gdb -p 進程號,可以去調試正在執行中的進程,功能也很強大。也就是說,只要你上線的程序編譯的時候加上了-g,並去掉了優化參數,你就可以在上線的時候調試某一個進程,比如nginx進程。
5、log文件
這是最常用的方法,也是最土的方法,不過對於調試還是非常有用的。