solaris性能监控

对于主机/系统管理员来讲,在日常维护中,最经常的做的就是性能监控,主要包括:

  1. CPU性能监控
  2. 内存
  3. 磁盘I/O
  4. 网络流量
  5. 进程监控

处理器监控命令总结

 

PC市场CPU的主流厂商为AMDINTEL;而在服务器市场除了上述两家外还有HPIBMSUN等企业。但不论是哪个厂家的产品,对于处理器而言都有一些共同的性能指标参数。
硬件性能
在谈及CPU的硬件性能时,通常会涉及几个重要指标:
1.       
核数
一个CPU内的处理器数量,一个双核的CPU性能比两个单核的CPU更佳,因为双核CPU在内部就完成了协同处理。目前SUN公司已经生产出8核的CPU,并应用在UltraSparc T1服务器上
2.       
运行频率
频率越高意味着处理器的运算速度越快
3.       
缓存大小
由于处理器的运行速度越来越快,对从内存中读取数据的速度需求也越来越高。然而内存速度的提升速度却很缓慢,而能高速读写数据的内存价格又异常高昂,不能 大量采用。从性能价格比的角度出发,处理器设计生产公司采用了一种折中方案,就是用少量的高速内存和大量的低速内存结合使用,共同为处理器提供数据,达到 了性能和成本的最优化配置。
处于CPU和内存之间的那些高速内存专门用来做临时数据存放,因此被称为缓冲存储器,简称缓存。最初缓存只有一级,随着处理器速度的提升,一级缓存已 满足不了需求,于是就添加了二级缓存。二级缓存速度比一级缓存慢,但容量更大,用来做一级缓存和内存之间的数据临时存放。目前服务器市场的处理器已经添加 了三级缓存,容量更大,但速度比二级缓存慢(仍然比内存快许多),
缓存使CPU处理器的运行效率得到了大幅度的提升,这个区域中存放的都是CPU频繁要使用的数据,所以缓存越大处理器效率就越高,同时由于缓存的物理结构比内存复杂很多,所以其成本也很高。
4.       
线程数
在处理器到内存中读取数据时,由于处理器处理速度很快,如果每次运算都要等到读取内存速度完成后再开始,会导致大部分的CPU时间处在空闲状态,这就是最 早的单线程操作。而多线程操作则不等处理器处理指令完毕,就预先到内存中读取速度并缓存,这将充分利用CPU的空闲时间,最大化的进行指令的处理。目前服 务器市场的主流CPU都能支持2线程甚至4线程操作。

查看CPU数量和主频等信息,可在shell下用prsinfoprtdiag命令;也可在PROMOK提示符下用bannershow-post-results(这个命令和shell下的prtdiag命令的输出类似,可看CPU内存等信息)

# psrinfo -v
虚拟处理器 0 在下列时间的状态:03/28/2007 15:14:52
  
03/28/2007 08:05:57 开始已在运行。
  i386
处理器以 2000 MHz 运行,
        
而且有 i387 compatible 浮点数处理器

# prtdiag -v
系统配置:  Sun Microsystems  sun4us Fujitsu PRIMEPOWER250 1x SPARC64 V
系统时钟频率:220 MHz
内存大小:2048 兆字节
========================= CPUs =========================
                    Run   Ecache   CPU    CPU
Brd  CPU   Module   MHz     MB    Impl.   Mask
---  ---  -------  -----  ------  ------  ----
0     0     0      1977     3.0   5        5.1
<…
以下输出省略…>

ok show-post-results
=== Model ====================
Fujitsu PRIMEPOWER250
=== System ===================
Name                   Model   UPA freq.
FJSV,GPUZC-M           250     220MHz

=== UPA module (Processor) ===
CPU#    MID     Status  Type          Freq.   Cache   manuf.  impl.   mask   
0       0       OK      SPARC64-V     1977MHz  3072KB   4       5      51

