服务器 频道

Solaris 10 系统维护经验谈

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

  系统监控

  监控最主要的目的是了解和掌握系统的负载和性能。

  (一)      了解系统的状况

  1、查看正在运行的solaris 10的版本,使用不带参数的命令 showrev,此命令加选项-r则是另外一个功能:查看目前系统所需要安装的补丁程序。

  root@zsc # showrev

  Hostname: zsc

  Hostid: 841e69f3

  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

  从输出可以知道此服务器有2个scsi硬盘。

  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

  从输出可知此服务器有8个cpu,此处按0-7的序号开始;有些输出不会以顺序序号开始,但可以从行数得知cpu数目(有多少行就有多少个cpu)。

 

  (二)、用户及系统活动监控。

  1、      查看系统运行了多少时间,使用不带参数的命令 uptime

  root@zsc # uptime

  上午 8点48分   运行 4 天 15:12, 2 用户, 平均负载:0.01, 0.01, 0.01

  2、      查看有那些用户登录到solaris 10系统,使用命令 w.

  root@zsc # w

  上午 9点12分   运行 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     上午 8点36分     25           -bash

  root   pts/4     上午 9点12分                 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

  有的时候,需要手动结束一个运行的进程,这种情况发生在诸如程序本身没有关闭指令等这样的场景。结束进程使用kill或killall来完成。执行结束进程的操作一定要仔细,看准确了再执行,不要杀错进程。另外一个值得注意的是,不要随便赋予普通用户结束进程的权限,这是很冒险的事情。

  6、      查看磁盘的使用情况也是一项十分重要的工作。再大的磁盘空间也会随时间的推移而逐渐变小,当磁盘空间增加到一定限度的时候,有一些程序将发生错误甚至停止工作,我这里曾有一台监控服务器发送没有标题和内容的报警邮件,原因就是分区 /tmp 被文件填满而不能写入数据所致。使用带参数的命令 df –k或df –h来查看系统硬盘的容量使用情况,笔者本人倾向于使用参数 –h(human 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 修改网络参数要复杂很多。它涉及到ipnodes、netmasks、hosts、defaultrouter、hostname.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格式化硬盘并分区。注意SPARC与INTEL架构的分区操作稍有不同,INTEL分区要用到fdisk这个命令。

  3、用命令newfs在上述步骤创建的分区上创建文件系统。

  4、在系统创建一个目录,然后用mount命令把刚创建的文件系统挂接到这个目录。

  5、修改文件/etc/vfstab,把挂接记录添加进来,使系统开机就能自动挂接该文件系统。

 

0
相关文章