相信很多人和我有类似的想法:要是solaris 10安装配置完以后把它扔到某个位置再也不用管它,那该有多好。当然,这只是我们的一厢情愿而已!尽管solaris 10的功能已经异常强大、性能超级稳定,但还是需要我们经常性的看管和维护。维护的主要内容包括监控、配置/设置修改以及故障处理这几个方面,下面我们分别以一些实例来讨论这些情形。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

系统监控

监控最主要的目的是了解和掌握系统的负载和性能。
 
(一)   了解系统的状况。
1、查看正在运行的solaris 10的版本,使用不带参数的命令 showrev,此命令加选项-r则是另外一个功能:查看目前系统所需要安装的补丁程序。
root@zsc # showrev

Hostname: zsc

Hostid: 841e<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />69f3

Release: 5.10

Kernel architecture: sun4u   //intel架构的服务器输出不一样

Application architecture: sparc

Hardware provider: Sun_Microsystems

Domain:

Kernel version: SunOS 5.10 Generic_118833-18  //内核版本号
2、查看硬件设备的某些情况,使用命令 prtconfig.
root@zsc # prtconf

System Configuration:  Sun Microsystems  sun4u //intel,amd cpu的输出不同

Memory size: 8192 Megabytes     //内存为8G

System Peripherals (Software Nodes):

 

SUNW,Sun-Fire-V490

    scsi_vhci, instance #0

    packages (driver not attached)

        SUNW,builtin-drivers (driver not attached)

………
3、查看本机所连接的磁盘数量,使用命令 format.这个命令也是格式化硬盘的工具。
root@zsc # format

Searching for disks...done

 

 

AVAILABLE DISK SELECTIONS:

       0. c1t0d0 <SUN146G cyl 14087 alt 2 hd 24 sec 848>

          /pci@9,600000/SUNW,qlc@2/fp@0,0/ssd@w21000014c39d4d9d,0

       1. c1t1d0 <SUN146G cyl 14087 alt 2 hd 24 sec 848>

          /pci@9,600000/SUNW,qlc@2/fp@0,0/ssd@w21000014c39d4d9b,0
   从输出可以知道此服务器有2scsi硬盘。
4、查看网络接口的状况,使用带选项的命令 ifconfig –a  .
root@zsc # ifconfig -a

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1

        inet 127.0.0.1 netmask ff000000

ce0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2

        inet 61.128.x.x netmask ffffff00 broadcast 61.128.x.255

        ether 0:14:4f:1e:69:f3  //ce0是网络接口的名字

ce1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3

        inet 192.168.x.5 netmask ffffff00 broadcast 192.168.x.255

        ether 0:14:4f:1e:69:f3  //x是某个具体的数值,安全起见这样处理

    从输出可知,本机有2个网络接口。如果网络接口配置错误或没有激活,将有可能在输出中看不见接口名称及状态。
5、查看cpu的个数,使用不带参数的命令mpstat
root@db890 ~#mpstat    //这个命令也是查看CPU负载的工具

CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl

  0    0   1  136     3    1   67    1    1    6    1    93    0   1   4  94

  1    0   1  101    25   22   67    1    1    6    1    85    0   1   4  95

  2    0   1  121     3    1   68    1    1    6    1    91    0   1   4  95

  3    0   1  129     3    1   69    1    1    6    1    95    0   1   4  95

  4    0   1  126     3    1   69    1    1    5    1    95    0   1   4  95

  5    0   1  125   129  126   66    1    1    5    1    90    0   1   4  95

  6    0   1  123     4    1   68    1    1    6    1    92    0   1   4  95

  7    0   1  105   242  140   65    1    1    7    1    89    0   0   4  95
    从输出可知此服务器有8cpu,此处按0-7的序号开始;有些输出不会以顺序序号开始,但可以从行数得知cpu数目(有多少行就有多少个cpu)。
 
(二)、用户及系统活动监控。
 
1、  查看系统运行了多少时间,使用不带参数的命令 uptime
root@zsc # uptime

 上午 848     运行 4 15:12,  2 用户平均负载:0.01, 0.01, 0.01
 
