[ID 1532550.1]
IPC 技术简介
IPC 被划分为三组操作系统级可调参数,分别为“信号量”、“消息”和“共享内存”。在深入研究 IPC 优化之前,我们首先来看一看上述各个独立功能的性质。
信号量
信号量是一种可以在操作系统级别设置的标志,用于提供一般的建议锁定机制(与文件锁相似)。信号量将某个资源锁定后,操作系统中的其他程序将无法访问该资源。您可以使用信号量来控制对文件、共享内存或任何其他需要限制访问的资源的访问权限。
想象一下那些争夺同一资源(例如某个文件)的进程所面临的问题。(此处的资源可能是任何东西,例如磁盘分区、共享内存段或打印机)。如果一个进程正在修改某个文件,而与此同时,另一个进程正在读取该文件,则后者可能会看到半新半旧的信息。如果两个进程同时修改该文件的内容,则很可能会得到一堆乱码。
为了防止此类情况发生,通常会使用一个信号量来保护共享资源。信号量初始化为“1”,表示资源可用。进程在访问资源之前,会首先检查信号量的值。如果值为 1,进程会立即将该值降为 0(表明该资源不再处于空闲状态),然后在确知其他进程无法执行相同操作的情况下对该资源执行所有必要的操作。如果信号量为 0,则进程必须先等待该值恢复到 1,然后再检查或修改该资源。在进程完成对资源的访问之后,它需要将信号量返回到 1,从而允许其他进程继续进行操作。
T信号量的基本功能在于,您可以对它进行设置、检查(以查看是否已设置),或者您可以等到信号量被清除,然后再进行设置。
有关信号量的一个复杂之处在于,在对信号量操作进行编程时,您请求的不是单个信号量,而是一个信号量组。您可以请求只包含一个信号量的信号量组,但 Tuxedo 不会这么做,因此,它只需创建一个信号量组即可获取大量信号量。
参与 Tuxedo 应用程序的每个进程都需要信号量。应用程序会在启动时检查操作系统中已配置的信号量的数量。如果已配置的数量不够多,启动将失败。
消息队列和消息
消息队列和消息为操作系统中的不同进程提供了一种用于传输消息并由此进行通信的机制。消息队列可在进程之间共享,并且,由一个进程放入队列的消息可以被其他进程提取。
Oracle Tuxedo 系统使用 UNIX 系统消息和消息队列进行客户端/服务器通信。此类消息的示例包括服务请求、服务回复、会话消息、未经请求的通知消息、管理消息和事务控制消息。
每个 MSSQ 组(Multiple Servers, Single Queue)的多个服务器程序和单个服务器程序都相应地有一个用于接收请求的消息队列。每个客户端本身也都相应地拥有用于接收回复的消息队列。指定 REPLYQ 参数的服务器程序则会拥有各自独立的回复队列。
调整内核消息参数对于适当优化应用程序而言至关重要。如果值不恰当,可能会造成无法启动或性能严重下降。
共享内存
顾名思义,“共享内存”是指操作系统中两个或多个进程之间共享的内存。通常,操作系统在执行某个进程时,会为该进程分配单独的内存空间,因而,所分配的内存范围只能由该进程使用。各个进程在自己的内存空间内运行时,它们之间互相影响的可能性就大大降低了。当这些进程开始通过共享内存的使用共享内存空间时,某个进程破坏共享内存的可能性会大大增加。
在 Tuxedo 环境中,共享内存用于 Bulletin Board 以及工作站侦听器(Workstation Listener,WSL) 进程的控制表。应用程序可能也会将共享内存用于其他用途。
Tuxedo 对 IPC 资源的使用
如前所述,Tuxedo 会大量使用来自操作系统的 IPC 资源。
附加到 Tuxedo Bulletin Board 的每个进程或线程都需要 UNIX 信号量。其中包括 native 客户端、服务器、WSH、WSL、BBL、TMS、Bridge、Domain 网关以及所有其他系统进程,例如 event broker 或 /Q 进程。
在Tuxedo启动之前,UNIX会预先分配信号量。在信号量过少的情况下,Tuxedo 系统会无法正常启动且会报告错误,表明信号量缺乏。因此,通常很容易确定操作系统的信号量是否过少。
消息队列的不同之处在于,它们由 Tuxedo 动态分配。每个 native 客户端和 WSH 都需要回复消息队列。每个服务器都需要请求队列,但多个服务器可以通过 RQADDR 参数共享请求队列(MSSQ 集)。多个服务器还可以拥有回复队列;如果设置了 REPLYQ=Y 开关,每个服务器都可以获得回复队列,即使是在 MSSQ 集中,也是如此。
此外,即使没有明确的规定,系统服务器也常常会分配回复队列,例如 TMS 服务器和 Domain 网关。由于消息队列是动态分配的(尤其是在动态调整 Tuxedo Server 数量的情况下),因此很难事先预测应用程序是否会出现消息队列问题。
共享内容由 Bulletin Board 以及其他子系统(例如 /WS、/Q、/Domain)使用。Bulletin Board 的大小由不同的 UBBCONFIG 参数控制,例如 MAXACCESSERS、MAXGTT、MAXSERVERS、MAXSERVICES。事实上,UBBCONFIG 中以 MAX 开头的几乎所有属性都会影响 Bulletin Board 的最终大小。
定义 IPC 限制
出于快速处理的目的,大多数 IPC 和共享内存 Bulletin Board 表都是静态分配的,因此对其进行正确优化至关重要。如果其大小过大,内存和 IPC 资源会出现过度消耗;如果其大小过小,便很容易超出限制,从而导致进程失败。
UBBconfig 文件下 RESOURCES 节中的以下可优化参数与 IPC 大小相关:
- MAXACCESSERS – 一个节点上允许附加到 TUXEDO 系统的所有进程的最大数量。它不是所有进程的总和,而是进程最多的节点上的进程数量。默认值为 50。(您可以在每个计算机上重写 MACHINES 节中的 MAXACCESSERS。)
- MAXSERVERS – 应用程序中服务器进程的最大数量,包括所有管理服务器(例如 BBL 和 TMS)。它是所有节点上服务器进程的总和。默认值为 50。
- MAXSERVICES – 应用程序中可以发布的不同服务的最大数量。它是系统中所有服务的总和。默认值为 100。(设置此值时,请将默认值作为针对系统资源保留的数量。)
增加 MAXACCESSERS 的代价是,每增加一个访问器,节点就需要增加一个信号量。除了由 MAXACCESSERS 值添加的信号量开销外,系统进程也存在少量固定信号量开销。增加 MAXSERVERS 和 MAXSERVICES 的代价是,需要为各个服务器、服务和客户端项分别保留少量的共享内存。设置这些参数的目的是为应用程序的未来扩展做准备。尤其要仔细检查 MAXACCESSERS。
此外,还有三个参数会影响 IPC 大小,即 MAXGTT、MAXINTERFACES 和 MAXCONV:
- MAXGTT – 指定在任何时候均受 Tuxedo 应用程序支持的全局事务的最大数量。修改此值将改变共享内存开销。
- MAXINTERFACES – 指定此 Tuxedo 应用程序 CORBA 接口的最大数量。默认值为 100。修改此值将改变信号量和共享内存开销。
- MAXCONV – 指定可在计算机上同时进行的会话的最大数量。MAXCONV 的值必须大于 0 且小于 32,768。在具有会话服务器的计算机上,默认值为 10,除此以外则为 1。修改此值将改变共享内存开销。
请注意,如果要评估修改这些参数所产生的影响,其计算过程非常复杂。最好使用 tmloadcf –c 或 tmboot –c 作为替代来获取 IPC 大小信息。
了解 Tuxedo IPC
首次尝试确定 IPC 的正确设置时,第一步只需在您尝试为其配置 IPC 资源的系统环境中对 ubbconfig 文件运行命令
tmloadcf –c [ubbconfig file] |
即可。
运行此命令将生成类似以下内容的输出:
Ipc sizing (minimum /T values only) …
Fixed Minimums Per Processor SHMMIN: 1 Variable Minimums Per Processor SEMUME, A SHMMAX where 1 <= A <= 8. The number of expected application clients per processor should be added to each MSGMNI value. |
在上表中,A 表示值介于 1 和 8 之间的变量。您可以用“A * SEMMS”列下的值(在本例中为 100)除 SEMMSL 的值(在本例中为 13),来确定 A 的值(在本例中,100/13 = 7.69 或四舍五入到 8)。得出 A 的值后,您就可以确定 SEMMNI,它等于 A + 1,在本例中即为 9。
列出的这些值是操作系统中各个属性可以设置的最小值。遗憾的是,tmloadcf –c 方法未涵盖所有对环境的 IPC 设置,且所示值只表示实际情况中运行系统环境所需的最小值。
一种更为完整的方法是,独立调整各个 IPC 资源的大小。这种做法需要统一的方法来执行。附加的 Excel 电子表格(请参阅附件:Tuxedo_IPC_Calculator.xls)中概述了下列方法,该方法可帮助您确定正确的值。
在开始调整 IPC 资源的大小之前,必须先了解和记录以下项目。下面的表格中有一栏是空白的,您可以使用该表格来帮助调整 IPC 的大小。
属性 | 描述 | 您的值 |
---|---|---|
Servers | 此节点上配置的 Tuxedo Server 的总数量。该节点是运行 Tuxedo 的物理计算机,因此这个数量不应包括在其他计算机上运行的服务器程序数量。 | |
Servers with ReplyQ | 已配置 REPLYQ=Y选项的 Tuxedo Server。 | |
Servers in MSSQ | 在MSSQ组中配置的服务器程序的总数量。 | |
Total MSSQ Sets | 实际的MSSQ组的总数量(相对于一组服务器程序的数量)。 | |
Native Clients | 环境中 native 客户端的数量(不是通过工作站处理器连接的客户端)。 | |
Largest Message Size | 系统将传输的最大消息大小。 | |
Average Message Size | 系统正在传输的消息的平均大小。 | |
Message Queue Size | 系统中 IPC 消息队列的大小,此值由在操作系统中设置的 MSGMNB 属性确定。 | |
Total Inflight Messages | 在任何时候系统中可能会发行的消息总数(如果您不知道具体的值,请将此属性设置得高一点)。 | |
Total /Q Queuespaces | 系统中 /Q 队列空间总数。 | |
MAXWSCLIENTS | 可与此计算机连接的工作站客户端的最大数量。此属性在 UBBConfig 中设置。 | |
MAXACCESORS | 按照 UBBConfig 文件 *RESOURCES 节中的内容进行设置。 |
上述属性需要在 UNIX 或 Windows 环境中进行配置。如果是在 UNIX 中配置这些属性,请与当地的系统管理员联系,以获取有关设置实施的帮助。如果是在 Windows 中进行更改,则请双击 Windows 控制面板中的“Oracle Tuxedo”(或“BEA Administration(BEA 管理)”)图标。有关如何通过 Windows 工具使用和配置 IPC 资源的详细信息,请参考如下文档:
http://download.oracle.com/docs/cd/E13161_01/tuxedo/docs10gr3/nt/ntadmin.html#wp418757
现在,我们来检查一下每个可能的 IPC 配置选项及其用途和正确的值。请注意,在查看下面的结构和公式时,默认值设置所示的是 Oracle 或操作系统供应商通常会推荐的设置。显然,每个供应商可能会针对其自身的操作系统推荐不同的值,但是您可以将这些值用作在整个操作系统中进行设置的参考值(请经常查看的操作系统手册,以确认系统环境中的设置和范围)。最小值设置指定可使用哪个公式来确定此属性可以设置的最小值,以使 Tuxedo 系统正常运行。最小值只应作为指示值使用,若将属性的值设置为最小值,在以后其他应用程序需要操作系统中的 IPC 资源或者 Tuxedo 系统发生扩展时,很可能会引起某些问题。
因此,正确的值通常介于最小值和所提供的默认值之间。如果无法肯定,请使用接近默认值的值,因为默认值提供了可伸缩性空间,同时也为平台上的其他 Tuxedo 实例提供了空间。请注意,IPC 设置会在操作系统中分配真实的内存。如果不需要使用大量资源,请不要在操作系统中分配过多的资源,因为这样会导致性能问题。
Oracle 针对每个平台提供了建议的 IPC 设置。这些建议的设置被称为“平台数据表”,Tuxedo 10gR3 的建议设置可通过以下链接找到:
http://download.oracle.com/docs/cd/E13161_01/tuxedo/docs10gr3/install/inspds.html
SEMMNS
完整名称: | 信号量的最大数量 |
---|---|
用途: | Semmns 定义系统范围内可以分配给用户的单个 IPC 信号量的最大数量。 |
默认值: | 1024 |
最小值设置: | 至少设置为 MAXACCESSERS – MAXWSCLIENTS + 13 |
SEMMNI
完整名称: | 信号量组的最大数量 |
---|---|
用途: | Semmni 指定可以同时存在于系统中的 IPC 信号量组的最大数量。 |
默认值: | 1024 |
最小值设置: | 使用命令 tmloadcf –c 确定此属性的适当值。 |
SEMMSL
完整名称: | 每个标识符可具有的 IPC 信号量的最大数量 |
---|---|
用途: | Semmsl 指定每个信号量标识符可具有的单个 IPC 信号量的最大数量。 |
默认值: | 2048 |
最小值设置: | SEMMNS / SEMMNI |
SEMMAP
完整名称: | 信号量资源图的最大大小 |
---|---|
用途: | Semmap 指定用于在共享内存中分配新 IPC 信号量的可用空间资源图的大小。 |
默认值: | 1024 |
最小值设置: | SEMMNI + 2 |
SEMMNU
完整名称: | 信号量 undo 结构的最大数量 |
---|---|
用途: | Semmnu 指定进程的 IPC undo 结构的最大数量 |
默认值: | 1024 |
最小值设置: | 与 SEMMNS 相同 |
SEMUME
完整名称: | 挂起的 undo 操作的最大数量 |
---|---|
用途: | Semume 指定某给定进程可以在其上挂起 undo 操作的 IPC 信号量的最大数量。 |
默认值: | 1024 |
最小值设置: | 与 SEMMNS 相同 |
SHMMAX
完整名称: | 最大共享内存大小 |
---|---|
用途: | Shmmax 指定系统范围内最大可允许的共享内存段大小。 |
默认值: | 4194304 (4MB) |
最小值设置: | BBL 的大小很难确定,但 SHMMAX 必须大于 BBL 的大小。我们建议对该值保留系统默认值(通常介于 4MB 和 64MB 之间)。请注意,此设置仅针对 Tuxedo 所使用的 BBL。如果曾有其他应用程序在计算机上运行且使用了共享内存,则还必须根据该应用程序的共享内存使用情况对这一数字进行验证。 |
SHMSEG
完整名称: | 每个进程的共享内存段数量 |
---|---|
用途: | Shmseg 定义每个进程的共享内存段的最大数量 |
默认值: | 500 |
最小值设置: | 对于繁忙的应用程序,必须至少设置为 32 到 64。任何小于 SHMMNI 的值均有效,稍高一点也可以接受。 |
SHMMNI
完整名称: | 共享内存段的数量 |
---|---|
用途: | Shmmni 定义系统中共享内存段标识符的数量 |
默认值: | 100 至 400,具体取决于您的系统环境 |
最小值设置: | Tuxedo 要求 BLL 和每个 /Q 队列空间都有共享内存段。系统环境中的其他应用程序可能也需要共享内存段。通常情况下,100 即可,但在某些情况下可能需要更高的值。再次提醒,这一设置具体取决于运行 Tuxedo 应用程序的同一计算机上运行的其他应用程序,且应当根据具体情况进行处理。 |
SHMMIN
完整名称: | 共享内存段的最小大小 |
---|---|
用途: | Shmmin 指定系统环境中共享内存段的最小大小。 |
默认值: | 1 |
最小值设置: | 设置为 1,即允许系统为共享内存段分配最低 1 字节的空间。 |
MSGMNI
完整名称: | 消息标识符的最大数量 |
---|---|
用途: |
Msgmni 指定计算机上允许的系统范围内的消息队列的最大数量。 |
默认值: | 256 至 512,具体取决于系统环境 |
最小值设置: | MAXACCESSORS + (Servers with ReplyQ – Servers in MSSQ) + MSSQ组总数 + 7 |
MSGMAP
完整名称: | 消息资源图大小 |
---|---|
用途: | Msgmap 指定 IPC 消息空间资源图中的条目数量 |
默认值: | 8130 |
最小值设置: | MSGTQL + 2 或 3。此设置取决于具体的平台。有关更多信息,请参阅您的平台数据表。 |
MSGMAX
完整名称: | 消息最大大小 |
---|---|
用途: | Msgmax 定义最大的 IPC 消息大小(以字节为单位) |
默认值: | 65536 |
最小值设置: | MSGMNB 的 75% |
MSGMNB
完整名称: | 消息队列的最大字节数 |
---|---|
用途: | Msgmnb 定义单个 IPC 消息队列上的最大字节数 |
默认值: | 65536 |
最小值设置: | 65536,您可以将它设置得更低,但是标准的 Tuxedo 队列大小是 65536 (64K),诸如 128K 和 256K 之类的值也是可以的。但请注意,每个拥有队列的 Tuxedo Server 在开始构建队列时都会尽数使用这些内存。 |
MSGSSZ
完整名称: | 消息段大小 |
---|---|
用途: | Msgssz 指定 IPC 消息段中的字节数 |
默认值: | 64 |
最小值设置: | 通常设置为 8、16、32 或 64(消息段大小以字节为单位) |
MSGTQL
完整名称: | 消息总数 |
---|---|
用途: | Msgtql 定义在任何时候系统中的 IPC 消息的最大数量 |
默认值: | 1024 至 8128,具体取决于您的系统环境 |
最小值设置: | 在任何时候 Tuxedo 系统中可能会发行的消息的最大数量。请务必将此值设置得足够大,以便能够处理所有发行的消息。如果该值过小,系统性能可能会降低。 |
MSGSEG
完整名称: | 消息段 |
---|---|
用途: | Msgseg 定义系统中的 IPC 消息段数量 |
默认值: | 介于 8192 和 32767 之间,具体取决于您的系统环境 |
最小值设置: | 设置为 (Average Message Size * Maximum Message Headers)/MSGSSZ |
IPC 命令
下面列出了一些有用的 IPC 命令,可用于查看和处理您的 Tuxedo 应用程序的 IPC 数据。
ipcs
ipcs 实用程序用于输出活动的进程间进行通信所使用的IPC资源相关信息。显示的信息由提供的选项控制。如果没有这些选项,有关当前在系统中处于活动状态的消息队列、共享内存和信号量的信息会以短格式形式输出。
一些较为有用的选项包括:
选项 | 描述 |
---|---|
-b | 输出有关最大允许大小的信息:消息队列上消息的最大字节数、共享内存段的大小以及每个信号量组中的信号量数量。 |
-o | 输出有关未决使用情况的信息:队列上的消息数量、消息队列上消息的字节总数以及附加到共享内存段的进程数量。 |
-q | 输出有关活动消息队列的信息。 |
-s | 输出有关活动信号量的信息。 |
-m | 输出有关活动共享内存段的信息。 |
ipcs示例:ipcs -boq
下面给出了 ipcs –boq 命令的输出内容。–b 显示队列上的消息的最大字节数量,-o 显示队列上的消息数量,–q 指定我们仅显示有关队列的信息(即,不显示有关共享内存或信号量的信息)。
IPCS status from BEA_segV8.1 as of Wed Jun 22 10:41:54 2005 >T ID KEY MODE OWNER GROUP CBYTES QNUM QBYTES Message Queues: q 513 0x0000bea2 -Rrw-rw-rw- 0 0 0 0 65536 q 770 0x00000000 -Rrw-rw-rw- 0 0 0 0 65536 q 515 0x00000000 -Rrw-rw-rw- 0 0 0 0 65536 q 4 0x00000000 –rw-rw-rw- 0 0 11396 37 65536 |
在上述输出内容中,我们可以看到 ID 为 4 的队列有 37 条消息 (QNUM),队列上有 11396 字节 (CBYTES)。
我们还可以在 MODE 列中看到队列的 UNIX 风格权限,而 OWNER 和 GROUP 列表示了队列所有者和所在的组。所有三类 IPC(信号量、队列和共享内存)都有这些列。
有关 ipcs 命令的更多信息,请参阅 UNIX 使用手册。
ipcrm
ipcrm 用于删除一个或多个消息队列、信号量或共享内存段。在出现灾难性的 Tuxedo 系统故障而不得不 kill Tuxedo 进程之后,通常会使用此命令。在这种情况下,Tuxedo Server 无法释放其 IPC 资源,我们需要手动进行操作。
使用 ipcs 命令输出 ID 列中的 ID,我们可以确定要清除的单个 IPC 资源。相关的选项包括:
选项 | 描述 |
---|---|
-m <ID> | 删除 ID 为 <ID> 的共享内存段。 |
-s <ID> | 删除 ID 为 <ID> 的信号量。 |
-q <ID> | 删除 ID 为 <ID> 的消息队列。 |
因此,假设 ipcs –boq 命令的输出如下:
IPCS status from BEA_segV8.1 as of Wed Jun 22 10:41:54 2005 T ID KEY MODE OWNER GROUP CBYTES QNUM QBYTES Message Queues: q 513 0x0000bea2 -Rrw-rw-rw- 0 0 0 0 65536 q 770 0x00000000 -Rrw-rw-rw- 0 0 0 0 65536 q 515 0x00000000 -Rrw-rw-rw- 0 0 0 0 65536 q 4 0x00000000 –rw-rw-rw- 0 0 11396 37 65536 |
我们可以使用以下命令删除所有消息队列:
Ipcrm –q 513 –q 770 –q 515 –q 4 |
此命令将删除 ID 为 513、770、515 和 4 的队列。–m 和 –s 选项的用法与 –q 完全相同。
tmipcrm
tmipcrm 用于清除由 Tuxedo ATMI 应用程序分配的 IPC 资源,例如共享内存、消息队列和信号量。此命令通常在出现异常错误情况(例如故障关机)之后运行。在正常情况下,Tuxedo ATMI 系统会在关闭时清除所有已分配的 IPC 资源。将被删除的 IPC 资源包括那些由核心 Tuxedo ATMI 系统和工作站组件所使用的资源。
tmipcrm 只在本地服务器上运作;它不清除处于 Tuxedo 配置中的远程计算机上的 IPC 资源。您必须将 TUXCONFIG 文件的名称指定为 TUXCONFIG 环境变量的值,或在命令行上指定该名称。TUXCONFIG 文件必须存在且必须是可读的。
只有管理员或其他拥有适当权限的人才能成功运行此命令。此命令假设它可以附加到 Bulletin Board (BB) 的共享内存段,并尝试删除存储在 Bulletin Board 中并从中引用的 IPC 资源。此类删除尝试可能会因系统上的其他情况而失败。如果检测到失败,将会进行报告。
支持以下选项:
选项 | 描述 |
---|---|
-y | 对所有提示均给出肯定回答。 |
-n | 不删除 IPC 资源,而是在标准输出中显示 IPC 资源列表。 |
tmipcrm的输出示例:
$ tmipcrm /home/user/apps/tuxconfig Looking for IPC resources in TUXCONFIG file /home/user/apps/tuxconfig The following IPC resources were found: Message Queues: 0x2345 0x3456 Semaphores: Shared Memory: |
bbsread
为了检查此配置的本地 IPC 资源,启动了 tmadmin 会话并运行了 bbsread 命令。bbsread 的输出如下所示:
bbsread Output
SITE1> bbsread IPC resources for the bulletin board on machine SITE1: SHARED MEMORY: Key: 0x1013c38 SEGMENT 0: ID: 15730 Size: 36924 Attached processes: 12 Last attach/detach by: 4181 This semaphore is the system semaphore |
bbsread 命令的输出分为两个部分,即共享内存和信号量。
共享内存
共享内存输出分为若干个段,每个段都拥有自己的 ID。在所有 IPC 资源中,段 ID 是唯一的,它也是您在运行 ipcs –m 命令时会看到的 ID。
对于共享内存的每个段,系统会显示以下一些项目:
项目 | 描述 |
---|---|
ID | IPC 资源的唯一 ID |
Size | 共享内存段的大小(以字节为单位) |
Attached processes | 显示附加到共享内存段的活动进程数量。这些进程包括 BBL、WSH 进程、Tuxedo Server 等。 |
Last attach/detach by | 显示最后一个连接到共享内存段的进程的进程 ID。 |
信号量
请务必注意,ipcs 命令的信号量输出的 ID 是信号量组的 ID,并且这些信号量组所包含的是实际的信号量。bbsread 命令的输出显示系统中信号量的某个部分。这些信号量按其信号量组 ID 进行分组,该 ID 是由 ipcs 命令显示的 ID,也是传递到 ipcrm 命令的 –s 选项的 ID。
每个信号量组的所有信号量都会显示在输出中,表示这些信号量是处于锁定状态还是空闲状态(当前状态)、最后使用信号量的进程 ID(最后一个访问器)以及正在等待使用该信号量的进程数量(等待进程数)。
从这个输出中,我们可以确定 Tuxedo 域内的信号量活动状态。
IPC 的常见故障排查
如何在应用程序无法正常关闭时使用 IPC 工具
通过 tmshutdown 命令正常关闭 Tuxedo 应用程序时,所有 IPC 资源都会从系统中删除。但是在某些情况下,应用程序可能无法正常关闭,一些偏离的 IPC 资源可能会保留在系统中。如果发生此类情况,您可能无法重新启动该应用程序。
解决此问题的一个方法是,使用可调用系统 ipcs 命令的脚本删除 IPC 资源,并扫描特定用户帐户所有的全部 IPC 资源。但是,此方法很难辨别不同的 IPC 资源集;一些资源可能属于 Tuxedo 系统,一些可能属于特定的 Tuxedo 应用程序,而另外一些可能属于与 Tuxedo 系统毫不相关的应用程序。能够辨别这些资源集非常重要;误删 IPC 资源可能会严重损坏应用程序。
通过 Tuxedo IPC 工具(即 tmipcrm 命令),您可以删除活动应用程序中由 Tuxedo 系统分配的 IPC 资源(也就是说,此操作仅适用于核心 Tuxedo 和工作站组件)。
用于删除 IPC 资源的 tmipcrm 命令位于 TUXDIR/bin 中。此命令可读取二进制配置文件 (TUXCONFIG),并附加到使用此文件中所含信息的 Bulletin Board。tmipcrm 只在本地服务器计算机上运作;它不清除处于 Tuxedo 配置中的远程计算机上的 IPC 资源。
若要运行此命令,请在命令行上输入该命令,如下所示:
tmipcrm [-y] [-n] [TUXCONFIG_file] |
IPC 工具会列出由 Tuxedo 系统使用的所有 IPC 资源,并给出删除选项。
注意:只有在命令行中正确设置了 TUXCONFIG 环境变量或指定了相应的 TUXCONFIG 文件的情况下,此命令才起作用。