Unix平台下的常用命令技巧之资源与性能
2019獨角獸企業重金招聘Python工程師標準>>>
簡述
本節介紹了一些查看系統信息和監測系統資源與性能的工具,使用性能監測工具對當前系統有一個基本的了解,并根據收集到的信息選擇其他相應的工具,進一步分離出性能瓶頸和尋找解決辦法。本節根據查看系統信息、磁盤使用和I/O監測、CPU和內存監測、網絡監測進行分類,介紹幾種性能監測工具和監測手段,供大家在日常工作中選擇參考。
?
?
目錄
一、系統信息查看
1、查看系統版本號的幾個命令
2、如何在Solaris下獲取內存大小
3、如何在Solaris下獲取CPU速率
?
二、磁盤使用和I/O監測
1、檢查磁盤使用狀況工具df、du
2、iostat 監視磁盤命令
?
三、CPU和內存使用監測
1、用vmstat監測CPU和內存,vmstat列出的屬性詳解
2、prstat給出CPU和內存使用情況的動態注解
3、mpstat命令報告每個處理器的統計信息
4、proc工具報告某單獨進程屬性
5、pmap命令報告單獨進程的內存空間布局情況
6、使用ps命令獲取進程的內存、CPU利用狀況及排序
7、uptime和w命令查看過去15分鐘內系統的負載情況
8、使用top工具監測性能
9、如何增加交換空間
?
四、檢查網絡性能工具
1、snoop診斷網絡報文工具
2、nfsstat監測NFS系統
3、netstat監測網絡接口
4、Solaris下如何知道哪個進程使用了哪個端口
5、ping 診斷網絡連接和阻塞問題
6、ipcs顯示與內部進程通信有關的統計信息
7、traceroute顯示路由到目的地主機的報文,診斷網絡擁堵
8、route get ip獲取通過的網關
?
?
?
?
內容
一、系統信息查看
========================================================================
1、查看系統版本號的幾個命令
?
1)看版本號
# uname -a
SunOS sunserver1 5.8 Generic_108528-13 sun4u sparc SUNW,Sun-Fire-280R
?
2)看kernel版本號
# showrev
Hostname: sunserver1
Hostid: 8318005d
Release: 5.8
Kernel architecture: sun4u
Application architecture: sparc
Hardware provider: Sun_Microsystems
Domain:
Kernel version: SunOS 5.8 Generic 108528-19 January 2003
相關命令:
#hostid
#hostname
?
3)看安裝的補丁id
#showrev –p
?
4)看是否安裝了某個補丁
#pkginfo |grep XXXXX
========================================================================
2、如何在Solaris下獲取內存大小
?
有以下幾個命令供參考:
/usr/platform/`uname -m`/sbin/prtdiag -v | grep Memory
prtconf -v | grep Memory
如果裝了GNU top,也可以直接用top命令看到。
========================================================================
3、如何在Solaris下獲取CPU速率
?
有以下幾個命令供參考:
# psrinfo -v
# psrinfo | grep on-line | wc -l 簡單給出CPU數目
# /usr/platform/`uname -i`/sbin/prtdiag -v
# /usr/platform/`uname -m`/sbin/prtdiag -v
# /usr/bin/netstat -k cpu_info0
========================================================================
?
?
二、磁盤使用和I/O監測
========================================================================
1、檢查磁盤使用狀況工具df、du
df列出文件系統的塊大小,及使用情況
# df
/????????????????? (/dev/dsk/c0t0d0s0 ):? 745246 塊?? 667064 文件
/proc????????????? (/proc???????????? ):?????? 0 塊???? 7816 文件
/dev/fd??????????? (fd??????????????? ):?????? 0 塊??????? 0 文件
/etc/mnttab??????? (mnttab??????????? ):?????? 0 塊??????? 0 文件
/var/run?????????? (swap????????????? ): 1227264 塊??? 54271 文件
/tmp?????????????? (swap????????????? ): 1227264 塊??? 54271 文件
/space???????????? (/dev/dsk/c0t0d0s3 ): 2023574 塊? 1470851 文件
?
df –k以字節列出系統使用情況
# df -k
文件系統????????????? 千字節??? 用了??? 可用 容量????? 掛接在
/dev/dsk/c0t0d0s0??? 6191949 5819326? 310704??? 95%??? /
/proc????????????????????? 0?????? 0?????? 0???? 0%??? /proc
fd???????????????????????? 0?????? 0?????? 0???? 0%??? /dev/fd
mnttab???????????????????? 0?????? 0?????? 0???? 0%??? /etc/mnttab
swap????????????????? 488768?????? 0? 488768???? 0% ???/var/run
swap????????????????? 490240??? 1472? 488768???? 1%??? /tmp
/dev/dsk/c0t0d0s3??? 12530787 11518984? 886496??? 93%??? /space
?
列出某一目錄所在的設備使用情況
# df -k /slli
文件系統????????????? 千字節??? 用了??? 可用 容量????? 掛接在
/dev/dsk/c0t0d0s0??? 6191949 5819326? 310704??? 95%??? /
?
du列出某一目錄的使用大小
# du -s /export/home
852690? /export/home
?
# du -ks /export/home
426345? /export/home
?
列出某一目錄下所有子目錄及文件的大小
# du /opt
8?????? /opt/SUNWebnfs/JFileChooser-patch/com/sun/java/swing/plaf/windo
10????? /opt/SUNWebnfs/JFileChooser-patch/com/sun/java/swing/plaf
12????? /opt/SUNWebnfs/JFileChooser-patch/com/sun/java/swing
14????? /opt/SUNWebnfs/JFileChooser-patch/com/sun/java
16????? /opt/SUNWebnfs/JFileChooser-patch/com/sun
18???????????????????? /opt/SUNWebnfs/JFileChooser-patch/com
… …
?
========================================================================
2、iostat 監視磁盤命令
?
iostat命令報告磁盤的使用情況。表格中的每一行代表一個磁盤的活動信息。常用的選項有這些:
?
參數n ???按cXtYdZ格式指定磁盤。
# iostat -n 2
?? tty?????? c0t0d0???????? fd0????????? c0t2d0????????? cpu
?tin tout kps tps serv? kps tps serv? kps tps serv?? us sy wt id
?? 0?? 16 476? 23??? 7??? 0?? 0??? 0??? 0?? 0??? 0??? 2? 2 10 86
?? 0?? 97 170? 22?? 11??? 0?? 0??? 0??? 0?? 0??? 0??? 0? 3? 0 97
?? 0?? 33? 24?? 3??? 1??? 0?? 0??? 0??? 0?? 0??? 0??? 0? 0? 0 100
?? 0?? 34? 12?? 2??? 1??? 0?? 0??? 0??? 0?? 0??? 0??? 0? 0? 0 100
?? 0?? 34?? 0?? 0??? 0??? 0?? 0??? 0??? 0?? 0??? 0??? 0? 0? 0 100
?
參數x ??報告擴展統計信息。
# iostat -x
????????????????? extended device statistics
device?????? r/s??? w/s?? kr/s?? kw/s wait actv? svc_t? %w? %b
dad0??????? 21.2??? 1.4? 465.4?? 10.9? 0.0? 0.1??? 6.5?? 0? 12
fd0????????? 0.0??? 0.0??? 0.0??? 0.0? 0.0? 0.0??? 0.0?? 0?? 0
sd0????????? 0.0??? 0.0??? 0.0??? 0.0? 0.0? 0.0??? 0.0?? 0?? 0
?
參數z ??這個選項在Solaris 8操作環境中是新的。它使得在采樣間隔中沒有磁盤活動的那些行被省略掉,這樣可以讓輸出簡短一些并且突出那些有活動的磁盤。
# iostat -z 2
?? tty??????? dad0????????? fd0?????????? sd0??????????? cpu
?tin tout kps tps serv? kps tps serv? kps tps serv?? us sy wt id
?? 0?? 16 476? 23??? 7??? 0?? 0??? 0??? 0?? 0??? 0??? 2? 2 10 86
?? 0?? 97? 12?? 1??? 7??? 0?? 0??? 0??? 0?? 0??? 0??? 0? 0? 0 100
?
參數p和P 報告分區前(per-partition)的I/O統計信息,當察看內存交換設備的時候有用。
# iostat -p 2
?? tty??????? dad0?????? ??dad0,a??????? dad0,b??????? dad0,c????????? cpu
?tin tout kps tps serv? kps tps serv? kps tps serv? kps tps serv?? us sy wt id
?? 0?? 16 476? 23??? 7??? 1?? 0?? 28??? 0?? 0?? 27??? 0?? 0??? 0??? 2? 2 10 86
?? 0? 117? 12?? 1??? 1??? 0?? 0??? 0??? 0?? 0?? ?0??? 0?? 0??? 0??? 0? 0? 0 100
?
參數E ? 對于找出產生錯誤的磁盤有用。
# iostat -nE
c0t0d0????????? Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Model: ST320011A??????? Revision: 3.19???? Serial No: 3HT3XQ9X
Size: 20.02GB <20019879936 bytes>
Media Error: 0 Device Not Ready: 0? No Device: 0 Recoverable: 0
Illegal Request: 0
c0t2d0????????? Soft Errors: 0 Hard Errors: 2 Transport Errors: 0
Vendor: LG?????? Product: CD-ROM CRD-8483B Revision: 1.02 Serial No:
Size: 18446744073.71GB <-1 bytes>
Media Error: 0 Device Not Ready: 2 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0
?
?
此外,對于磁盤鏡像,可能也會影響到一些I/O性能。
========================================================================
?
?
三、CPU和內存使用監測
========================================================================
1、用vmstat監測CPU和內存,vmstat列出的是些什么屬性?
?
# vmstat 2
?procs???? memory??? ????????page??????????? disk????????? faults????? cpu
?r b w?? swap? free? re? mf pi po fr de sr 1m 1m 1m 2m?? in?? sy?? cs us sy id
?0 0 0 5235888 387408 20 135 10 2? 1? 0? 0? 0? 0? 0? 0? 170? 599? 286? 0? 2 98
?0 0 0 5192424 506360 2?? 4? 0? 0? 0? 0? 0? 0? 0? 0? 0? 152?? 67? 173? 0? 0 100
?0 0 0 5192424 506360 0?? 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? 149? 138? 175? 0? 0 99
?0 0 0 5192424 506360 0?? 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? 131?? 36? 146? 0? 0 100
?0 0 0 5192424 506360 0?? 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? 156? ?45? 161? 0? 0 100
?0 0 0 5192424 506360 0?? 0? 0? 0? 0? 0? 0? 0? 0? 0? 0? 157? 101? 172? 0? 0 100
?
vmstat各項:
procs:
r-->在運行隊列中等待的進程數
b-->在等待io的進程數
w-->可以進入運行隊列但被替換的進程
memoy
swap-->現時可用的交換內存(k表示)
free-->空閑的內存(k表示)
pages
re--》回收的頁面
mf--》非嚴重錯誤的頁面
pi--》進入頁面數(k表示)
po--》出頁面數(k表示)
fr--》空余的頁面數(k表示)
de--》提前讀入的頁面中的未命中數
sr--》通過時鐘算法掃描的頁面
disk 顯示每秒的磁盤操作。 s表示scsi盤,0表示盤號
fault 顯示每秒的中斷數
in--》設備中斷
sy--》系統中斷
cy--》cpu交換
cpu 表示cpu的使用狀態
cs--》用戶進程使用的時間
sy--》系統進程使用的時間
id--》cpu空閑的時間
如果 r經常大于 4 ,且id經常少于40,表示cpu的負荷很重。
如果pi,po 長期不等于0,表示內存不足。
如果disk 經常不等于0, 且在 b中的隊列 大于3, 表示 io性能不好。
?
?
CPU能力不足的例子。
# vmstat 15
procs ????? memory page ?????? disk ?????? faults cpu
r b w swap free re mf pi po fr de sr m0 m1 m2 m3 in sy cs us sy id
45 0 0 2887216 182104 3 707 449 6 455 0 80 2 6 1 0 1531 5797 983 61 30 9
58 0 0 2831312 46408 5 983 582 56 3211 0 492 0 0 0 0 1413 4797 1027 69 31 0
55 0 0 2830944 56064 2 649 656 3 806 0 121 0 0 0 0 1441 4627 989 69 31 0
57 0 0 2827704 48760 4 818 723 6 800 0 121 0 0 1 0 1606 4316 1160 66 34 0
56 0 0 2824712 47512 6 857 604 56 1736 0 261 0 0 1 0 1584 4939 1086 68 32 0
58 0 0 2813400 47056 7 856 673 33 2374 0 355 0 0 0 0 1676 5112 1114 70 30 0
60 1 0 2816712 49464 7 861 720 6 731 0 110 7 0 3 0 2329 6131 1067 64 36 0
58 0 0 2817552 48392 4 585 521 0 996 0 146 0 0 0 0 1357 6724 1059 71 29 0
?
在"procs"下面標著"r"的一列是等待獲得CPU的進程運行隊列中的進程數。"id"列是CPU空閑時間。這臺機器沒有足夠的CPU資源以滿足進程運行的需要,這可以從它的大部分CPU時間花在用戶空間里看出來(看"us"列)。
?
這種情況解決辦法,增加更多的CPU,或者,配合使用其他相關工具查出資源耗費較多的進程,對應用程序的代碼作性能分析,看是否可以優化。
?
vmstat中的"fr"列確實反映了空閑并且沒有被頁面緩存所使用的內存。使用-p選項,給出更準確的頁面調度行為細節。
?
為了確定是否有內存不足的情況存在,同時檢查 ("sr",也就是掃描率)和交換分區的磁盤I/O流量(用iostat -P)。如果大量的I/O活動由文件系統產生并且需要運行頁面掃描程序為I/O釋放頁面,"sr"列會有比較大的數值。
?
保存如何正常運轉的樣例。這樣可以很容易地收集和保存每月的性能數據進行比較,如 vmstat, mpstat, iostat
?
========================================================================
2、prstat給出CPU和內存使用情況的一個動態注解
?
示例:
#prstat -cvm的輸出結果非常有用。
?
========================================================================
3、mpstat命令報告每個處理器的統計信息
?
mpstat命令報告每個處理器的統計信息,表格中的每一行代表一個處理器的活動情況。
#? mpstat 5
CPU minf mjf xcal? intr ithr? csw icsw migr smtx? srw syscl? usr sys? wt idl
? 0??? 3? 19??? 0?? 451? 327? 300?? 11??? 0??? 0??? 0?? 322??? 2?? 2? 10? 86
? 0??? 1?? 0??? 0?? 405? 303? 258??? 3??? 0??? 0??? 0?? 176??? 0?? 0?? 0 100
? 0??? 0 134??? 0?? 711? 456? 559?? 21??? 0??? 0??? 0?? 622??? 9?? 8? 34? 49
? 0??? 2? 28??? 0?? 644? 434? 703? 143??? 0??? 0??? 0? 1392?? 28? 12? 15? 45
? 0??? 0? 23??? 0?? 624? 412? 478?? 35??? 0??? 0??? 0?? 941?? 10? 18? 14? 57
?
mpstat可以確定每一個CPU都在花時間做什么:比如,分配給系統、用戶、等待、空閑時間、系統調用、鎖競爭、中斷、錯誤、交叉調用。
mpstat的"wt"列表明等待時間過多。 用戶任務花時間太長。 作為你積極的維護計劃的一部分,檢查/var/adm/messages中有沒有比如磁盤重試之類的硬件問題或者有沒有額外的消息產生也是很有價值的。
?
大百科CPU 100%案例:
大百科SUN系統經常報CPU 100%,CPU占用最高的進程有時竟然是一些僵尸進程,殺掉后CPU立刻降下來,在/var/adm/messages中瘋狂報如下信息:
Mar? 3 16:45:15 dbksvr unix: [ID 340762 kern.notice] from Memory Module 1901
Mar? 3 16:45:15 dbksvr unix: [ID 221138 kern.notice] ?CONSIDER REPLACING THE MEMORY MODULE.
Mar? 3 16:45:15 dbksvr unix: [ID 547813 kern.notice] Multiple Softerrors:
Mar? 3 16:45:15 dbksvr unix: [ID 356634 kern.notice] 256 Intermittent, 0 Persistent, and 0 Sticky Softerrors accumulated
懷疑時硬件內存條問題,當事務量小時,內存用不到這條有問題的,當事務量大時,開始使用此有問題的內存造成死鎖,CPU高居100%.
?
========================================================================
4、proc工具報告進程屬性
?
proc是一個利用/proc的特性來報告比如這樣一些進程屬性的實用工具:
1)pstack -調用棧
2)pfiles -打開的文件描述符列表
3)pldd -正在運行中的進程使用的動態鏈接庫的列表
?
?
示例:
#ps -ef
root? 1838???? 1? 0?? 3月 03 ???????? 0:00 /usr/sbin/syslogd
root? 1479???? 1? 0?? 3月 03 ???????? 0:01 ocfserv
… …
?
# pstack 1838
1838:?? /usr/sbin/syslogd
-----------------? lwp# 1 / thread# 12? --------------------
?ff217ac8 poll???? (ff03bd0c, 1, ffffffff)
??? ff15b35c poll???? (c, ff174780, 1, 2a8c8, 2b164, fe401000) + 34
??? ff15bc08 _thread_start (0, 0, 0, 0, 0, 0) + 40
-----------------? lwp# 2 / thread# 2? --------------------
… …
?
# ptree 1838
1933? /usr/dt/bin/dtlogin -daemon
? 6359? /usr/dt/bin/dtlogin -daemon
??? 6380? /bin/ksh /usr/dt/bin/Xsession
6390?????? /usr/openwin/bin/fbconsole
… …
?
# pfiles 1838
1838:?? /usr/sbin/syslogd
? Current rlimit: 1024 file descriptors
?? 0: S_IFCHR mode:0600 dev:136,0 ino:749016 uid:0 gid:3 rdev:97,0
????? O_WRONLY|O_APPEND
?? 1: S_IFCHR mode:0666 dev:136,0 ino:749009 uid:0 gid:3 rdev:13,2
????? O_RDONLY|O_LARGEFILE
??? … …
?
# pldd 1838
1838:?? /usr/sbin/syslogd
/usr/lib/libnsl.so.1
/usr/lib/libpthread.so.1
/usr/lib/libdoor.so.1
/usr/lib/libc.so.1
… …
?
========================================================================
5、pmap命令報告單獨進程的內存空間布局情況
?
對于單獨的進程,pmap命令報告單獨進程的內存空間布局情況(-x選項比較有用)。
示例:
#ps –ef|grep httpd
??? root? 1158???? 1? 0?? 3月 03 ???????? 0:00 /opt/IBMHTTPD/bin/httpd
? daemon? 1064? 1063? 0?? 3月 03 ???????? 0:00 /usr/lib/ab2/dweb/sunos5
tpd /usr/lib/ab2/dweb/data
? nobody? 1704? 1158? 0?? 3月 03 ???????? 0:00 /opt/IBMHTTPD/bin/httpd
? nobody? 1705? 1158? 0?? 3月 03 ???????? 0:00 /opt/IBMHTTPD/bin/httpd
… …
?
#pmap –x 1710
1710:?? /opt/IBMHTTPD/bin/httpd
00010000??? 584K read/exec???????? /opt/IBMHTTPD/bin/httpd
000B0000???? 40K read/write/exec?? /opt/IBMHTTPD/bin/httpd
000BA000??? 208K read/write/exec???? [ heap ]
FECA0000???? 24K read/exec???????? /usr/lib/nss_files.so.1
FECB6000????? 8K read/write/exec?? /usr/lib/nss_files.so.1
FECC0000??? 368K read/write/shared?? [ anon ]
FED20000??? 136K read/exec???????? /opt/WebSphere/AppServer/bin/libascommon.so
… …
========================================================================
6、使用ps命令獲取進程的內存、CPU利用狀況及排序
?
ps命令顯示正在運行進程某一時刻的相關數據,使用ps命令獲取進程的內存、CPU利用狀況。用這些命令可以看到使用CPU和內存最多的進程:
?
1)# ps -eo pid,pcpu,args | sort +1n
CPU百分比
?
2)# ps -eo pid,vsz,args | sort +1n
K字節的虛擬內存
?
3)# /usr/ucb/ps -aux |more
# /usr/ucb/ps -aux | head
輸出被排序,使用CPU和內存最多的進程排在上面。
?
注意:/usr/bin/ps和/usr/ucb/ps時兩個不同的工具。
/usr/ucb/ps中,stat列顯示了各進程的狀態:
R?? 進程可運行
s?? 睡眠,不可中斷
S?? 睡眠
I?? 空閑
T?? 停掛
H?? 掛起
W?? 被換出到磁盤上
已有 0 人發表留言,猛擊->>這里<<-參與討論
JavaEye推薦
- 上海:天會皓聞誠聘資深Java架構師
- 上海:天會皓聞誠聘CTO技術總監</
轉載于:https://my.oschina.net/renchengyong/blog/3574
總結
以上是生活随笔為你收集整理的Unix平台下的常用命令技巧之资源与性能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小程序获取本地存储数据,然后传参的时候是
- 下一篇: Let‘s Encrypt 安装配置教程