打算写下这些为本周部门交流做准备,好好理顺下自己对简单系统管理的认识,知识来源主要是是机械工业出版社的 《Solaris 性能与工具》。欢迎指点。 这里的测试都在sparc平台下的solaris9之后的操作系统上,linux上对号入座是行不通的。
对于服务器而言,我们一般会关注cpu的个数,主频,负载情况。相关命令prtdiag psrinfo cpustat mpstat vmstat .
查看硬件信息,可以用prtdiag,可以看到以下是信息
bash-3.00# prtdiagSystem Configuration: Sun Microsystems sun4u Sun Fire V100 (UltraSPARC-IIe 500MHz)System clock frequency: 100 MHzMemory size: 768 Megabytes========================= CPUs ========================= Run Ecache CPU CPUBrd CPU Module MHz MB Impl. Mask--- --- ------- ----- ------ ------ ---- 0 0 0 500 0.2 13 1.4========================= IO Cards ========================= Bus# FreqBrd Type MHz Slot Name Model--- ---- ---- ---- -------------------------------- ---------------------- 0 PCI-0 33 0 dma-isadma 0 PCI-0 33 0 rtc-m5819 m5819 0 PCI-0 33 0 power-acpi-power 0 PCI-0 33 0 SUNW,lomh 0 PCI-0 33 0 serial-su16550 0 PCI-0 33 0 serial-su16550 0 PCI-0 33 0 flashprom SUNW,258-7883 0 PCI-0 33 0 i2c-i2c-smbus 0 PCI-0 33 0 ppm-SUNW,smbus-ppm 0 PCI-0 33 0 beep-SUNW,smbus-beep 0 PCI-0 33 0 fan-control-SUNW,smbus-fan-contr+
可以看到内存,cpu,以及接口等信息,这是一台cpu主频为500m Hz,内存为768m的sparc机器,而那个100mHz是系统总线的频率,更直白些,就是外频。
如果要看cpu硬件信息,可以使用prsinfo 这一个命令,-p参数显示cpu个数,-v显示内核状态,-vp 显示的是线程数
bash-3.00# psrinfo -vStatus of virtual processor 0 as of: 07/31/2012 17:21:24 on-line since 07/13/2011 16:22:45. The sparcv9 processor operates at 500 MHz, and has a sparcv9 floating point processor.bash-3.00# psrinfo -p1bash-3.00# psrinfo -vpThe physical processor has 1 virtual processor (0) UltraSPARC-IIe (portid 0 impl 0x13 ver 0x14 clock 500 MHz)
因为cpu是多核,每个核又有几个线程,如果要查看核数,请用下面命令:
当然,这些不是重点,我们关注的是系统运行时cpu的状态。
1.vmstat(从命令行粘过来会列对齐错乱,就截了个图)
kthr(应该是kerneral thread)中的三列 r b w ,分别代表运行,阻塞,等待的线程数,可以据此查看cpu饱和度(负载程度)。
还有一个快速查看饱和度的命令
uptime:
bash-3.00# uptime 2:26pm up 384 day(s), 22:04, 2 users, load average: 1.46, 1.47, 1.48You have new mail in /var/mail/root
load average后面的数值代表了cpu在1分钟,5分钟,15分钟的每个运算周期的平均负载(即线程数,),这个平均值对性能评估意义不大。无法检测出峰值的负载。
sar (system activation report)命令,是一个非常好用的系统信息统计工具。其默认是统计cpu信息的(-u)
以下是示例
bash-3.00# sar 1 5SunOS xxxx 5.10 Generic_118833-33 sun4u 08/01/201214:47:08 %usr %sys %wio %idle14:47:09 88 12 0 014:47:10 94 6 0 014:47:11 76 7 0 1714:47:12 92 6 0 214:47:13 93 7 0 0Average 89 8 0 4
一秒统计一次,计五次。关于sar 命令,是可以单独写一篇文章的,看操作系统上的man手册就可见一斑。查看单个cpu利用率的统计命令是mpstat,这里就不贴命令结果了。
以上所写的,是不能直接解决问题的,我们只是看到了cpu的使用状况,而不是谁在用cpu。谁在用cpu,用了多少,这是进程和线程的事情了,这里需要介绍一个叫做prstat的命令。以下是默认显示的片段,包含pid,使用内存大小和cpu使用百分比,默认按照cpu使用百分比排序:
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 27235 root 3344K 3016K cpu0 59 0 0:00:00 0.3% prstat/1 920 noaccess 163M 58M sleep 59 0 22:49:31 0.3% java/23 956 dbadm 115M 42M sleep 59 0 14:13:33 0.2% java/37 140 root 3928K 2024K sleep 59 0 0:44:02 0.0% nscd/31 26621 sybase 8216K 2664K sleep 59 0 0:00:01 0.0% sshd/1 27789 root 2320K 1344K sleep 100 - 1:07:05 0.0% xntpd/1
PID USERNAME 是进程号,用户名
SIZE 和RSS是映射虚拟内存大小和占用物理内存
STATE 进程状态
PRI 优先级 数字越大优先级越高
TIME 累计使用cpu时间
PROCESS/NLWP 进程名(执行文件名)/线程数
prstat 可以对进程(线程)进行各种统计排序,
对线程进行统计,可以使用 -L参数,
用按指定列排序 使用 -s + 列名 例如 prstat -s rss 就是按照使用物理内存量排序
按某uid使用资源总量 -t 针对一个用户,列出资源 -U + uid
每一个zone使用的资源统计 -Z
列出用户和进程的相关信息,相当于 prstat 后跟进了一个prstat -t
以上是對cpu和進程資源的使用情况进行分析的命令,下面写下磁盘性能相关的的命令iostat,sar。对于磁盘我们一般关注的性能问题是读写速度,使用率(繁忙百分比)。使用iostat可以获得磁盘性能信息,常见参数解释:
-D 新风格
-e 显示设备错误统计数据
-M 以MB/s为单位显示吞吐
-n 使用磁盘逻辑名显示,默认实例名
-p 显示每个分区和设备的和分区的统计数据
-P 只显示分区统计信息
-x 扩展磁盘统计数据 ,条目更多。
-z 不显示全部为0的行
-m 显示挂载点(配合-p或者-P)
一个例子
kr/s 读速率 kw/s 写速率 %w 等待百分比 %b 忙百分比 wait 等待的平均数量 actv被响应事物数量 wsvc_t平均等待时间 asvc_t平均运行时间
。更多的內容,可以man。
对于那些进程占用比较多的cpu,内存,都有命令可以找出。对io呢,如何找出正在大量占用磁盘的进程呢?这里有三个个很实用的脚本(
和,psio() 。 其中iotop和iosnoop只能在s10及以后版本使用,因为使用dtrace了。
不是每个用户都有权限使用dtrace的,如果不是root,又想使用dtrace,请参照
以下是增加權限过程: