作者:田逸()
相信很多人和我有类似的想法:要是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 146G cyl 14087 alt 2 hd 24 sec 848>
/pci@9,600000/SUNW,qlc@2/fp@0,0/ssd@w21000014c39d4d9d,0
1. c1t1d0 146G 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 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
ce0: flags=1000843 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 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 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
ce0: flags=1000843 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 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,把挂接记录添加进来,使系统开机就能自动挂接该文件系统。