理论上使用RZ11的相关配置,包括超时、资源占用限制等参数可以自动杀掉某些进程,但有的情况下这些配置不起作用,例如进程进入PPRV模式时就需要人工去SM50里杀进程。
通常的操作如下,这需要BASIS经常检查SM66和SM50:
那么,是否可以把这个动作做到自动化呢?答案是可以的。
SAP提供了两个函数,借助这两个函数能获取系统进程信息,再执行一个C call调用内核模块(SAP虚拟机,SAP内核)执行对应的操作即可实现。
Function module ‘TH_SERVER_LIST’ which gives all the details of the SAP Application Servers on the network.这个函数作用相当于SM51,列出所有实例。
Function module ‘TH_SYSTEMWIDE_WPINFO’ which gives all the details of work processes on given SAP Application Server.这个函数作用相当于SM50,如果有多个实例,需要先调用TH_SERVER_LIST获得实例清单后循环调用这个函数获得每个实例的进程信息。
C call ‘ThWpInfo’可以停止指定的进程,理论上和使用SM50取消进程效果是一样的,但由于SM50是前台操作、可能在执行取消进程的时候会有一些处理panic的步骤,而直接调用内核模块ThWpInfo有可能没有这些步骤。
我们来调试一下SM50看取消进程这个操作背后的逻辑,在测试环境选中一个进程,/h后执行取消进程操作进行原理分析:
可见,SM50的取消进程,实际上调用的也是ThWpInfo这个内核模块,在调试SM50过程中也没有发现ABAP层面有回滚数据等处理panic的操作,那么panic的处理应该是放到了内核模块ThWpInfo中了。
综上,放心调用ThWpInfo杀进程即可。
以下为来自SCN一位大佬的示例代码,可参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
REPORT ZR_KILL_PROCESS. DATA: itab LIKE STANDARD TABLE OF WPINFO, wa LIKE WPINFO, delay_seconds TYPE i VALUE 900. DATA: BEGIN OF TY. INCLUDE STRUCTURE MSXXLIST_V6. DATA: END OF TY. DATA: itab_as LIKE STANDARD TABLE OF TY, wa_as LIKE TY. CONSTANTS: opcode_wp_stop TYPE x VALUE 2. CALL FUNCTION ‘TH_SERVER_LIST’ TABLES LIST = itab_as EXCEPTIONS NO_SERVER_LIST = 1 OTHERS = 2. LOOP AT itab_as INTO wa_as. CALL FUNCTION ‘TH_WPINFO’ EXPORTING SRVNAME = wa_as–name TABLES WPLIST = itab EXCEPTIONS OTHERS = 1. LOOP AT ITAB INTO WA. IF WA–WP_TYP = ‘DIA’ AND WA–WP_STATUS = ‘Running’ AND WA–WP_ELTIME GT delay_seconds. CALL ‘ThWpInfo’ ID ‘OPCODE’ FIELD opcode_wp_stop ID ‘SERVER’ FIELD wa_as–name ID ‘PID’ FIELD wa–wp_pid. ENDIF. ENDLOOP. ENDLOOP. |
该示例的网址:
https://blogs.sap.com/2015/04/27/kill-delayed-work-processses-automatically-through-batch/
本文作者: GavinDong
版权属于: GavinDong博客
文章链接: https://gavindong.com/3553.html
如果使用过程中遇到问题,可 **点击此处** 交流沟通。
版权所有,转载时必须以链接形式注明作者和原始出处及本声明。