2、  查看有那些用户登录到solaris 10系统,使用命令 w.
root@zsc # w

 上午 912     运行 4 15:36,  3 用户平均负载:0.02, 0.01, 0.01

用户名   终端号         登入时间       闲置   JCPU   PCPU  执行命令

root     console      周一下午 5      5   4:53   4:53  /usr/dt/bin/dtscreen -mode blank

root     pts/3        上午 836       25                -bash

root     pts/4        上午 912                         w
 
3、  查看系统的运行级别,使用带选项的命令 who –r .
root@zsc # who -r

   .       run-level 3  10  9 17:36     3      0  S
 
4、查看系统近期的运行状态(包括关机、重起、用户登录等),使用不带参数的命令last.
root@zsc # last |more

root      pts/3       211.94.81.227    Sat Oct 14 14:31 仍在登录状态

root      sshd        211.94.81.227    Sat Oct 14 14:31 仍在登录状态

root      sshd        218.247.140.197  Sat Sep 16 12:03 - 12:04  (00:00)

oracle    console     :0               Sat Sep 16 12:02 - 关机  (00:02)

reboot    system boot                  Sat Sep 16 12:02

reboot    system down                  Sat Sep 16 12:01

root      pts/4       61.128.122.128   Sat Sep 16 12:01 - 关机  (00:01)

root      sshd        61.128.122.128   Sat Sep 16 12:01 - 关机  (00:01)

oracle    console     :0               Sat Sep 16 12:00 - 关机  (00:01)

reboot    system boot                  Sat Sep 16 11:59

reboot    system down                  Sat Sep 16 11:59

oracle    console     :0               Sat Sep 16 11:58 - 关机  (00:01)

root      console     :0               Sat Sep 16 11:53 - 11:54  (00:00)

oracle    console     :0               Sat Sep 16 11:52 - 11:53  (00:01)
 
5、  查看系统运行的进程,通俗一点说就是查看系统正在运行那些程序,这是系统管理和维护过程中使用得最频繁的工具。使用带若干选项的命令 ps .ps-进程状态的缩写。笔者常用的3个选项是:-a 列出请求最频繁的进程;-e 列出正在运行的进程;-f打印进程的详细信息。另外还有一个类似的工具ptree,用来查看进程树(提示:linux里查看进程树的工具是pstree)。
root@zsc # ps -aef

     UID   PID  PPID   C    STIME TTY         TIME CMD

    root     0     0   0  10 09 ?           0:10 sched

    root     1     0   0  10 09 ?           0:02 /sbin/init

    root     2     0   0  10 09 ?           0:00 pageout

    root     3     0   0  10 09 ?          46:11 fsflush

  daemon   209     1   0  10 09 ?           0:00 /usr/lib/nfs/statd

root 15302   315   0 14:31:04 ?           0:00 /usr/lib/ssh/sshd

  oracle  2917     1   0  10 10 ?           0:06 ora_smon_zsjdb

  oracle  6093     1   0  10 12 ?           0:00 ora_s041_zswdb

  oracle  5995     1   0  10 12 ?           0:31 ora_pmon_zswdb

  oracle  2915     1   0  10 10 ?           0:11 ora_ckpt_zsjdb
root@zsc # ptree

7     /lib/svc/bin/svc.startd

  212   /usr/lib/saf/sac -t 300

    231   /usr/lib/saf/ttymon

  219   /usr/lib/saf/ttymon -g -d /dev/console -l console -T sun -m ldterm,ttc

9     /lib/svc/bin/svc.configd

102   /usr/lib/sysevent/syseventd

103   /usr/sbin/nscd

113   /usr/lib/picl/picld

123   /usr/lib/crypto/kcfd

201   /usr/sbin/cron

2442  /opt/oracle/product/9.2.0/bin/tnslsnr LISTENER -inherit

2909  ora_pmon_zsjdb

2911  ora_dbw0_zsjdb

2913  ora_lgwr_zsjdb

       有的时候,需要手动结束一个运行的进程,这种情况发生在诸如程序本身没有关闭指令等这样的场景。结束进程使用killkillall来完成。执行结束进程的操作一定要仔细,看准确了再执行,不要杀错进程。另外一个值得注意的是,不要随便赋予普通用户结束进程的权限,这是很冒险的事情。
 
