zoukankan      html  css  js  c++  java
  • 如何在程序中获取系统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进程数,都显示出来,我们就实现了一个系统状态信息的监视工具。 

  • 相关阅读:
    CODING x 百果园 _ 水果零售龙头迈出 DevOps 体系建设第一步
    Nocalhost 亮相 CD Foundation 国内首届 Meetup,Keith Chan 将出席致辞
    做云原生时代标准化工具,实现高效云上研发工作流
    打造数字化软件工厂 —— 一站式 DevOps 平台全景解读
    WePack —— 助力企业渐进式 DevOps 转型
    CODING Compass —— 打造行云流水般的软件工厂
    Nocalhost —— 让云原生开发回归原始而又简单
    CODING 代码资产安全系列之 —— 构建全链路安全能力,守护代码资产安全
    Nocalhost:云原生开发新体验
    使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller
  • 原文地址:https://www.cnblogs.com/wildfish/p/1031879.html
Copyright © 2011-2022 走看看