服務端程序除了應用自己性能外,依賴與服務器自己的性能,今天學習瞭如何監測服務器性能。包括:CPU、內存、網絡IO和磁盤使用率。
今天先看看如何監測CPU。java
oot@SSP001:[/root]vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 79484 90085784 591052 79229448 0 0 0 6 0 0 1 1 97 0 0
其中CPU部分表明cpu的監測數據。
具體含義以下:redis
名稱 | 含義 | 英文 |
---|---|---|
us | 用戶態CPU時間(百分比) | user time |
sy | 系統態CPU時間(百分比) | system time |
id | 空閒CPU時間(百分比) | Time spent idle |
wa | 等待IO的CPU時間 | Time spent waiting for IO |
st | 不知道什麼鬼,忽略 | Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown. |
參數中須要注意的是若是wa很高,表明IO等待時間很高,有多是磁盤IO出現瓶頸。性能優化
[root@Hwseeker-Adx02 ~]# mpstat -P ALL 10 1 Linux 2.6.32-573.3.1.el6.x86_64 (Hwseeker-Adx02) 2018年01月23日 _x86_64_ (24 CPU) 16時45分03秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 16時45分13秒 all 1.96 0.00 0.68 0.00 0.00 0.15 0.00 0.00 97.21 16時45分13秒 0 8.32 0.00 1.83 0.00 0.00 0.20 0.00 0.00 89.64 16時45分13秒 1 2.21 0.00 0.60 0.00 0.00 0.20 0.00 0.00 96.98 16時45分13秒 2 2.23 0.00 0.61 0.00 0.00 0.30 0.00 0.00 96.86 16時45分13秒 3 3.25 0.00 1.32 0.00 0.00 0.61 0.00 0.00 94.82 16時45分13秒 4 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 99.60 16時45分13秒 5 6.38 0.00 2.13 0.00 0.00 1.01 0.00 0.00 90.49 16時45分13秒 6 1.20 0.00 0.40 0.00 0.00 0.00 0.00 0.00 98.40 16時45分13秒 7 0.60 0.00 0.60 0.00 0.00 0.10 0.00 0.00 98.69 16時45分13秒 8 0.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 98.99 16時45分13秒 9 0.20 0.00 0.10 0.00 0.00 0.00 0.00 0.00 99.70 16時45分13秒 10 1.10 0.00 0.20 0.00 0.00 0.00 0.00 0.00 98.70 16時45分13秒 11 0.50 0.00 0.40 0.00 0.00 0.00 0.00 0.00 99.10 16時45分13秒 12 2.92 0.00 0.70 0.00 0.00 0.10 0.00 0.00 96.27 16時45分13秒 13 0.50 0.00 0.50 0.00 0.00 0.10 0.00 0.00 98.90 16時45分13秒 14 6.90 0.00 1.93 0.00 0.00 0.61 0.00 0.00 90.57 16時45分13秒 15 5.99 0.00 1.42 0.00 0.00 0.61 0.00 0.00 91.98 16時45分13秒 16 0.10 0.00 0.10 0.00 0.00 0.00 0.00 0.00 99.80 16時45分13秒 17 0.71 0.00 0.81 0.00 0.00 0.10 0.00 0.00 98.38 16時45分13秒 18 0.40 0.00 0.30 0.00 0.00 0.00 0.00 0.00 99.30 16時45分13秒 19 0.60 0.00 0.50 0.00 0.00 0.00 0.00 0.00 98.89 16時45分13秒 20 0.30 0.00 0.40 0.00 0.00 0.00 0.00 0.00 99.30 16時45分13秒 21 0.20 0.00 0.30 0.00 0.00 0.00 0.00 0.00 99.50 16時45分13秒 22 0.30 0.00 0.30 0.00 0.00 0.00 0.00 0.00 99.40 16時45分13秒 23 1.31 0.00 0.40 0.00 0.00 0.00 0.00 0.00 98.29
mpstat能夠查看每一個cpu的狀態,能夠發現應用中一些線程比其餘線程消耗了更多CPU週期,仍是全部線程基本平分CPU週期。若是是全部線程平分CPU週期,表明應用擴展性很好。
mpstat命令具體使用方法能夠自行百度。這裏咱們須要關注的仍是%usr/%sys/%iowait這幾個字段。服務器
[root@Hwseeker-Adx02 ~]# top top - 16:51:46 up 762 days, 16:33, 1 user, load average: 0.65, 0.40, 0.29 Tasks: 598 total, 1 running, 596 sleeping, 0 stopped, 1 zombie Cpu(s): 1.6%us, 0.7%sy, 0.0%ni, 97.5%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 132119192k total, 130669000k used, 1450192k free, 1157188k buffers Swap: 131071996k total, 4017704k used, 127054292k free, 88117860k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 36660 root 20 0 24.3g 4.7g 13m S 16.8 3.7 4401:08 java 36888 root 20 0 24.4g 4.7g 13m S 14.8 3.8 4332:33 java 52318 root 20 0 2353m 1.0g 39m S 5.9 0.8 67399:27 firefox 5631 root 20 0 1252m 29m 1924 S 2.0 0.0 22434:02 main 21114 root 20 0 150m 13m 1364 S 2.0 0.0 664:08.76 redis-server
top命令不只能監控用戶態CPU、系統態cpu、空閒率,並且還會按照cpu使用率把進程列出來,使用起來很方便。網絡
運行隊列中是哪些正在等待可用CPU的輕量級進程。對於判斷CPU是否滿負荷運轉頗有幫助。ide
對於調度隊列長度,該如何處理呢? 性能
oot@SSP001:[/root]vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 79484 90085784 591052 79229448 0 0 0 6 0 0 1 1 97 0 0
其中r列就是隊列長度。學習
本博文內容爲《Java性能優化權威指南》的讀書筆記整理而來優化