当执行消息流线程时,它需要存储器执行由其连接的节点的逻辑所定义的指令。该存储器来自执行组的堆和堆栈大小。分配到消息流线程的缺省堆栈大小取决于使用的平台。
每个消息流线程分配到 1MB 的堆栈空间。
每个消息流线程分配到 8MB 的堆栈空间。
每个消息流线程分配到 1MB 的堆栈空间。
每个消息流线程分配到 512KB 的下行堆栈空间和 50KB 的上行堆栈空间。
在消息流中,节点通常使用约 2KB 的堆栈空间。因此,典型的消息流大约在 z/OS 平台上包含 250 个节点,在 UNIX 平台和 Windows 上包含 500 个节点。这个数字的大小取决于所使用节点的类型和它们执行的处理。
可通过将 MQSI_THREAD_STACK_SIZE 环境变量设置为适当值来增加堆栈大小。当重新启动运行于系统的代理时,代理将使用新的值。
您所设置的 MQSI_THREAD_STACK_SIZE 值用于在 DataFlowEngine 进程中创建的每个线程。 如果执行组中指派了许多消息流,且为 MQSI_THREAD_STACK_SIZE 设置了较大的值,则 DataFlowEngine 进程将因此需要大量存储器以用于堆栈。
z/OS 上的集成程序组件使用新的 XPLINKage(额外的性能链接)进行编译,从而使运行时代码最优化。但如果初始堆栈大小不够大,则会使用堆栈扩展数据块。每个扩展数据块中使用 128KB。请务必选择足够大的下行堆栈大小,这是因为使用堆栈扩展数据块时,XPLINK 的执行性能会非常差。
export _CEE_RUNOPTS=XPLINK\(ON\),RPTSTG(ON)然后,您可以通过在组件概要文件中更改或添加 LE_CEE_RUNOPTS 环境变量来覆盖 z/OS 上堆栈大小的缺省值。
当更新组件概要文件时,必须停止组件、对概要文件进行必要的更改、提交 BIPGEN 以重新创建 ENVFILE,然后重新启动该组件。
export _CEE_RUNOPTS=XPLINK(ON),THREADSTACK(ON,50K,15K,ANYWHERE,KEEP,512K,128K)
使用 RPTSTG 可延长应用程序运行的时间。因此,您应该将其作为辅助仅用于消息流开发和最终的生产环境。如果已确定了所需的正确堆栈大小,您应该从 _CEE_RUNOPTS 环境变量中除去该选项。