性能調優以及分析

1 內存:

free 命令查看

2 CPU

  1. 查看負載  ,通過top 或者uptime 來查看。對於平均負載來說,理想值是爲CPU核數。

    uptime 結果

     17:25:14     up 320 days,  3:15,  2 users,         load average:   0.11,       0.24,         0.28

    當前時間    當前運行時間       有幾個用戶登錄      負載       1分鐘負載 5分鐘負載 15 分鐘過負載

    平均負載含義:是指單位時間內,系統處於可運行狀態和不可中斷狀態的平均進程數,也就是平均活躍進程數
    當負荷達到5.0,就表明你的系統有很嚴重的問題,平均負載並不等於CPU使用率。

    平均負載升高有以下幾種可能:

    1 平均負載高有可能是 CPU 密集型進程導致的;

    2 平均負載高並不一定代表 CPU 使用率高,還有可能是 I/O 更繁忙了;

    3 當發現負載高的時候,你可以使用 mpstat、pidstat,iostat 等工具,輔助分析負載的來源

  2. 查看CPU信息 

    1. 通過查看/proc/cpuinfo 可以查看CPU信息

    2. cat /proc/cpuinfo | grep 'model name' | wc -l 可以查看CPU核數

3 磁盤

top中 %CPU列,有一個wa指標,表示等待io操作佔整體的CPU百分比,比列越高,說明CPU等待io的時間越多,說明需要進行io 優化

df

df命令用於顯示磁盤分區上的可使用的磁盤空間。默認顯示單位爲KB。可以利用該命令來獲取硬盤被佔用了多少空間,目前還剩下多少空間等信息。

du

常用 : du -sh ./* 顯示當前文件夾下所有目錄信息

可以查看某個文件或某個目錄的所佔空間

-h 以人類的方式顯示

-s 顯示總計,不顯示文件大小

--max-depth=1  查看當前目錄下一級子文件和子目錄佔用的磁盤容量,如果不加這個選項的話,會遞歸的吧所有目錄都列出來,很噁心

iostat  (只能看到全局)

tps 磁盤當前每秒隨機讀寫的操作,後面的是當前磁盤每秒的寫入大小與讀大小

iotop 

可以查看每個進程對應的io 情況

stress 可以模擬想磁盤插入數據,來進行檢測

4 虛擬內存

vmstat 是虛擬內存統計,可對操作系統的虛擬內存、進程、IO讀寫、CPU活動等進行監視。它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析

vm delay count   delay 表示間隔時間,count表示顯示次數,如果都不加的話,只顯示一條

pidstat  用於監控全部或指定進程的cpu、內存、線程、設備IO等系統資源的佔用情況.

沒有任何參數顯示所有的。

-w 顯示進程上下文切換信息

-p 顯示指定的進程id

-u:默認的參數,顯示各個進程的cpu使用統計

-r:顯示各個進程的內存使用統計

-d:顯示各個進程的IO使用情況

5 查看進程以及線程情況

1 ps :

ps aux 可以查看所有運行的進程

-mp pid -o THREAD,tid,time 可以查看pid對應的所有線程,以及每個線程的具體情況

-T -p pid  列出進程所有的線程,相當於上述的簡化版,只有tid,沒有其他的

2 top (推薦使用,比較簡單)

top -H -p pid ,可以動態的查看, 結果的pid 即線程id 

3 /proc/pid/status

可以查看進程詳細信息

6   java 

1 jstack pid

堆棧跟蹤工具,用於生成當前時刻的線程快照。可以定位線程出現的問題。

可以查看當前堆棧信息,可以查看線程使用情況。 可以使用 grep grep tid -A30 來獲取指定的信息,這裏的tid需要轉化爲16進制。可以使用 printf '%0x' 123 來獲取 。 也可以通過Thread.getAllStackTraces方法 來獲取,把信息做成一個html頁面,就可以動態顯示。

2 jmap pid 

內存映像工具,可以用於生產對轉存快照。

命令jmap是一個多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆內對象示例的統計信息、查看 ClassLoader 的信息以及 finalizer 隊列。

heap: 顯示Java堆詳細信息   jmap -heap pid 

histo[:live]: 顯示堆中對象的統計信息   jmap -histo:live ,如果指定了live選項,那麼只會計算活動的對象

clstats:打印類加載器信息 , jmap -clstats pid 

finalizerinfo: 顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象

dump:<dump-options>:生成堆轉儲快照,並輸出到文件,  jmap –dump:file=xxx pid 

F: 當-dump沒有響應時,使用-dump或者-histo參數. 在這個模式下,live子參數無效.

help:打印幫助信息

J<flag>:指定傳遞給運行jmap的JVM的參數

3 jps

顯示當前運行到虛擬機上的所有java程序,類似於linux的ps

默認顯示pid 和啓動類

-m 可以顯示具體信息,包括啓動時候的參數

4 jstat 

jstat -gcutil 16511 1000 10       在1000毫秒內 顯示 10次  16511進程 gc信息
虛擬機統計信息監視工具。

gcutil 結果分析

S0: Survivor space 0 utilization as a percentage of the space's current capacity. Survivor0 使用了該總空間的百分比

S1: Survivor space 1 utilization as a percentage of the space's current capacity. Survivo 1 

E: Eden space utilization as a percentage of the space's current capacity. 新生代

O: Old space utilization as a percentage of the space's current capacity. 老年代

M: Metaspace utilization as a percentage of the space's current capacity. 元空間/永久代,Java1.8 可能爲P

CCS: Compressed class space utilization as a percentage. 壓縮類空間利用率爲百分比。

YGC: Number of young generation GC events. 新生代從啓動爲止的GC次數

YGCT: Young generation garbage collection time. 新生代垃圾收集總時間,單位爲s

FGC: Number of full GC events. FullGC次數。

FGCT: Full garbage collection time. FullGC總時間

GCT: Total garbage collection time. 垃圾回收總時間。

5 jinfo

java信息配置工具,可以實時查看和調整虛擬機的各項參數。

no option 輸出全部的參數和系統屬性

-flag name 輸出對應名稱的參數

-flag [+|-]name 開啓或者關閉對應名稱的參數

-flag name=value 設定對應名稱的參數

-flags 輸出全部的參數

-sysprops 輸出系統屬性

6 jvisualvm :

可視化查看java進程信息。

分析dump文件: https://blog.csdn.net/lkforce/article/details/60878295

遠程連接: https://www.cnblogs.com/gossip/p/6141941.html

6 分析 Java :

https://mp.weixin.qq.com/s/g8KJhOtiBHWb6wNFrCcLVg

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章