1、 w或者uptime都可以直接展示負載
$uptime
09:32:14 up 695 days, 23:42, 2 users, load average: 0.00, 0.01, 0.05
$w
09:32:00 up 695 days, 23:42, 2 users, load average: 0.00, 0.01, 0.05
其中load average分別對應過去的1分鍾、5分鍾、15分鍾的負載均衡值
2、top 查看服務器負載均衡
top 指令能夠清晰的展示出系統的狀態,而且是實時監控的 q:退出
Tasks 行展示的是目前的線程使用情況,要注意的是zombie,表示僵屍進程,不為0則表示有進程出現問題
Cpus 行展示了當前的CPU狀態,us標識用戶進程占用的cpu比例,sy代表內核進程占用的比例,id表示空閑的CPU百分比
wa代表IO等待所占用的CPU時間的百分比,wa占用超多30%則表示IO壓力大
Mem 當前內存的狀態,total標識總共的,free代表剩余的,used代表已使用的 buffers是目錄緩存
Swap行同Mem行,cached表示緩存,用戶已打開的文件。如果Swap的used很高,則表示系統內存不足。
top下的指令:
1(指令):查看服務器有多少CPU,以及每個CUP的使用情況,一般情況下,服務器的合理負載是CPU核數*2,超過了就說明服務器的運行有一定的壓力
shift + "c" :進程按CPU使用率從大到小排序
shift + "p" : 進程按內存使用率從大到小排序
3、 iostat命令
top命令是不夠的,因為它僅能展示CPU和內存的使用情況,對於負載的另一個原因IO沒有清晰明確的展示
iostat可以了解IO的開銷
指令:iostat -x 1 10 -x表示顯示所有參數的信息,1表示每隔1秒監控一次,10 表示共監視10次
其中:rsec/s (r/s)表示讀入,wsec/s (w/s)表示每秒寫入,兩個參數某一個表示磁盤IO有很大壓力,util表示IO使用率,如果接近100%,表示IO滿負載運轉。
4、 相關指令:
a、 查看磁盤:
df -h , df 命令用於顯示磁盤分區上的可使用磁盤空間。默認單位是kb -h 使用-h選項以KB以上的單位來顯示,可讀性高
b、 查看內存大小:
free -h / free -m
其中 used - buff/cache 反應的是被程序真真實實吃掉的內存
而 free + buff/cache 反應的是可以挪用的內存總數
c、 查看cpu
cat /proc/cpuinfo 讀取cpu內存詳情
grep "model name" /proc/cpuinfo | wc -l 讀取cpu個數
d、 查看系統內存
cat /proc/meminfo ------------------------------------proc 文件下邊記錄着很多cpu、內存信息
e、 查看每個進程的情況
cat /proc/5346/status 5347是pid ----------------proc 文件下邊有很多都是進程的記錄
f、 查看復雜
w / uptime
g、 查看查看服務器負載情況
top
5、性能監視sar指令
sar -u : 顯示cpu信息,-u 是sar的默認選項,改輸出以百分比顯示cpu的使用情況
sar 5 10 : sar 以每5秒間隔取得10次樣本
sar -n { DEV | EDEV | NFS | NFSD | SOCK | ALL } :sar 提供6中不同的語法來顯示信息
6、查看命令歷史(含時間戳)
這個很重要,可以查看歷史的指令,來學習指令
export HISTTIMEFORMAT='%F %T ';history| more
7、查看文件夾和文件的大小
du -h --max-depth=0 dm 查看dm目錄大小
du -h --max-depth=1 dm 查看dm目錄大小,以及dm各文件文件夾的大小
du -h --max-depth=0 查看當前文件夾大小
8、linux 負載高,主要是CPU的使用、內存的使用、IO消耗三部分。
9、查詢linux 負載高,檢查
a、w 或者 uptime 來展示負載
load average 分別對應過去1分鍾、5分鍾、15分鍾的負載平均值
load :是計算機干活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a compute system is doing)
簡單的說就是進程隊列的長度。loand average 就是一段時間(1分、5分、15分)內的平均Load
如何判斷系統是否已經over Load :
對一般的系統來說,根據cpu數量去判斷。如果平均負載始終在1.2以下,而你有2顆cup的機器。那么基本不會出現cpu不夠用的情況。
也就是Load平均要小於Cpu的數量,一般是會根據15分鍾那個load 平均值為首先。
b、 top 來查看服務器負載
Tasks行展示了目前的進程總數及所處狀態,要注意zombie,表示僵屍進程,不為0則表示有進程出現問題。 ------關注 zombie
Cpu(s)行展示了當前CPU的狀態,us表示用戶進程占用CPU比例,sy表示內核進程占用CPU比例,id表示空閑CPU百分比,
wa表示IO等待所占用的CPU時間的百分比。wa占用超過30%則表示IO壓力很大。 --------關注 wa
Mem行展示了當前內存的狀態,total是總的內存大小,userd是已使用的,free是剩余的,buffers是目錄緩存。
Swap行同Mem行,cached表示緩存,用戶已打開的文件。如果Swap的used很高,則表示系統內存不足。 -----關注swap
在top命令下,按1,則可以展示出服務器有多少CPU,及每個CPU的使用情況
shift + "c" : cpu 使用率從大到小排序
shift + "p" 內存使用率從大到小排序,結合使用很容易定位那些服務使用了較高的CPU和內存。
c、iostat 來查看io開銷
其中rsec/s表示讀入,wsec/s表示每秒寫入,這兩個參數某一個特別高的時候就表示磁盤IO有很大壓力
util表示IO使用率,如果接近100%,說明IO滿負荷運轉。
10、查看系統的負載情況
$ vmstat
r 列表示運行和等待cpu時間片的進程數,如果長期大於1,說明cpu不足,需要增加cpu。
b 列表示在等待資源的進程數,比如正在等待I/O、或者內存交換等。 cpu 表示cpu的使用狀態
us 列顯示了用戶方式下所花費 CPU 時間的百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大於50%,需要考慮優化用戶的程序。
sy 列顯示了內核進程所花費的cpu時間的百分比。這里us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
wa 列顯示了IO等待所占用的CPU時間的百分比。這里wa的參考值為30%,如果wa超過30%,說明IO等待嚴重,
這可能是磁盤大量隨機訪問造成的,也可能磁盤或者磁盤訪問控制器的帶寬瓶頸造成的(主要是塊操作)。
id 列顯示了cpu處在空閑狀態的時間百分比 system 顯示采集間隔內發生的中斷數
in 列表示在某一時間間隔中觀測到的每秒設備中斷數。
cs列表示每秒產生的上下文切換次數,如當 cs 比磁盤 I/O 和網絡信息包速率高得多,都應進行進一步調查。
swpd 切換到內存交換區的內存數量(k表示)。如果swpd的值不為0,或者比較大,比如超過了100m,只要si、so的值長期為0,系統性能還是正常
free 當前的空閑頁面列表中內存數量(k表示) buff 作為buffer cache的內存數量,一般對塊設備的讀寫才需要緩沖
cache: 作為page cache的內存數量,一般作為文件系統的cache,如果cache較大,說明用到cache的文件較多,如果此時IO中bi比較小,說明文件系統效率比較好。 si 由內存進入內存交換區數量。 so由內存交換區進入內存數量。 IO
bi 從塊設備讀入數據的總量(讀磁盤)(每秒kb)。 bo 塊設備寫入數據的總量(寫磁盤)(每秒kb)
這里我們設置的bi+bo參考值為1000,如果超過1000,而且wa值較大應該考慮均衡磁盤負載,可以結合iostat輸出來分析
11、Load誤解
a:系統load高一定是性能有問題。
真相:Load高也許是因為在進行cpu密集型的計算
b:系統Load高一定是CPU能力問題或數量不夠。
真相:Load高只是代表需要運行的隊列累計過多了。但隊列中的任務實際可能是耗Cpu的,也可能是耗i/0及其他因素的。
c:系統長期Load高,首先增加CPU
真相:Load只是表象,不是實質。增加CPU個別情況下會臨時看到Load下降,但治標不治本。
d:在Load average 高的情況下如何鑒別系統瓶頸。
是CPU不足,還是io不夠快造成或是內存不足?
12、jdk自帶的有用的工具
jsp :羅列出目前再服務器上運行的java程序及進程ID 有的時候(tomcat)不好用,所以一般使用 ps -ef|grep java 來查找
jstat :用於輸出java程序內存使用情況,包括新生代、老年代、元數據區容量、垃圾回收的情況
jstat -gcutil 1133 2000 2 :1133 是java的進程 2000毫秒執行一次 執行兩次
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
96.12 0.00 57.37 64.03 98.39 96.87 42 0.530 3 0.335 0.865
96.12 0.00 57.37 64.03 98.39 96.87 42 0.530 3 0.335 0.865
S0:幸存1區當前使用比例
S1:幸存2區當前使用比例
E:伊甸園區使用比例
O:老年代使用比例
M:元數據區使用比例
CCS:壓縮使用比例
YGC:年輕代垃圾回收次數
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間
jmap :用於輸出java程序中內存對象的使用情況,包括那些對象,對象的數量
jmap -histo 3618
一般我們都進行打印數據的:jmap -dump:live,format=b,file=heap.hprof 3618
jstack:用戶輸出java程序線程棧的情況,常用於定位因為某些線程問題造成的故障或性能問題。
jstack 3618 > jstack.out
上述命令將進程ID為3618的棧信息輸出到外部文件,便於傳輸到windows電腦上進行分析
導出查看分析線程waiting 的原因
13、windows 有一個 jvisualvm.exe 軟件
就在在JDK安裝目錄下的bin目錄下面,雙擊即可打開