Node.js アプリケーションのストレージ所要量の計算

CICS® 領域で 1 つ以上の Node.js アプリケーションを始動する場合は、各 Node.js アプリケーションで使用できるストレージ容量が十分にあることを確認する必要があります。 CICS および同じ領域で実行されている他の製品は、かなりの量の z/OS® ストレージを必要とする可能性があります。 DSALIMEDSALIM などの CICS の割り振りパラメーターは、ストレージの可用性に影響を与えます。また、これらはピーク所要量と比較して過剰に割り振られることがあります。

このタスクについて

Node.js アプリケーションに必要なストレージは、CICS DSA や EDSA ストレージから割り振られません。 一部のストレージは、Cコードによって発行 malloc() されるなどのリクエストを処理する Language Environment® によって管理され、また別の部分は、 z/OS ストレージ管理リクエスト( IARV64 やなど)を使用する STORAGE OBTAINNode.js アプリケーションによって直接管理されます。 Language Environment は z/OS ストレージ・サービスを使用します。

Node.js ランタイムで使用される各スレッドには、4 KB の 24 ビット・ストレージが必要です。 使用されるスレッド数は、Node.js ランタイムが開始されると固定され、UV_THREADPOOL_SIZE 環境変数を設定しないかぎり、通常は 8 から 12 の間です。 さらに、UNIX System Services では、各スレッドの作成処理時に、連続する 24 ビット・ストレージが 256 KB 必要です。

Node.js ランタイムは、JavaScript オブジェクトおよび JIT コンパイル済みコードにヒープを割り振ります。 z/OS 2.3 以上では、ヒープは 31 ビット・ストレージと 64 ビット・ストレージの両方にまたがることができます。 また、ヒープは複数のスペースからなり、それぞれのサイズは個別に異なります。 テスト環境でヒープ使用量を測定することが、ヒープ・サイズ所要量を見積もる最も単純な方法です。 Node.js ランタイム用に UNIX System Services ダイナミック・リンク・ライブラリー (DLL) ファイルをロードするためには、31 ビット・ストレージも必要です。

さらに、C++ のヒープおよびスタック用に Language Environment により、64 ビット・ストレージが割り振られます。 これは内部で Node.js ランタイム・コードにより、そしてネイティブ・モジュールによって使用されます。

Node.js アプリケーションに必要な総ストレージ量を見積もるには、次の手順を実行します。

手順

  1. サンプル統計プログラム DFH0STAT を使用して、24 ビット、31 ビット、および 64 ビットのメモリー使用量を測定します。

    MVS のユーザー領域および拡張ユーザー領域ストレージレポートを表示し、24ビットおよび31ビット MVS ストレージの使用状況に関する情報を確認してください。

    64ビット MVS ストレージの使用状況については、「2 GBを超えるストレージ」レポートを参照してください。

    • 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   
    _________________________  
      MEMLIMIT Size. . . . . . . . . . . . :               15,360M    
      MEMLIMIT Set By. . . . . . . . . . . :                  JCL 
      
      Current Address Space active (bytes) :      1,143,996,416    
      Current Address Space active . . . . :             1,091M    
      Peak Address Space active. . . . . . :             1,091M       
         
      MEMLIMIT minus Current Address Space active. . . . . . . :          14,269M     2 
      MEMLIMIT minus allocated to Private Memory Objects . . . :          13,144M
      MEMLIMIT minus bytes usable within Private Memory Objects:          14,269M 
      Number of Private Memory Objects . . . . . . . . . . . . :               33 
        ....minus Current GDSA extents . . . . . . . . . . . . :               32 
      Bytes allocated to Private Memory Objects. . . . . . . . :           2,216M  =       2,323,644,416
        ....minus Current GDSA allocated . . . . . . . . . . . :           1,192M  =       1,249,902,592
      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,091M  =       1,143,996,416
      Peak bytes usable within Private Memory Objects  . . . . :           1,806M  =       1,893,728,256
      Current GDSA Allocated . . . . . . . . . . . . . . . . . :           1,024M  =       1,073,741,824
      Peak GDSA Allocated. . . . . . . . . . . . . . . . . . . :           1,024M 
    
  2. NODEJSAPP を有効にして、代表的なワークロードを実行します。 使用可能な各専用ストレージ域の値の変化を監視し、専用ストレージ域が制約を受けていないことを確認します。