隨筆-72  評論-20  文章-0  trackbacks-1
          做性能調優(yōu)首先需要了解系統(tǒng)的現象,一個應用如果出現性能問題,大部分應用都會在操作系統(tǒng)層面表現出問題,比如CPU使用過度, 程序中鎖使用過于頻繁, 內存泄露等等, 這些都可用Solaris的基本命令看出來, 基本上在性能調優(yōu)過程, 我們需要通過Solaris 10的一些常用命令比如mpstat, vmstat, iostat等等確定問題所在, 然后再用dtrace進行深入調查.

          比方說, 如果是CPU方面使用有問題, 我們通過mpstat, prstat來看. 下面是一個例子, 只是一個范例而已:

          # mpstat 2
          CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
          0 117 0 1583 883 111 1487 593 150 6104 64 11108 7 92 0 1
          1 106 0 557 842 0 1804 694 150 6553 84 10684 6 93 0 1
          2 112 0 664 901 0 1998 795 143 6622 64 11227 6 93 0 1
          3 95 0 770 1035 0 2232 978 131 6549 59 11769 7 92 0 1


          可以看到cpu使用在系統(tǒng)態(tài)層面大概平均93%, 用戶層大概6%左右, 1%左右是閑置的,而sys call調用是大量而且頻繁的, 良好的系統(tǒng)應用應該是大部分的時間花在用戶層面, 而少部分時間使用在系統(tǒng)調用層面.

          我們使用dtrace往下追蹤是什么應用導致這么多的sys call:

          # dtrace -n 'syscall:::entry { @[execname] = count(); }'
          dtrace: description 'syscall:::entry ' matched 229 probes
          ^C

          inetd 1
          svc.configd 1
          fmd 2
          snmpdx 2
          utmpd 2

          inetd 1
          svc.configd 1
          fmd 2
          snmpdx 2
          utmpd 2
          svc.startd 13
          sendmail 30
          snmpd 36
          nscd 105
          dtrace 1311
          filebench 3739725


          知道了是filebench應用導致了這么多的sys call, 但我們不知道是哪一個具體的sys call, 依然可以通過dtrace來查找:

          # dtrace -n 'syscall:::entry /execname == "filebench"/ { @[probefunc] = count(); }'
          dtrace: description 'syscall:::entry ' matched 229 probes
          ^C

          lwp_continue 4
          lwp_create 4
          mmap 4
          schedctl 4
          setcontext 4
          lwp_sigmask 8
          nanosleep 24
          yield 554
          brk 1590
          pwrite 80795
          lwp_park 161019
          read 324159
          pread 898401
          semsys 1791717
          我們可以知道semsys sys call調用得最多, 但不知道在應用中是通過應用的哪些函數調用和怎樣調用的, 依然可以通過dtrace.

          # dtrace -n 'syscall::semsys:entry /execname == "filebench"/ { @[ustack()] = count(); }'
          dtrace: description 'syscall::semsys:entry ' matched 1 probe
          ^C
          libc.so.1`_syscall6+0x1c
          filebench`flowop_start+0x408
          libc.so.1`_lwp_start
          10793

          libc.so.1`_syscall6+0x1c
          filebench`flowop_start+0x408
          libc.so.1`_lwp_start
          10942

          libc.so.1`_syscall6+0x1c
          filebench`flowop_start+0x408
          libc.so.1`_lwp_start
          11084

          這樣我們可以知道filebench的flowop_start函數調用此semsys sys call最多,我們就可以著手去尋找這個flowop_start函數看是否有改進的方法.
          posted on 2007-07-27 22:27 前方的路 閱讀(355) 評論(0)  編輯  收藏 所屬分類: Solaris相關

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          <2007年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(7)

          隨筆分類(85)

          隨筆檔案(72)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 韩城市| 沐川县| 富民县| 延川县| 百色市| 全州县| 中西区| 芦山县| 农安县| 保山市| 乐东| 迁安市| 本溪市| 南京市| 清丰县| 威远县| 思南县| 泸定县| 增城市| 武冈市| 新建县| 乡宁县| 新闻| 祁阳县| 罗山县| 二连浩特市| 高安市| 太康县| 新闻| 修水县| 凤山市| 米易县| 明水县| 太原市| 保山市| 扶风县| 如东县| 石河子市| 岳阳县| 仁化县| 红河县|