Default style (Cherry Eve). Switch styles (Capricorn). Atom Feed Calendar
http://developers.sun.com.cn/blog/BennyLuo/date/20070725 星期三 七月 25, 2007

Solaris 10 上的性能调优的一些总结

做性能调优首先需要了解系统的现象,一个应用如果出现性能问题,大部分应用都会在操作系统层面表现出问题,比如CPU使用过度, 程序中锁使用过于频繁, 内存泄露等等, 这些都可用Solaris的基本命令看出来, 基本上在性能调优过程, 我们需要通过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使用在系统态层面大概平均93%, 用户层大概6%左右, 1%左右是闲置的,而sys call调用是大量而且频繁的, 良好的系统应用应该是大部分的时间花在用户层面, 而少部分时间使用在系统调用层面.

我们使用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函数看是否有改进的方法.

 

Comments:

Post a Comment:
  • HTML Syntax: NOT allowed