如何在程序中获取系统ASP使用率等系统状态信息

如何在程序中获取系统ASP使用率等系统状态信息

AS/400系统管理员都对系统ASP空间增长情况很关心,当系统ASP 空间涨满了以后将会引起系统DOWN机等安全问题。系统ASP空间与硬盘空间并不完全等同,如果系统只配置了一个ASP分区,那么系统ASP空间与硬盘空 间是等同的,如果系统配置了多个ASP分区,则系统ASP只是ASP 1的分区。用WRKSYSSTS命令查看到的% system ASP used就是表示系统ASP空间的使用率。

与系统ASP空间使用率有关的系统值有两个:QSTGLOWLMT和QSTGLOWACN。QSTGLOWLMT系统值设定了最小硬盘空间警告线百分比,比如设定为5,即表示系统ASP使用率达到95%,即引起安全动作,安全动作由系统值QSTGLOWACN设定。

能不能在程序中自动获取系统ASP使用率,这样当硬盘空间达到危险值时,由程序提前报警呢?或者在程序中自动执行一些安全动作,比如自动清理一些过时的文件,或停止某些程序运行,以降低系统ASP使用率?

OS/400 系统提供了一个叫QWCRSSTS的API函数,该函数功能就可以提取用WRKSYSSTS命令看到的系统状态信息,还可以提取更多的用 WRKSTSSTS命令看不到的一些其他系统信息。可以在RPG、C、CL等程序里调用该API以获取系统信息。该函数的详细使用说明可以参看 《System API Reference》这本书。

下面我用一个实际获取系统ASP使用率的CL程序做例子,来看看如何使用QWCRSSTS。

QWCRSSTS 共有五个入口参数,第一个参数是接受返回系统状态信息的输出参数,存放的是返回系统状态信息块。该系统状态信息块是按照一定结构来存放各种系统状态信息 的。第二个参数是输入参数,指定第一个接受系统状态信息块变量的长度,类型为Binary。第三个参数是指定第一个参数系统状态信息块中的系统信息存放结 构名,共有三种不同的结构可选,分别是:SSTS0100、SSTS0200、SSTS0300。第四个参数是表示是否重新设置状态统计,通常我们选 *YES。第五个参数是错误码。

在本示例CL程序中,指定使用SSTS0200系统状态信息结构。该结构中53-57位存放的就是% system ASP used。该值除上10000,就是正常百分比。在程序中先是提取QSTGLOWLMT系统值,指定100-QSTGLOWLMT-2为程序警告线,比如 QSTGLOWLMT如果设为5,那么当系统ASP到93%的时候,程序会向用户发出一个消息。同时把ASP状态返回值设为1,以供其他程序调用,当调用 程序判断ASP状态返回值为1的时候,就知道系统ASP空间利用率到了警告线,需要执行一些安全动作了。


/*===================================================================*/
/*      */
/*-----------------------------------------------------------------------------------------------------------------*/
/* PROGRAM NAME : MONASP */
/* CREATED BY : BLOG LIOU */
/* CREATED DATE : 2003.11.11 */
/* DESCRIPTION : Monitor ASP Used */
/* MonASPPer: (100-STGLOWLMT)-2 */
/*===================================================================*/
PGM PARM(&ASPFLAG)
DCL VAR(&ASPFLAG) TYPE(*CHAR) LEN(1)
DCL VAR(&FORMAT) TYPE(*CHAR) LEN( +
VALUE('SSTS0200')
DCL VAR(&LENFLD) TYPE(*CHAR) LEN(4) +
VALUE(X'00000044')
DCL VAR(&SYSNAM) TYPE(*CHAR) LEN(
DCL VAR(&SYSUSEC) TYPE(*CHAR) LEN(4)
DCL VAR(&SYSUSE) TYPE(*DEC) LEN(9 2)
DCL VAR(&SYSINFO) TYPE(*CHAR) LEN(6
DCL VAR(&ERRCODE) TYPE(*CHAR) LEN( +
VALUE(X'0000000000000000')
DCL VAR(&RESETSY) TYPE(*CHAR) LEN(10) VALUE(*YES)
DCL VAR(&QMNPER) TYPE(*DEC) LEN(9 2) VALUE(1000000)
DCL VAR(&QALARM) TYPE(*DEC) LEN(9 2) VALUE(20000)
DCL VAR(&STGLOWLMT) TYPE(*DEC) LEN(9 2)
DCL VAR(&SNDMSG) TYPE(*CHAR) LEN(10)

CHGVAR VAR(&ASPFLAG) VALUE('0')
RTVSYSVAL SYSVAL(QSTGLOWLMT) RTNVAR(&STGLOWLMT)
CHGVAR VAR(&STGLOWLMT) VALUE(&STGLOWLMT * 10000)
CHGVAR VAR(&QMNPER) VALUE(&QMNPER - &STGLOWLMT)
CHGVAR VAR(&QMNPER) VALUE(&QMNPER - &QALARM)

CALL PGM(QWCRSSTS) PARM(&SYSINFO &LENFLD &FORMAT +
&RESETSY &ERRCODE)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERREND))
CHGVAR VAR(&SYSUSEC) VALUE(%SST(&SYSINFO 53 4))
CHGVAR VAR(&SYSUSE) VALUE(%BINARY(&SYSUSEC))
CHGVAR VAR(&SYSNAM) VALUE(%SST(&SYSINFO 17 )
IF COND(&SYSUSE > &QMNPER) THEN(DO)
CHGVAR VAR(&SNDMSG) VALUE(&SYSUSE)
SNDPGMMSG MSG(&SYSNAM *BCAT ' - (ASP USED +
PERCENT)*10000 = ' *BCAT &SNDMSG) +
TOMSGQ(SMDOB)
SNDPGMMSG MSG('*****SYSTEM OVER MonASP !!! ') +
TOMSGQ(MYUSER) MSGTYPE(*INFO)
CHGVAR VAR(&ASPFLAG) VALUE('1')
ENDDO
GOTO CMDLBL(END)

ERREND: SNDPGMMSG MSG(' ERROR ON QWCRSSTS CALL') +
TOMSGQ(MYUSER) MSGTYPE(*INFO)
END: ENDPGM


该程序也可以与某些报警程序连起来使用,比如当系统ASP空间达到警告线后,程序调用某些拨号程序,就可以给系统管理员手机发短信息等。

如果再设计一个显示文件,把QWCRSSTS获取到的系统状态信息,比如系统ASP使用率、CPU使用率、系统出现Message进程数,都显示出来,我们就实现了一个系统状态信息的监视工具。 

posted @ 2008-01-09 14:19  深渊野鱼  阅读(640)  评论(0编辑  收藏  举报