uid是user id,即使用者id,root使用者的uid是0,0為最高權限,
gid是group id,使用者組id,使用 id 指令可以很簡單的通過使用者名檢視uid、gid:
~$ id bingyue
uid=1000(bingyue) gid=1000(bingyue) groups=1000(bingyue)
~$ id root
uid=0(root) gid=0(root) groups=0(root)
pid是process id,即程序id,可以通過pid找到這個程序的uid,
tid是thead id,可以了解為線程的id。
top檢視活動程序資訊
top 指令顯示目前的活動程序,預設它是按占用cpu 的多少進行排序,每5秒鐘重新整理一次清單,
你也可以選擇不同的排序方式,例如 m 是按記憶體占用方式進行排序的快捷鍵。
iostat指令檢視磁盤讀取情況
iostat 指令用來顯示存儲子系統的詳細資訊,通常用它來監控磁盤 i/o 的情況。
要特别注意 iostat 統計結果中的 %iowait 值,太大了表明你的系統存儲子系統性能低下。
使用meminfo檢視記憶體資訊
meminfo 包含了記憶體的詳細資訊,可以使用 cat 和 grep 指令來顯示 meminfo 資訊:
cat /proc/meminfo
使用free指令動态檢視記憶體資訊
可以使用 free 指令來顯示動态的記憶體使用資訊,free 檢視大概的記憶體資訊,而 meminfo 提供的資訊更加詳細。
lsof指令檢視打開檔案和端口等的清單
lsof 指令對于很多 linux/unix 系統都可以使用,主要以清單的形式顯示打開的檔案和程序。
打開的檔案主要包括磁盤檔案、網絡套接字、管道、裝置和程序。
使用這個指令的主要原因是一個一個盤不能解除安裝并且顯示檔案正在使用或者打開的錯誤資訊。這個指令很容易看出哪些檔案正在使用。
使用mpstat檢視cpu資訊
mpstat mpstat是multiprocessor statistics的縮寫,是實時系統監控工具。其報告與cpu的一些統計資訊,這些資訊存放在/proc/stat檔案中。
預設可能沒有安裝,需要安裝後使用。
在多cpus系統裡,其不但能檢視所有cpu的平均狀況資訊,而且能夠檢視特定cpu的資訊。
使用pmap檢視某程序的記憶體使用情況
pmap 指令用來報告每個程序占用記憶體的詳細情況,可用來看是否有程序超支了,該指令需要程序 id 作為參數。
pmap pid
使用ps 和 pstree檢視程序清單
ps 和 pstree 指令都可以用來清單展示正在運作的所有程序。ps 告訴你每個程序占用的記憶體和 cpu 處理時間,而 pstree 顯示的資訊沒那麼詳細,但它以樹形結構顯示程序之間的依賴關系,包括子程序資訊。一旦發現某個程序有問題,你可以使用 kill 來殺掉它。
netstat網絡資訊
netstat 和 ps 指令類似,顯示了大量跟網絡相關的資訊,例如 socket 的使用、路由、接口、協定、網絡等等。
strace
strace 可以記錄程序進行系統調用的詳情,是以它也是一個非常好的診斷工具,例如你可以使用它來找出某個程式正在打開某個配置檔案。
strace 在跟蹤某個程序時會讓該程序的性能變得非常差,是以請謹慎使用。
vmstat
你可以使用 vmstat 來監控虛拟記憶體,一般 linux 上的開發者喜歡使用虛拟記憶體來獲得最佳的存儲性能。該指令報告關于核心線程、虛拟記憶體、磁盤、陷阱和 cpu 活動的統計資訊。由 vmstat 指令生成的報告可以用于平衡系統負載活動。系統範圍内的這些統計資訊(所有的處理器中)都計算出以百分比表示的平均值,或者計算其總和。
uptime
uptime 指令告訴你這台伺服器從開機啟動到現在已經運作了多長時間了。同時也包含了從啟動到現在伺服器的平均負載情況
htop — 程序監控
htop 是一個更加先進的互動式的實時監控工具。htop 與 top 指令非常相似,但是他有一些非常豐富的功能,如使用者友好界面管理程序、快捷鍵、橫向和縱向程序等更多的。htop 是一個第三方工具并不包括在 linux 系統中,你需要使用包管理工具進行安裝。
iotop — 監控 linux 磁盤 i/o
iotop 也是和 top 和 htop 指令相似,但是它會有一個報告功能去監控和顯示實時的磁盤 i/o 輸入和輸出和程式程序。這個工具對于查找精确的高的磁盤讀/寫過程是非常有用的。
nmon即奈吉爾性能螢幕
nmon是 nigel's monitor 的縮寫,是一個使用很普遍的開源工具,用來監視 linux 系統的所有資源包括:cpu、記憶體、磁盤使用率、網絡上的程序、nfs、核心等等,并且提供了一個圖形化的工具。
tcpdump — 網絡資料包分析器
tcpdump 是一個簡單、可靠的網絡監控工具,用來做基本的協定分析,看看那些程序在使用網絡以及如何使用網絡。
如果需要擷取詳細的資訊,可以使用 wireshark 。
netstat -natp : 檢視對應的網絡連結
lsof -p pid : 查找對應pid的檔案句柄
lsof -i : 80 : 查找對應端口被哪個程序占用
lsof /tmp/1.txt :查找對應檔案被哪個程序占用
檢視所有存在的線程:
ps xh
手冊中說:h show threads as if they were processes
檢視一個程序起的線程數:
ps -mp <pid>
手冊中說:m show threads after processes
首先使用top等指令找到jvm程序的pid,
pid user pr ni virt res shr s %cpu %mem time+ command
3853 weblogic 18 0 9268m 4.1g 10m s 34.4 6.5 1301:04 java
目前jvm程序的pid是3853,通過jstack指令dump出目前的jvm程序的堆棧資訊:
jstack 3853 >> /tmp/jstack0330.txt
然後使用下面的指令:
ps -mp pid -o thread,tid,time
或者
ps -lfp pid
這個指令的作用,主要是可以擷取到對應一個程序下的線程的一些資訊:
$ ps -mp 3853 -o thread,tid,time
user %cpu pri scnt wchan user system tid time
weblogic 29.3 - - - - - - 21:40:17
weblogic 10.7 24 - 184467 - - 13979 07:39:06
通過 printf "%x\n" 13979 可以将線程id轉化成16進制表示,
繼續通過grep指令即可以查到對應16進制的線程id資訊:
grep 369b /tmp/jstack0330.txt
堆棧資訊中的nid對應的linux作業系統下的tid,就是線程id對應的16進制數字,
tid則是jvm的jmm記憶體規範中的唯一位址定位。
使用grep -a ,可以顯示比對行和之後的幾行,
繼續檢視線程所在堆棧資訊中前後的部分:
grep 369b /tmp/jstack0330.txt -a 10
就可以定位到相關的代碼位置。