6、  查看磁盘的使用情况也是一项十分重要的工作。再大的磁盘空间也会随时间的推移而逐渐变小,当磁盘空间增加到一定限度的时候,有一些程序将发生错误甚至停止工作,我这里曾有一台监控服务器发送没有标题和内容的报警邮件,原因就是分区 /tmp 被文件填满而不能写入数据所致。使用带参数的命令 df –kdf –h来查看系统硬盘的容量使用情况,笔者本人倾向于使用参数 –hhuman readable format)使其输出的格式更加人性化。
root@zsc # df -k

文件系统              千字节    用了    可用 容量      挂接在

/dev/dsk/c1t0d0s0    11093692 7886931 3095825    72%    /

/devices                   0       0       0     0%    /devices

ctfs                       0       0       0     0%    /system/contract

proc                       0       0       0     0%    /proc

mnttab                     0       0       0     0%    /etc/mnttab

swap                 2526104    1048 2525056     1%    /etc/svc/volatile

objfs                      0       0       0     0%    /system/object

fd                         0       0       0     0%    /dev/fd

/dev/dsk/c1t0d0s5    6050982 1588792 4401681    27%    /var

swap                 2525376     320 2525056     1%    /tmp

swap                 2525096      40 2525056     1%    /var/run

/dev/dsk/c1t1d0s2    141179002   65553 139701659     1%    /opt/disk2

/dev/dsk/c2t40d0s6   281589229 7006562 271766775     3%    /opt/data1

/dev/dsk/c2t40d1s6   281589229  107661 278665676     1%    /opt/data2

/dev/dsk/c2t40d2s6   281589229 2182197 276591140     1%    /opt/data3
root@zsc # df -h

文件系统               大小   用了   可用 容量      挂接在

/dev/dsk/c1t0d0s0       11G   7.5G   3.0G    72%    /

/devices                 0K     0K     0K     0%    /devices

ctfs                     0K     0K     0K     0%    /system/contract

proc                     0K     0K     0K     0%    /proc

mnttab                   0K     0K     0K     0%    /etc/mnttab

swap                   2.4G   1.0M   2.4G     1%    /etc/svc/volatile

objfs                    0K     0K     0K     0%    /system/object

fd                       0K     0K     0K     0%    /dev/fd

/dev/dsk/c1t0d0s5      5.8G   1.5G   4.2G    27%    /var

swap                   2.4G   320K   2.4G     1%    /tmp

swap                   2.4G    40K   2.4G     1%    /var/run

/dev/dsk/c1t1d0s2      135G    64M   133G     1%    /opt/disk2

/dev/dsk/c2t40d0s6     269G   6.7G   259G     3%    /opt/data1

/dev/dsk/c2t40d1s6     269G   105M   266G     1%    /opt/data2

/dev/dsk/c2t40d2s6     269G   2.1G   264G     1%    /opt/data3

 
7、  查看网络连接,使用带选项的命令 netstat .
root@zsc # netstat –anp  //linux用这个选项将输出更多的信息,包括连接的进程等

Net to Media Table: IPv4

Device   IP Address               Mask      Flags   Phys Addr

------ -------------------- --------------- ----- ---------------

ce0    61.128.x.1         255.255.255.255       00:00:0c:07:ac:7a

ce1    192.168.x.5        255.255.255.255 SP    00:14:4f:1e:69:f3

ce0    61.128.x.3         255.255.255.255       00:0c:31:0b:48:8a

ce0    61.128.x.30        255.255.255.255       00:14:22:0e:f4:c6

ce0    61.128.x.27        255.255.255.255       00:14:22:b0:94:18

ce0    61.128.x.40        255.255.255.255 SP    00:14:4f:1e:69:f3

ce1    224.0.0.0            240.0.0.0       SM    01:00:5e:00:00:00

ce0    224.0.0.0            240.0.0.0       SM    01:00:5e:00:00:00

oot@zsc # netstat –r    //查看路由表

 

Routing Table: IPv4

  Destination           Gateway           Flags  Ref   Use   Interface

-------------------- -------------------- ----- ----- ------ ---------

61.128.x.0         zsc                  U         1    239  ce0

192.168.100.0        zsj                  U         1      4  ce1

BASE-ADDRESS.MCAST.NET zsc                  U         1      0  ce0

default              61.128.122.1         UG        1   2020 

localhost            localhost            UH       26 877301  lo0

        通过网络连接的状态,可以知道有哪些网络服务在工作,以及是否有非法的访问等情况。
 
   8、查看系统用户近期执行了哪些操作,使用命令history。切换到其他用户,看看最近他们都干了些什么。
 
    (三)、负载监控
    1、查看虚拟内存状态,使用带参数的命令 vmstat
root@zsc # vmstat 4 4     //4秒钟采集一次,采集4

 kthr      memory            page            disk          faults      cpu

 r b w   swap  free  re  mf pi po fr de sr s1 sd sd sd   in   sy   cs us sy id

 0 0 0 3999808 2286744 7  9 27  0  0  0  0  0  1  0  1  290  186  205  0  0 100

 0 0 0 2525696 637008 0   7  0  0  0  0  0  0  0  0  1  289  125  208  0  0 100

 0 0 0 2525696 637008 0   0  0  0  0  0  0  0  0  0  1  299  126  192  0  0 100

 0 0 0 2525696 637008 19 20  0  0  0  0  0  0  0  0  1  305  283  210  0  0 100

       可以通过输出值来判断某些性能下降或者故障产生的原因
 
2、查看系统I/O,使用命令iostat.这个命令可以带很多选项,根据各自的需求选择选项。
root@zsc # iostat 3 3  //采集数据3次,每次3秒钟

   tty        sd1           ssd0          ssd1          ssd2           cpu

   tin tout kps tps serv  kps tps serv  kps tps serv  kps tps serv   us sy wt id

   0  126   0   0    0   15   1   15    0   0    0   67   1   42    0  0  0 100

   0   79   0   0    0    0   0    0    0   0    0    8   1   15    0  0  0 100

   0   27   0   0    0    0   0    0    0   0    0    8   1   16    0  0  0 100

 
3、另外一个工具:top. solaris 10环境中,并没有这个工具(RedHat linux默认安装这个工具),需要从网上下载这个工具包,然后把它安装到系统。笔者下载了top-3.6-sol10-sparc-local安装到系统。
root@zsc # top

 

last pid: 15804;  load avg:  0.02,  0.01,  0.01;       up 5+03:49:20   21:25:23

140 processes: 139 sleeping, 1 on cpu

CPU states: 99.5% idle,  0.1% user,  0.4% kernel,  0.0% iowait,  0.0% swap

Memory: 8192M phys mem, 620M free mem, 2007M swap, 2007M free swap

 

 PID USERNAME LWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND

 15804 oracle     1  59    0 2431M 2422M sleep    0:00  0.71% oracle

 15802 root       1  59    0 3320K 1936K cpu      0:00  0.23% top

   721 root       1  59    0 2160K  784K sleep    4:15  0.06% rpc.rstatd

  6001 oracle    11  59    0 3346M 3328M sleep    1:30  0.05% oracle

  2909 oracle     1  59    0 2432M 2413M sleep    0:20  0.05% oracle

   713 root       1  59    0 9152K 1560K sleep    2:59  0.04% sdtperfmeter

   509 root       1  59    0   86M   13M sleep    2:51  0.04% Xsun

   703 root       3  59    0   13M 1472K sleep    1:44  0.02% dtsession

  6007 oracle     1  59    0 3343M 3330M sleep    0:21  0.01% oracle

  6132 oracle    11  59    0 3352M 3331M sleep    0:02  0.01% oracle

  5995 oracle     1  59    0 3344M 3327M sleep    0:35  0.01% oracle

   218 root       1  59    0 1280K  480K sleep    0:01  0.01% utmpd

 15655 root       1  59    0 9344K 2880K sleep    0:00  0.01% sshd

   575 root       1  59    0 9496K  928K sleep    0:05  0.01% snmpd

   103 root      29  59    0 4992K 2864K sleep    0:21  0.01% nscd

   这是一个输出比较全面的工具,建议大家安装并使用之。
 
(四)、日志文件。系统日志存放路径是/var/adm/messages,这个文件通常会很大,不要用cat命令来读,如果用more 来读,翻页也是很辛苦的。一些有用的技巧是:先使用命令带行数选项的head tail命令,然后使用grep这样的工具。在写作这篇文章的过程中,笔者通过查看日志文件发现乌鲁木齐的一台运行solaris 10 SUN V480服务器某个电源发生故障。
root@zsc # more messages | grep error |more

Oct 10 03:10:04 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLE

Oct 10 03:10:44 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLE

Oct 10 03:17:16 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLE

Oct 10 03:23:50 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLEOct

Oct 10 05:17:21 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLE

Oct 10 05:23:59 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLE

Oct 10 05:30:28 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLE

Oct 10 05:37:21 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLE

Oct 10 05:43:56 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLE

Oct 10 05:50:29 zsc picld[113]: [ID 498155 daemon.error] Device PS1 AC UNAVAILABLE

--还有--

    这是一个双电源的服务器,其中的一个失效了。
  配置/设置修改

把服务器从北京机房移到上海的某个机房,或者要新增一块硬盘,诸如这样的情形就需要对系统配置/设置做修改来满足实际需要。很明显的事实是在北京机房设置的服务器网络参数搬到上海机房后多半不能使用,这就需要对它们就行某种程度的需改。接着我们还是一几个实例来说明。
 
(一)、修改网络参数。与linux相比较,solaris 10 修改网络参数要复杂很多。它涉及到ipnodesnetmaskshostsdefaultrouterhostname.x等文件。
 
1、运行命令ifconfig –a查看网络接口的名字。
root@zsc # ifconfig -a

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1

        inet 127.0.0.1 netmask ff000000

ce0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2

        inet 61.128.x.40 netmask ffffff00 broadcast 61.128.122.255

        ether 0:14:4f:1e:69:f3

ce1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3

        inet 192.168.x.5 netmask ffffff00 broadcast 192.168.100.255

        ether 0:14:4f:1e:69:f3

 
2、打开网络接口文件查看接口的名称。
root@zsc # more hostname.ce0

zsc

root@zsc # more hostname.ce1

zsj

 
4、  修改文件/etc/hosts,使IP地址与接口一一对应。
root@zsc # more hosts

#

# Internet host table

#

127.0.0.1       localhost      

61.125.x.30   zsc     loghost

192.168.10.5   zsj     loghost

 
5、  修改文件/etc/netmsks.
root@zsc # more netmasks

192.168.10.0   255.255.255.0

61.125.x.0     255.255.255.0

 
6、  修改文件/etc/defaultrouter以改变默认网关。一般情况下,默认网关只有一个。
root@zsc # more defaultrouter

#129.146.89.225   //这个默认路由是以前的,现在被注释掉,不再起作用了。

61.125.x.1

 
7、  上述过程完成后重其网络,然后运行命令ifconfig –a检查是否修改成功,然后测试一下网络的连通性,看是否可以连通网关,访问internet
可以直接运行命令ifconfig来指定接口的ip地址和子网掩码的值,执行完命令后设置马上生效。这种方式适合于临时改变网络接口的场合,原因是-一旦系统重启这些设置就消失了。
 
(二)、添加一个硬盘。Solaris 10支持scsi硬盘热插拔,并且系统可以自动识别刚加入的硬盘(linux可以支持热插拔,但系统不能发现后增加的硬盘,需要重启系统才可以)。
1、插入scsi硬盘,然后运行命令cfgadm把硬盘加载到系统。
2、运行命令format格式化硬盘并分区。注意SPARCINTEL架构的分区操作稍有不同,INTEL分区要用到fdisk这个命令。
3、用命令newfs在上述步骤创建的分区上创建文件系统。
4、在系统创建一个目录,然后用mount命令把刚创建的文件系统挂接到这个目录。
5、修改文件/etc/vfstab,把挂接记录添加进来,使系统开机就能自动挂接该文件系统