计算 Node.js 应用程序的存储需求

要在 CICS® 区域中启动一个或多个 Node.js 应用程序,必须确保有足够的可用存储器可供每个 Node.js 应用程序使用。 在同一区域中运行的 CICS 和其他产品可能需要大量 z/OS 存储器。 CICS 存储器分配参数 (例如, DSALIMEDSALIM ) 会影响存储器可用性,并且与峰值需求相比可能会过度分配。

开始之前

您必须了解 z/OS 存储器 (请参阅 了解 z/OS 地址空间) 以及 CICS 如何使用 z/OS 存储器。 有关详细信息,请参阅 CICS 虚拟存储器: 概述 CICS 将虚拟存储器用于以及 JVM 存储器

关于此任务

未从 CICS DSA 或 EDSA 存储器分配 Node.js 应用程序所需的存储器。 部分存储由 Language Environment 管理,处理 C® 代码发出的请求,如 malloc() ;部分存储由 Node.js 应用程序直接管理,使用 z/OS 存储管理请求,如 IARV64STORAGE OBTAIN。 Language Environment 使用 存储服务。 z/OS

Node.js 运行时所使用的每个线程都需要 4 KB 的 24 位存储器。 Node.js 运行时启动后,所使用的线程数是固定的,通常介于 8 和 12 之间,除非您设置 UV_THREADPOOL_SIZE 环境变量。 此外, UNIX 系统服务在创建每个线程的过程中需要 256 KB 的连续 24 位存储器。

Node.js 运行时为 JavaScript 对象和 JIT 编译代码分配堆。 在 z/OS 2.3 或更高版本上,堆可以同时跨 31 位和 64 位存储器。 此外,堆由多个空间组成,它们的大小各不相同。 在测试环境中测量堆使用率是估算堆大小需求的最简单方法。 为 Node.js 运行时装入 UNIX 系统服务动态链接库 (DLL) 文件还需要 31 位存储器。

此外, Language Environment 还为 C++ 堆和栈分配了 64 位存储空间。 Node.js 运行时代码内部使用,本地模块也使用。

要估算 Node.js 应用程序所需的总存储空间,请执行以下过程。

过程

  1. 使用样本统计信息程序 DFH0STAT 来测量 24 位, 31 位和 64 位内存使用情况。

    查看 MVS 用户区域和扩展用户区域存储报告,了解有关使用 24 位和 31 位 MVS 存储的信息。

    查看 2 GB 以上存储(64 位存储) 报告,了解有关使用 64 位 MVS 存储的信息。

    • 记下 1 的值Current Unallocated Total,指示当前未分配的 24 位 (用户区域) 和 31 位 (扩展用户区域) 存储量。
    • 记下 2 的值MEMLIMIT minus Current Address Space active表示 CICS® 区域当前可用的 64 位存储空间。
    MVS User Region and Extended User Region
    _________________________________________________________
                                                        User Region               Extended User Region  
                                                       ______________________________________________________
      Last Monitor Sample Time . . . . . . . . . . . :  03/11/2022  16:22:13      03/11/2022  16:22:13   
      State. . . . . . . . . . . . . . . . . . . . . :                Normal                    Normal  
      Current Unallocated Total. . . . . . . . . . . :                5,956K                  392,956K          1 
      LWM Unallocated Total. . . . . . . . . . . . . :                5,956K                  392,956K  
      Current Unallocated Largest Contiguous Area. . :                5,956K                  392,168K 
      LWM Unallocated Largest Contiguous Area. . . . :                5,956K                  392,168K
      Last date and time SOS . . . . . . . . . . . . :       
      Current Tasks Waiting Because SOS. . . . . . . :                     0                         0   
      Peak Tasks Waiting Because SOS . . . . . . . . :                     0                         0  
      Total Waits Because SOS. . . . . . . . . . . . :                     0                         0  
      Time Tasks Waited Because SOS. . . . . . . . . :        00:00:00.00000            00:00:00.00000  
    
    Storage ABOVE 2GB (64-bit storage)
    __________________________  
      MEMLIMIT Size. . . . . . . . . . . . :               15,360M 
      MEMLIMIT Set By. . . . . . . . . . . :                  JCL 
       
      Current Address Space active (bytes) :      1,164,967,936 
      Current Address Space active . . . . :             1,111M 
      Peak Address Space active. . . . . . :             1,375M  
      
      MEMLIMIT minus Current Address Space active. . . . . . . :          14,249M     2 
      Number of Private Memory Objects . . . . . . . . . . . . :               35 
        ....minus Current GDSA extents . . . . . . . . . . . . :               15 
      Bytes allocated to Private Memory Objects. . . . . . . . :           2,236M  =       2,344,615,936 
        ....minus Current GDSA allocated . . . . . . . . . . . :           1,212M  =       1,270,874,112
      Bytes hidden within Private Memory Objects . . . . . . . :           1,125M  =       1,179,648,000
        ....minus Current GDSA hidden. . . . . . . . . . . . . :           1,124M  =       1,178,599,424
          ....minus CICS Internal Trace Table hidden . . . . . :             130M 
      Bytes usable within Private Memory Objects . . . . . . . :           1,111M  =       1,164,967,936
      Peak bytes usable within Private Memory Objects  . . . . :           1,826M  =       1,914,699,776
      Current GDSA Allocated . . . . . . . . . . . . . . . . . :           1,024M  =       1,073,741,824
      Peak GDSA Allocated. . . . . . . . . . . . . . . . . . . :           1,024M 
    
  2. 启用 NODEJSAPP 并运行具有代表性的工作负载。 观察每个用户区域的值如何更改,并确保它们不受约束。