负荷监控

mpstat
命令用于查看处理器和处理器集的统计信息
# mpstat 2 5
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0   92  20    0   129  100  151   16    0    1    0   253    4  70   0  26
  0    5   0    0   270  201  287    6    0    1    0   367    3   2   0  95
  0    0   0    0   266  197  267    1    0    1    0   377    2   2   0  96
  0    3   3    0   268  200  283    1    0    0    0   306    1   2   0  96
  0    1   0    0   265  196  266    9    0    1    0   655    6   4   0  90

下面是一台拥有4CPUmpstat输出
# mpstat
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0   21   0   19   541  441   41    1    8    5    0   151    0   2   0  98
  1   25   1   26     2    0  257    1   87    5    0   202    0   1   0  99
  2   30   1   29     4    2  441    1   87    6    0   217    0   1   0  99
  3   24   1   24     9    2  270    1   89    5    0   193    0   1   0  99

另外,sariostatvmstaprstattop的输出中也可以看到部分CPU负荷信息,输出含义如下

n        us                       
用户使用的CPU时间百分值
n        sy                       
系统使用的CPU时间百分值
n        wt                        I/O
等待时间不再参与CPU时间的百分值计算,总是为0
n        id                        CPU
空闲时间百分值


# sar 2 5
SunOS s10 5.10 Generic_118855-14 i86pc    02/09/2007
16:24:01    %usr    %sys    %wio   %idle
16:24:03      25      21       0      54
16:24:06       9      16       0      75
16:24:08      17      21       0      62
16:24:10       9      14       0      78
16:24:12      10      23       0      67
----------------------------------------------
Average       14      19       0      67


# iostat 2 3
   tty        sd0           sd1           sd2           sd3            cpu
tin tout kps tps serv  kps tps serv  kps tps serv  kps tps serv   us sy wt id
   0    1 451  42   53    0   0    4  321  23   66  122   3   64    3 81  0 16
   0  119 183  46   82    0   0    0  173  28   74   27   4   58    9 12  0 79
     0   40 376  60   71    0   0    0  109  17  101   64   8  104   16 12  0 72

$ vmstat 2 5
kthr      memory            page            disk          faults      cpu
r b w   swap  free  re  mf pi po fr de sr f0 s0 s1 s2   in   sy   cs us sy id
0 0 44 599220 130164 17 73 133 50 88 0 793 0 38  0 23   73  178   93  3 82 15
0 0 68 248972 11640 22 144 385 0  0  0  0  0 88  0  6  429  333  448  5 11 84
1 0 68 248960 10584 40 142 408 123 164 0 335 0 104 0 1 450  327  473  6 15 79
0 0 68 249004 10288 31 111 345 284 418 0 1608 0 107 0 0 420 299  430  5 13 81
0 0 68 249004 10324 19  93 295 243 342 0 1682 0 81 0 0 406  284  404  2 10 88


# prstat -a
   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP      
  3308 oracle    503M  410M sleep   59    0   0:00:32 9.3% oracle/1
  3239 oracle    218M   35M sleep   39   10   0:03:42 4.5% java/27
  3781 oracle    500M  408M sleep   59    0   0:00:03 2.8% oracle/1
  3865 oracle    107M 7864K sleep   60    0   0:00:00 1.4% oracle/1
  2443 oracle     85M 4256K sleep   59    0   0:01:09 1.3% java/14
  1940 oracle     28M 7600K sleep   59    0   0:00:40 0.7% Xorg/1
  2561 oracle    502M  403M sleep   59    0   0:00:19 0.6% oracle/1
NPROC USERNAME  SIZE   RSS MEMORY      TIME  CPU---------------
这里是按用户使用情况汇总排列
    65 oracle     13G 9360M   100%   0:10:31  25%
    36 root      141M   22M   0.2%   0:00:39 0.6%
     1 noaccess  122M 2612K   0.0%   0:00:33 0.3%
     1 smmsp    6700K  432K   0.0%   0:00:00 0.0%
     5 webservd   30M    0K   0.0%   0:00:00 0.0%
Total: 113 processes, 361 lwps, load averages: 0.90, 0.70, 0.86

 

监控你的网络流量(snoop&netstat

 

snoop 抓包
solaris
自带snoop抓包工具,抓所有数据流

# snoop
Using device /dev/pcn0 (promiscuous mode)
192.168.8.18 -> 192.168.255.255 NBT NS Query Request for WORKGROUP[1c], Success
192.168.253.35 -> solaris      TELNET C port=1246
     solaris -> 192.168.253.35 TELNET R port=1246 Using device /dev/pc
     solaris -> 192.168.253.35 TELNET R port=1246 Using device /dev/pc
192.168.4.150 -> (broadcast)  ARP C Who is 192.168.4.200, 192.168.4.200 ?
192.168.4.200 -> (broadcast)  ARP C Who is 192.168.4.150, 192.168.4.150 ?
#

抓源地址或目的为 202.101.98.55的数据流:

# snoop 202.101.98.55
Using device /dev/pcn0 (promiscuous mode)
192.168.253.35 -> dns.fz.fj.cn DNS C www.163.com. Internet Addr ?
dns.fz.fj.cn -> 192.168.253.35 DNS R www.163.com. Internet CNAME www.cache.split.netease.com.

#

说明:internet cname 后的为解析www.163.com的名字时,代表www.163.com回答的主机的域名。

192.168.253.35202.101.98.55之间的数据流(双向都抓)

# snoop 192.168.253.35 202.101.98.55
Using device /dev/pcn0 (promiscuous mode)
192.168.253.35 -> dns.fz.fj.cn DNS C www.google.com. Internet Addr ?
dns.fz.fj.cn -> 192.168.253.35 DNS R www.google.com. Internet CNAME www.l.google.com.
#

抓完存在当前目录下的cap文件中并查看

# snoop -o cap1 -P      -P
表示处在非混杂模式抓数据,只抓广播、主播、目的为本机的数据
Using device /dev/pcn0 (non promiscuous)
15 ^C                           15
的含义是:显示目前抓了多少个数据流
#

# snoop -i cap1
  1   0.00000 192.168.253.35 -> solaris      TELNET C port=1246
  2   0.18198 192.168.253.35 -> solaris      TELNET C port=1246
  3   0.37232 192.168.4.199 -> 192.168.255.255 NBT Datagram Service Type=17 Source=WB-200[20]
  4   0.00016            ? -> (multicast)  ETHER Type=EF08 (Unknown), size = 180bytes
  5   0.62546 192.168.253.35 -> solaris      TELNET C port=1246
  6   0.13822            ? -> (multicast)  ETHER Type=0000 (LLC/802.3), size = 52 bytes
  7   0.06283 192.168.253.35 -> solaris      TELNET C port=1246
  8   0.90301 192.168.253.35 -> solaris      TELNET C port=1246
  9   0.19781 192.168.253.35 -> solaris      TELNET C port=1246
10   0.81493            ? -> (multicast)  ETHER Type=0000 (LLC/802.3), size = 52 bytes
11   0.07018 192.168.253.35 -> solaris      TELNET C port=1246
12   0.19939 192.168.253.35 -> solaris      TELNET C port=1246
13   0.90151 192.168.253.35 -> solaris      TELNET C port=1246
14   0.18904 192.168.253.35 -> solaris      TELNET C port=1246
15   0.68422            ? -> (multicast)  ETHER Type=0000 (LLC/802.3), size = 52 bytes
#snoop -i cap1 -p 10,12            
只看10-12条记录

#snoop -i cap1 -p10                  
只看第10条记录

# snoop -i cap1 -v -p101            
查看第10条数据流的包头的详细内容

#snoop -i cap1 -v -x 0 -p101   
查看第10条数据流的全部的详细内容

抓主机192.168.253.35202.101.98.55之间的tcp或者udp端口53的数据

# snoop 192.168.253.35 and 202.101.98.55 and \(tcp or udp\) and port 53

输入(的时候要加转义符号\


snoop
的详细参数
Snoop
Solaris 系统中自带的工具, 是一个用于显示网络通讯的程序, 它可捕获IP 包并将其显示或保存到指定文件. (限超级用户使用snoop)
Snoop
可将捕获的包以一行的形式加以总结或用多行加以详细的描述(有调用不同的参数–v -V来实现). 在总结方式下(-V ) , 将仅显示最高层的相关协议, 例如一个NFS 包将仅显示NFS 信息, 其低层的RPC, UDP, IP, Ethernet 帧信息将不会显示, 但是当加上相应的参数(-v ), 这些信息都能被显示出来.

-C

-D

-N

-P
在非混杂模式下抓包

-S
抓包的时候显示数据包的大小

-V
半详细的显示抓的数据的信息

-t [ r | a | d ]
显示时间戳,-ta显示当前系统时间,精确到毫秒

-v
最详细的显示数据的信息

-x offset [ , length]
16进制或ACSII方式显示某数据的部分内容,比如 -x 0,10 只显示0-10字节

#snoop -i cap1 -v -x 0 -p101
查看被抓获的第101个数据流的全部内容


表达式:

根据地址:

#snoop x.x.x.x         IPV4
IP

#snoop 0XX:XX:XX:XX    ETHERNET
MAC地址

数据的方向:

from x.x.x.x
或者 src x.x.x.x

to x.x.x.x
或者 dst x.x.x.x

可用的数据类型的关键词:

ip, ip6, arp, rarp, pppoed, pppoes
pppoebroadcastmulticastappledecnet

udp, tcp, icmp, icmp6, ah, esp

greater length
      True if the packet is longer than length.

less length
      True if the packet is shorter than length.

net net

# snoop from net 192.168.1.0
抓来自192.168.1.0/24的数据

# snoop from net 192.168.0.0
抓来自192.168.0.0/16的数据

port xx XX
TCP或者UDP的端口号或者 /etc/services里定义的名字

#snoop to udp and port 53   
抓到UDP53的数据

 

常见管理命令

 

寻求对solaris系统性能问题感兴趣的朋友(下面的文章是抛砖引玉,希望大家多指教)

日常运行中服务器性能不好,究其原因是一件很复杂的事情,一种情况可能是目前的服务器配置不能满足业务增长的需要;另一种情况可能是应用软件结构的不合理,数据文件和数据库存放的不合理,网络结构不合理。
      
系统管理员的主要任务是使用各种工具和命令诊断出问题所在,明确出什么应用程序在大量消耗系统资源(CPU、内存、磁盘IO、网络带宽等),然后应用开发人员去优化应用程序降低对系统资源的占用率来提高响应速度。
       
性能调优主要关注的是系统资源的利用,系统资源分为物理的和逻辑的,物理的如:CPU、内存、输入输出设备(包括磁盘设备、IO总线、通讯线和各种控制卡 等),逻辑的资源如:LVM(逻辑卷管理器)VMM(虚存管理器)、文件系统、Page space (缓存)和队列等。这些资源对系统性能的影响轻重缓急不同,合理利用这些资源有许多途径,如果条件允许可首先通过优化程序代码和数据结构降低对资源的要 求;尽量使用合理的资源;以及合理控制分配资源。另外,可以通过扩充新的硬件设备来提升处理速度。
      
系统在不同时间内的平均负荷(Last mimuteLast 5 minutesLast 15 minutes)是用来评估系统是否超负荷运行较方便、较常用的一种方法。
      
系统性能分析的标准工具:
        CPU

                     vmstat       sar           ps
      
内存:
                     vmstat       ps        
      
磁盘:
                     iostat         vmstat
      
网络:
                     netstat         nfsstat
性能调优一般步骤
性能调优的主要目的是使系统能够有效的利用各种资源,但衡量系统资源利用率好坏的标准是什么,针对不同的系统和应用没有严格的定义,一般参照以下条件来判定主要资源使用状况:
                                               糟糕
CPU     user% + sys%< 70% user% + sys%= 85%user% + sys% =90%+
磁盘    iowait % < 30%iowait % =40%iowait % = 50%+
内存   pagein pageout每个CPU 达到10 page/秒更多的pageinpageout
网络   < 30% 网络带宽
运行队列(Run Queue) < 2 * CPU个数

通过以下步骤,发现影响整体性能的关键资源,进行性能优化,必要时需要添加或升级某种硬件设备。
1.
iostatsar tprof检测是否是CPU原因
2.
vmstatsvmon检测是否是内存原因
3.
filemoniostat检测是否是硬盘原因
4.
netstat nfsstat检测是否是网络原因
以上步骤是一个交互的过程,当某个瓶颈被去掉后,有可能另外的资源又变为新的瓶颈,需要重新从步骤1开始反复再观察。
·sar            
统计单CPU系统的系统活动状况
·cpusar       
统计多处理器中单个处理器的活动状况
·mpsar      
统计多处理器中处理器的总体活动状况
1
sar  -u显示项的含义(检查CPU的使用率)
·%usr   cpu
执行用户进程的时间
·%sys  cpu
执行系统进程的时间
·%wio cpu
等待完成I/O的时间
·%idel  cpu
的空闲时间
显示结果分析说明
·
一般情况下%usr%sys的值基本相等
·
在一般的多用户系统中,%idel的值通常大于40%
·
%wio经常>15%意味着硬盘可能存在着瓶颈
·
%idel经常小于30%,意味着处理器的处理能力较弱
·
%idel经常小于10%,表明处理器负担较重,或者存在逃逸进程。
·
%idel接近于0,而且%sys远高于% usr,则可能是内存短缺引起了大量的swapingpaging
2
sar  -p 检查系统中是否有较多的等待进程
·Sar -p
:检查系统中是否有过多的等待进程
此命令有四个相关字段:
runq-sz
:内存(memory)中可以运行的进程数
%runocc
:进程进入内存等待的概率
swpq-sz
:对换区(swap)中等待运行的进程数
%swpocc
:进程进入swap等待的概率
显示结果分析汇总如下:
1)
runq-sz经常大于2并且%runocc经常大于90%,意味着处理器负载过重
2)
%swpocc不为0,表示系统已经置换出了进程。可以采用增加内存或减少缓冲的方法来减少swappaging
netstat
网络问题是影响系统性能的问题之一,诊断网络问题最简单的工具是netstat  -i, 命令结果显示了在每一个接口发送和接收数据包的情况,其中的3项:ierrsoerrs and collis与网络性能问题有关:
1.ierrs
, 是指主机从网络接收数据包中包含有多少不正确的数据包,如果ierrs很大,通常表明硬件接口存在问题或硬件驱动器接受数据包较慢,此时应该在不同时间多 次采集数据进行比较来决定采取什么措施。正常情况下,ierrs/opkts< 0.025%.
2.oerrs,
是指主机从网络送出的数据包中包含有多少不正确的数据包。正常情况下oerrs/ipkts< 0.025%.
3.collis,
碰撞是在局域网中有两面三刀个或以上系统同时发送数据时产生的,如果碰撞率(collis/opkts)大于 5%,说明网络负荷过大。此时应该调整网络结构,减少网络流量。
Uptime
是用来衡量一个机器开机长短的。Uptime 显示的时间越大,说明机器越稳定。

posted on 2007-12-04 16:25  hunter_gio  阅读(1854)  评论(0编辑  收藏  举报

导航