curl
?和?curl -I
?可以便捷地被應(yīng)用于 web 調(diào)試中,它們的好兄弟?wget
?也可以,或者是更潮的?httpie
。
使用?iostat
、netstat
、top
?(htop
?更佳)和?dstat
?去獲取硬盤、cpu 和網(wǎng)絡(luò)的狀態(tài)。熟練掌握這些工具可以使你快速的對(duì)系統(tǒng)的當(dāng)前狀態(tài)有一個(gè)大概的認(rèn)識(shí)。
若要對(duì)系統(tǒng)有一個(gè)深度的總體認(rèn)識(shí),使用?glances
。它在一個(gè)終端窗口中向你提供一些系統(tǒng)級(jí)的數(shù)據(jù)。這對(duì)于快速的檢查各個(gè)子系統(tǒng)非常有幫助。
若要了解內(nèi)存狀態(tài),運(yùn)行并理解?free
?和?vmstat
?的輸出。尤其注意“cached”的值,它指的是 Linux 內(nèi)核用來作為文件緩存的內(nèi)存大小,因此它與空閑內(nèi)存無關(guān)。
Java 系統(tǒng)調(diào)試則是一件截然不同的事,一個(gè)可以用于 Oracle 的 JVM 或其他 JVM 上的調(diào)試的小技巧是你可以運(yùn)行kill -3 <pid>
?同時(shí)一個(gè)完整的棧軌跡和堆概述(包括 GC 的細(xì)節(jié))會(huì)被保存到標(biāo)準(zhǔn)輸出/日志文件。JDK 中的jps
,jstat
,jstack
,jmap
?很有用。SJK tools?更高級(jí).
使用?mtr
?去跟蹤路由,用于確定網(wǎng)絡(luò)問題。
用?ncdu
?來查看磁盤使用情況,它比常用的命令,如?du -sh *
,更節(jié)省時(shí)間。
查找正在使用帶寬的套接字連接或進(jìn)程,使用?iftop
?或?nethogs
。
ab
?工具(捆綁于 Apache)可以簡(jiǎn)單粗暴地檢查 web 服務(wù)器的性能。對(duì)于更復(fù)雜的負(fù)載測(cè)試,使用?siege
。
wireshark
,tshark
?和?ngrep
?可用于復(fù)雜的網(wǎng)絡(luò)調(diào)試。
了解?strace
?和?ltrace
。這倆工具在你的程序運(yùn)行失敗、掛起甚至崩潰,而你卻不知道為什么或你想對(duì)性能有個(gè)總體的認(rèn)識(shí)的時(shí)候是非常有用的。注意 profile 參數(shù)(-c
)和附加到一個(gè)運(yùn)行的進(jìn)程參數(shù) (-p
)。
了解使用?ldd
?來檢查共享庫(kù)。
了解如何運(yùn)用?gdb
?連接到一個(gè)運(yùn)行著的進(jìn)程并獲取它的堆棧軌跡。
學(xué)會(huì)使用?/proc
。它在調(diào)試正在出現(xiàn)的問題的時(shí)候有時(shí)會(huì)效果驚人。比如:/proc/cpuinfo
,/proc/meminfo
,/proc/cmdline
,/proc/xxx/cwd
,/proc/xxx/exe
,/proc/xxx/fd/
,/proc/xxx/smaps
(這里的?xxx
?表示進(jìn)程的 id 或 pid)。
當(dāng)調(diào)試一些之前出現(xiàn)的問題的時(shí)候,sar
?非常有用。它展示了 cpu、內(nèi)存以及網(wǎng)絡(luò)等的歷史數(shù)據(jù)。
關(guān)于更深層次的系統(tǒng)分析以及性能分析,看看?stap
(SystemTap),perf
,以及sysdig
。
查看你當(dāng)前使用的系統(tǒng),使用?uname
?或者?uname -a
?(Unix/kernel 信息) or?lsb_release -a
?(Linux 發(fā)行版信息)。
dmesg
(可能是硬件或驅(qū)動(dòng)問題)。
更多建議: