JVM(5)分析工具

給系統(tǒng)定位問題的時候,知識、經(jīng)驗是關(guān)鍵基礎(chǔ),數(shù)據(jù)是依據(jù),工具是運用知識處理數(shù)據(jù)的手段。這里說的數(shù)據(jù)包括:cpu、網(wǎng)絡(luò)、內(nèi)存、磁盤、運行日志、異常堆棧、 GC 日志、線程快照 ( threaddump/javacore 文件)、堆轉(zhuǎn)儲快照( heapdump/hprof 文件)等。經(jīng)常使用適當(dāng)?shù)奶摂M機監(jiān)控和分析的工具可以加快我們分析數(shù)據(jù)、定位解決問題的速度。

1、系統(tǒng)工具

1.1、top

top命令用于顯示所有運行和活躍的實時進程并定期更新它。它顯示了cpu使用率,內(nèi)存使用率,交換內(nèi)存,緩存大小,緩沖區(qū)大小,進程pid,用戶,命令等等。它也展示了運行進程的高cpu利用率和內(nèi)存利用率。top命令對系統(tǒng)管理員監(jiān)視和在需要的時候采取正確的行動是非常的重要。

top命令使用方法:

格式:top [-] [d] [p] [q] [c] [C] [S] [s] [n]

參數(shù)說明:

  • d:指定每兩次屏幕信息刷新之間的時間間隔。當(dāng)然用戶可以使用s交互命令來改變之。
  • p:通過指定監(jiān)控進程ID來僅僅監(jiān)控某個進程的狀態(tài)。
  • q:該選項將使top沒有任何延遲的進行刷新。如果調(diào)用程序有超級用戶權(quán)限,那么top將以盡可能高的優(yōu)先級運行。
  • S:指定累計模式。
  • s:使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。
  • i:使top不顯示任何閑置或者僵死進程。
  • c:顯示整個命令行而不只是顯示命令名。

top的內(nèi)部命令:

  • s – 改變畫面更新頻率

  • l – 關(guān)閉或開啟第一部分第一行 top 信息的表示

  • t – 關(guān)閉或開啟第一部分第二行 Tasks 和第三行 Cpus 信息的表示

  • m – 關(guān)閉或開啟第一部分第四行 Mem 和 第五行 Swap 信息的表示

  • N – 以 PID 的大小的順序排列表示進程列表

  • P – 以 CPU 占用率大小的順序排列進程列表

  • M – 以內(nèi)存占用率大小的順序排列進程列表

  • h – 顯示幫助

  • n – 設(shè)置在進程列表所顯示進程的數(shù)量

  • q – 退出 top

  • s – 改變畫面更新周期

示例1:

top1.png

https://www.cnblogs.com/sunshuhai/p/6250514.html
https://www.cnblogs.com/zk47/p/4261288.html
https://www.cnblogs.com/zhoug2020/p/6336453.html

1.2、htop

htop 是Linux系統(tǒng)中的一個互動的進程查看器,一個文本模式的應(yīng)用程序(在控制臺或者X終端中),需要ncurses。與Linux傳統(tǒng)的top相比,htop更加人性化。它可讓用戶交互式操作,支持顏色主題,可橫向或縱向滾動瀏覽進程列表,并支持鼠標(biāo)操作。

htop相比較top的優(yōu)勢:

  • 可以橫向或縱向滾動瀏覽進程列表,以便看到所有的進程和完整的命令行。

  • 在啟動上比top 更快。

  • 殺進程時不需要輸入進程號。

  • htop 支持鼠標(biāo)選中操作(反應(yīng)不太快)。

  • top 已不再維護。

示例1:

示例2:

https://www.cnblogs.com/zangfans/p/8595000.html
https://blog.csdn.net/u011327981/article/details/78201208
https://www.sogou.com/link?url=hedJjaC291NVm6BbIVBZ6EkewZMrPH_RI_FFzAicPRHyNSHDNjHtute0NqN3DoLN0ztd7q5nl6o.

1.2、vmstat

vmstat 統(tǒng)計虛擬內(nèi)存信息,可以對操作系統(tǒng)的proc、memory、CPU、IO等信息進行統(tǒng)計以呈現(xiàn)給用戶。

vmstat語法:

  • vmstat [-a] [-n] [delay [ count]]
  • vmstat [-f] [-s] [-m]
  • vmstat [-S unit]
  • vmstat [-d]
  • vmstat [-p disk_partition]
  • vmstat [-V]

參數(shù)說明:

  • [ -a ] 顯示 活動(active)和 非活動(inactive)的內(nèi)存。
  • [ -n ] 只顯示頭信息,不周期性顯示。這里沒有測試出-n的作用,貌似有和沒有,結(jié)果都一樣。
  • [ -f ] 顯示自開機以來forks的總數(shù),包括fork、vfork和clone system calls,總數(shù)和tasks創(chuàng)建的數(shù)量是一致的。
  • [ -s ]顯示各種事件計數(shù)器表和內(nèi)存統(tǒng)計信息,這顯示不重復(fù)。
  • [ -m ]顯示slabinfo,好像是緩存相關(guān)的,對這個完全不懂。可以對比一下/proc/slabinfo的內(nèi)容。
  • [ -V ]顯示版本信息。
  • [ -d ]顯示磁盤數(shù)據(jù)(disk statistics)
  • [ -D ]顯示磁盤統(tǒng)計表(disk table)
  • [ -S 單位 ]

k:1000

K:1024 (默認為K)

m:1000000

M:1048576

比較:k和K

  • [ -p 分區(qū) ]顯示磁盤分區(qū)數(shù)據(jù)(disk partition statistics )
  • [ delay [ count ] ] delay是間隔,count顯示多少次信息??梢院蜕厦娴哪承﹨?shù)結(jié)合使用。

示例1:

vmstat1.png

示例2:

vmstat2.png

https://www.cnblogs.com/chenwenbiao/archive/2011/10/26/2224733.html
https://blog.csdn.net/frankarmstrong/article/details/54313727
http://blog.chinaunix.net/uid-25505925-id-191966.html
https://www.cnblogs.com/tommyli/p/3746187.html

1.3、tcpdump

tcpdump是一個用于截取網(wǎng)絡(luò)分組,并輸出分組內(nèi)容的工具。tcpdump憑借強大的功能和靈活的截取策略,使其成為類UNIX系統(tǒng)下用于網(wǎng)絡(luò)分析和問題排查的首選工具。 tcpdump提供了源代碼,公開了接口,因此具備很強的可擴展性,對于網(wǎng)絡(luò)維護和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系統(tǒng)中,由于它需要將網(wǎng)絡(luò)界面設(shè)置為混雜模式,普通用戶不能正常執(zhí)行,但具備root權(quán)限的用戶可以直接執(zhí)行它來獲取網(wǎng)絡(luò)上的信息。因此系統(tǒng)中存在網(wǎng)絡(luò)分析工具主要不是對本機安全的威脅,而是對網(wǎng)絡(luò)上的其他計算機的安全存在威脅。

https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html
https://www.sogou.com/link?url=DOb0bgH2eKh1ibpaMGjuy4yKaqZiSHtWC8ug8Cuw59om3Pojx-sH_OBXJDiYuRkTiYSK4ioE2I4.
https://www.cnblogs.com/maifengqiang/p/3863168.html
https://www.runoob.com/linux/linux-comm-tcpdump.html

1.4、netstat

Netstat是控制臺命令,是一個監(jiān)控TCP/IP網(wǎng)絡(luò)的非常有用的工具,它可以顯示路由表、實際的網(wǎng)絡(luò)連接以及每一個網(wǎng)絡(luò)接口設(shè)備的狀態(tài)信息。Netstat用于顯示與IP、TCP、UDP和ICMP協(xié)議相關(guān)的統(tǒng)計數(shù)據(jù),一般用于檢驗本機各端口的網(wǎng)絡(luò)連接情況。

netstat常見參數(shù):

  • -a (all) 顯示所有選項,默認不顯示LISTEN相關(guān)。
  • -t (tcp) 僅顯示tcp相關(guān)選項。
  • -u (udp) 僅顯示udp相關(guān)選項。
  • -n 拒絕顯示別名,能顯示數(shù)字的全部轉(zhuǎn)化成數(shù)字。
  • -l 僅列出有在 Listen (監(jiān)聽) 的服務(wù)狀態(tài)。
  • -p 顯示建立相關(guān)鏈接的程序名
  • -r 顯示路由信息,路由表
  • -e 顯示擴展信息,例如uid等
  • -s 按各個協(xié)議進行統(tǒng)計
  • -c 每隔一個固定時間,執(zhí)行該netstat命令。

LISTEN和LISTENING的狀態(tài)只有用-a或者-l才能看到。

netstat網(wǎng)絡(luò)狀態(tài)詳解:

一個正常的TCP連接,都會有三個階段:1、TCP三次握手;2、數(shù)據(jù)傳送;3、TCP四次揮手。


tcp.png
  • SYN:(同步序列編號,Synchronize Sequence Numbers)該標(biāo)志僅在三次握手建立TCP連接時有效。表示一個新的TCP連接請求。
  • ACK:(確認編號,Acknowledgement Number)是對TCP請求的確認標(biāo)志,同時提示對端系統(tǒng)已經(jīng)成功接收所有數(shù)據(jù)。
  • FIN:(結(jié)束標(biāo)志,FINish)用來結(jié)束一個TCP回話.但對應(yīng)端口仍處于開放狀態(tài),準備接收后續(xù)數(shù)據(jù)。
  • LISTEN:首先服務(wù)端需要打開一個socket進行監(jiān)聽,狀態(tài)為LISTEN, The socket is listening for incoming connections. 偵聽來自遠方TCP端口的連接請求 。
  • SYN_SENT:客戶端通過應(yīng)用程序調(diào)用connect進行active open.于是客戶端tcp發(fā)送一個SYN以請求建立一個連接,之后狀態(tài)置為SYN_SENT,The socket is actively attempting to establish a connection. 在發(fā)送連接請求后等待匹配的連接請求。
  • SYN_RECV:服務(wù)端應(yīng)發(fā)出ACK確認客戶端的SYN,同時自己向客戶端發(fā)送一個SYN, 之后狀態(tài)置為SYN_RECV ,
  • A connection request has been received from the network. 在收到和發(fā)送一個連接請求后等待對連接請求的確認 。
  • ESTABLISHED:代表一個打開的連接,雙方可以進行或已經(jīng)在數(shù)據(jù)交互了, The socket has an established connection. 代表一個打開的連接,數(shù)據(jù)可以傳送給用戶。
  • FIN_WAIT1:主動關(guān)閉(active close)端應(yīng)用程序調(diào)用close,于是其TCP發(fā)出FIN請求主動關(guān)閉連接,之后進入FIN_WAIT1狀態(tài)。 The socket is closed, and the connection is shutting down. 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認。
  • CLOSE_WAIT:被動關(guān)閉(passive close)端TCP接到FIN后,就發(fā)出ACK以回應(yīng)FIN請求(它的接收也作為文件結(jié)束符傳遞給上層應(yīng)用程序),并進入CLOSE_WAIT, The remote end has shut down, waiting for the socket to close. 等待從本地用戶發(fā)來的連接中斷請求 。
  • FIN_WAIT2:主動關(guān)閉端接到ACK后,就進入了FIN-WAIT-2 , Connection is closed, and the socket is waiting for a shutdown from the remote end. 從遠程TCP等待連接中斷請求。
  • LAST_ACK:被動關(guān)閉端一段時間后,接收到文件結(jié)束符的應(yīng)用程序?qū)⒄{(diào)用CLOSE關(guān)閉連接。這導(dǎo)致它的TCP也發(fā)送一個 FIN,等待對方的ACK.就進入了LAST-ACK , The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原來發(fā)向遠程TCP的連接中斷請求的確認。
  • TIME_WAIT:在主動關(guān)閉端接收到FIN后,TCP就發(fā)送ACK包,并進入TIME-WAIT狀態(tài)。 The socket is waiting after close to handle packets still in the network.等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認。
  • CLOSING:比較少見, Both sockets are shut down but we still don’t have all our data sent. 等待遠程TCP對連接中斷的確認。
  • CLOSED: 被動關(guān)閉端在接受到ACK包后,就進入了closed的狀態(tài)。連接結(jié)束, The socket is not being used. 沒有任何連接狀態(tài)。
  • TIME_WAIT狀態(tài)的形成只發(fā)生在主動關(guān)閉連接的一方。
  • 主動關(guān)閉方在接收到被動關(guān)閉方的FIN請求后,發(fā)送成功給對方一個ACK后,將自己的狀態(tài)由FIN_WAIT2修改為TIME_WAIT,而必須再等2倍 的MSL(Maximum Segment Lifetime,MSL是一個數(shù)據(jù)報在internetwork中能存在的時間)時間之后雙方才能把狀態(tài) 都改為CLOSED以關(guān)閉連接。目前RHEL里保持TIME_WAIT狀態(tài)的時間為60秒。
還有 65% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
支付 ¥2.99 繼續(xù)閱讀

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容