概念:top命令是Linux下經常使用的系統性能分析工具,能實時查看系統中各個進程資源佔用狀況。java
參數:mysql
-p 指定進程號 eg:top -p PID 查看進程ID爲PID的進程 -H 查看各個線程資源佔用的狀況。 eg:top 查看各個進程 資源佔用的狀況。 top -H 查看各個線程 資源佔用的狀況。 top -Hp PID 查看進程ID爲PID的進程中 全部線程 的資源佔用狀況。 -c 查看進程的完整命令(COMMAND) eg:top -c 查看各個進程 資源佔用的狀況,其中命令(COMMAND)項顯示詳細信息。 -n 更新n次後,退出top命令。 eg:top -n 5 更新5次後,中止更新並退出top命令。
1)系統資源佔用狀況:linux
top - 15:17:57 up 366 days, 21:32, 1 user, load average: 0.03, 0.17, 0.14 Tasks: 724 total, 1 running, 723 sleeping, 0 stopped, 0 zombie Cpu(s): 0.4%us, 0.1%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 132042876k total, 101359588k used, 30683288k free, 171176k buffers Swap: 20971512k total, 407892k used, 20563620k free, 26919260k cached top:當前時間、系統啓動時間、當前系統登陸用戶數目、平均負載 Tasks:進程總數、運行進程數、睡眠進程數、終止進程數、僵死進程數。 Cpu(s): us 用戶空間佔用cpu百分比 sy 內核空間佔用cpu百分比 ni 用戶進程空間內改變過優先級的進程佔用cpu百分比 id 空閒cpu百分比 wa 等待輸入輸出(I/O)的cpu百分比 hi cpu處理硬件中斷的時間 si cpu處理軟件中斷的時間 st 用於有虛擬cpu的狀況,表示被虛擬機偷掉的cpu時間 說明: us高的解決方法:CPU us 高的緣由主要是執行的線程不須要任何掛起動做,且一直執行,致使CPU沒有機會去調度執行其它的線程。 sy高的解決方法:CPU sy 高的緣由主要是線程的運行狀態要常常切換,對於這種狀況,常見的一種優化方法是減小線程數。 補充: 1)查看每一個CPU的性能數據:使用top的交互命令數字1 注:若是機器的cpu個數較多時,按1會提示"Sorry, terminal is not big enough",這時,咱們可使用mpstat命令來查看每一個cpu的狀況。 2)查看每一個線程的性能信息:使用top的交互命令H 或 使用top -H 常見狀況: 1>某個線程CPU利用率一直100%,則說明是這個線程有可能有死循環,將PID記錄下來。 2>某個線程一直在TOP 10的位置,這說明這個線程可能有性能問題。 3>CPU利用率高的幾個線程在不停變化,說明並非由某一個線程致使CPU偏高。 Mem: total 總的物理內存 used 使用物理內存大小 free 空閒物理內存 buffers 用內核緩存的內存大小 Swap: total 總的交換空間大小 used 已經使用交換空間大小 free 空間交換空間大小 cached 緩衝的交換空間大小 補充:buffers於cached區別:buffers指的是塊設備的讀寫緩衝區,cached指的是文件系統自己的頁面緩存。
2)每一個進程的資源佔用狀況:redis
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 43997 tomcat_a 20 0 50460 26m 1988 S 19.6 0.0 739:54.12 dataservice 20227 mysql 20 0 77.9g 54g 6248 S 3.3 43.5 99046:41 mysqld 52786 root 20 0 4318m 429m 736 S 1.7 0.3 13389:54 redis-server 44077 tomcat_a 20 0 26440 19m 1908 S 0.3 0.0 23:02.34 dataservice 77400 root 20 0 194m 3012 1020 S 0.3 0.0 275:09.63 snmpd 124158 tomcat_a 20 0 15560 1784 948 R 0.3 0.0 0:03.82 top 1 root 20 0 19356 540 316 S 0.0 0.0 0:02.66 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd PID 進程號 USER 運行用戶 PR 優先級,說明:PR其實就是進程調度器分配給進程的時間片長度,單位是時鐘個數,linux下一個時鐘約爲10ms,PR值爲20則表示這個進程的時間片爲200ms NI 任務nice值 VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES RES 物理內存用量 SHR 共享內存用量 S 進程的狀態。 S 睡眠狀態 D 不可中斷的睡眠狀態 R 運行狀態 Z 僵死狀態 T 中止或跟蹤狀態 %CPU 從上一次刷新到如今,該進程佔用cpu時間和總時間的百分比 %MEM 佔用的物理內存與總內存的百分比 TIME+ 累計cpu佔用時間 COMMAND 該進程的命令名稱
3)每一個線程的資源佔用狀況:sql
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22855 tomcat_a 20 0 5650m 56m 2036 S 0.0 0.4 0:00.00 java 22856 tomcat_a 20 0 5650m 56m 2036 S 0.0 0.4 0:01.79 java 22857 tomcat_a 20 0 5650m 56m 2036 S 0.0 0.4 1:20.30 java