相信很多人和我有類似的想法:要是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
/pci@9,600000/SUNW,qlc@2/fp@0,0/ssd@w21000014c39d4d9d,0
1. c1t1d0
/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
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,把掛接記錄添加進來,使系統開機就能自動掛接該文件系統。