使用后台作业自动杀掉SAP的某些进程

理论上使用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一位大佬的示例代码,可参考:

该示例的网址:

https://blogs.sap.com/2015/04/27/kill-delayed-work-processses-automatically-through-batch/

发表评论