Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1098011
  • 博文数量: 414
  • 博客积分: 10030
  • 博客等级: 上将
  • 技术积分: 4440
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-05 21:42
文章分类

全部博文(414)

文章存档

2011年(1)

2009年(1)

2008年(412)

我的朋友

分类: Oracle

2008-10-11 14:52:25

4. 创建get_vmstat.ksh脚本

改脚本用于定时执行vmstat命令并且将结果存入数据库。

# get_vmstat.ksh

#!/bin/ksh

#----------------------------------------

# 首先设定环境变量,根据实际环境修改. . . .

#----------------------------------------

ORACLE_SID=kamusdb

export ORACLE_SID

ORACLE_HOME=`cat /var/opt/oracle/oratab|grep
^$ORACLE_SID:|cut -f2 -d':'`

export ORACLE_HOME

PATH=$ORACLE_HOME/bin:$PATH

export PATH


SERVER_NAME=`uname -a|awk '{print $2}'`

typeset -u SERVER_NAME

export SERVER_NAME


#----------------------------------------

# 每5分钟运行一次vmstat(300秒),可以根据实际情况修改 . . . .

#----------------------------------------

SAMPLE_TIME=300


#----------------------------------------

# 脚本一旦运行将不会停止,除非关闭操作系统 . . . .

# -S参数表示监控swap空间的情况,报告si,so列

# msg$$中的$$表示一个任意2位数字,系统自动生成

#----------------------------------------

while true

do

vmstat –S ${SAMPLE_TIME} 2 > /tmp/msg$$


#----------------------------------------

# Solaris系统的vmstat没有wait CPU统计,所以我们在那一列中存入0

# $1, $2, $6, $7等数字分别表示vmstat输出中的第几列,

# 每个Unix系统中的vmstat输出可能都不一样,

# 所以修改这些列号,就可以应对不同的操作系统。

#----------------------------------------

cat /tmp/msg$$|sed 1,3d | awk '
{ printf("%s %s %s %s %s %s %s %s %s %s n",
$1, $2, $6, $7, $8, $9, $12, $20, $21, $22) }'
| while read RUNQUE WAITQUE SWAPIN SWAPOUT
PAGE_IN PAGE_OUT PAGE_SCAN USER_CPU SYSTEM_CPU IDLE_CPU

do


$ORACLE_HOME/bin/sqlplus perfstat/perfstat <
insert into perfstat.stats$vmstat

values (

SYSDATE,

$SAMPLE_TIME,

'$SERVER_NAME',

$RUNQUE,

$WAITQUE,

$SWAPIN,

$SWAPOUT,

$PAGE_IN,

$PAGE_OUT,

$PAGE_SCAN,

$USER_CPU,

$SYSTEM_CPU,

$IDLE_CPU,

0

);

commit;

EXIT

EOF

done

done


#----------------------------------------

#删除临时文件

#----------------------------------------

rm /tmp/msg$$

5. 创建run_vmstat.ksh脚本

该脚本放在crontab中,用来定时检查get_vmstat.ksh脚本有没有 正常运行,如果在运行,那么不作任何动作,如果不在运行,那么就运行get_vmstat.ksh脚本。这个脚本的意义在于防止重新启动操作系统之后忘记 运行get_vmstat.ksh脚本。

# run_vmstat.ksh

#!/bin/ksh

#----------------------------------------

# 首先设定环境变量,根据实际环境修改. . . .

#----------------------------------------

SCRIPT_PATH=`echo ~oracle/vmstat`

export SCRIPT_PATH

ORACLE_SID=kamusdb

export ORACLE_SID

ORACLE_HOME=`cat /var/opt/oracle/oratab|grep $ORACLE_SID:|cut -f2 -d':'`

export ORACLE_HOME

PATH=$ORACLE_HOME/bin:$PATH

export PATH


#----------------------------------------

# 作更进一步地控制,在系统没有操作的时间内停止监控

# 晚上8点到第二天凌晨8点之间停止监控

# 其它时间如果get_vmstat不在运行,就运行它
#----------------------------------------


HOUR=`date +"%H"`

check_stat=`ps -ef|grep get_vmstat|grep -v grep|wc -l`

vmstat_num=`expr $check_stat`


if [ $HOUR -gt 19 ] || [ $HOUR -lt 8 ]

then

if [ $vmstat_num -gt 0 ]

then kill -9 `ps -ef|grep get_vmstat
|grep -v grep|awk '{print $2 }'` > /dev/null

fi

else

if [ $vmstat_num -le 0 ]

then nohup $SCRIPT_PATH/get_vmstat.ksh > /dev/null 2>&1 &

fi

fi
阅读(494) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~