日期:2014-05-16  浏览次数:20648 次

SAP的dispatcher与UNIX上工作进程创建

今日培训,得知SAP整个application server的启动过程是:

首先dispatcher启动,然后dispatcher会进行一系列的初始化工作,也就是说,启动instance其实是启动dispatcher

dispatcher初始化:

  • 网络
  • shared memory和sempaphore
  • 创建工作进程

而工作进程(UPD DIA ENQ SPO等等)的创建,在UNIX上是以FORK的方式,即子进程的方式进行。因为dispatcher和工作进程都是一个二进制可执行文件(disp+work),所以可以很容易的fork子进程。个人对UNIX/LINUX编程是白痴,个人理解,这么做的好处是快速的将系统有关的信息复制到子进程(FORK方式决定的)并且WP的死掉可以被dispatcher所了解和控制。

以下几篇文章作为参考:

http://www.ibm.com/developerworks/cn/aix/library/au-unixprocess.html?UNIX 进程揭秘

http://blog.chinaunix.net/u2/63316/showart_509528.html?理解fork函数

http://www.chinaunix.net/jh/23/62948.html?在unix系统中创建守护进程

?

我们知道,SAP实例内的通信使用IPC或者UDP协议,为了性能。而与实例外系统通信使用TCP/IP协议。而与系统外的通讯是经过gateway的,dispatcher作为调度员控制所有与SAPGUI、gateway、MS的通信。但是有一点例外,为了效率,WP与gateway通信并不经过dispatcher,而是直接进行。

?

由于dispatcher如此重要,当系统出现hang或down机时,除了相关WP的trace文件外,disp的trace文件是必不可少的。