Considerazioni di sistema per lo sviluppo del flusso di messaggi

Dimensione predefinita dello stack

Quando è in esecuzione un thread del flusso di messaggi, esso necessita di una memoria per eseguire le istruzioni definite dalla logica dei nodi connessi. Questa memoria si ricava dalla dimensione di stack e di heap del gruppo di esecuzione. La dimensione predefinita dello stack assegnata al thread del flusso di messaggi dipende dalla piattaforma utilizzata.

Ad ogni thread del flusso di messaggi è assegnato 1MB di spazio stack.

Ad ogni thread del flusso di messaggi sono assegnati 8MB di spazio stack.

Ad ogni thread del flusso di messaggi è assegnato 1MB di spazio stack.

Ad ogni thread del flusso di messaggi sono assegnati 512 KB di spazio stack dall'alto verso il basso e 50 KB di spazio di stack dal basso verso l'alto.

In un flusso di messaggi, un nodo utilizza in genere circa 2KB dello spazio stack. Un tipico flusso di messaggi può perciò includere circa 250 nodi su z/OS, 500 nodi sulle piattaforme UNIX e 500 nodi su Windows. Questa quantità può essere maggiore o minore a seconda del tipo di nodi utilizzati e dell'elaborazione che essi eseguono.

Aumento della dimensione dello stack sulle piattaforme Windows e UNIX

E' possibile aumentare la dimensione dello stack impostando la variabile di ambiente MQSI_THREAD_STACK_SIZE su un valore appropriato. Quando si riavviano i broker in esecuzione sul sistema, questi utilizzeranno il nuovo valore.

Il valore di MQSI_THREAD_STACK_SIZE impostato viene utilizzato per ogni thread creato all'interno del processo DataFlowEngine. Se al gruppo di esecuzione è assegnato un numero elevato di flussi di messaggi e si imposta un valore elevato per MQSI_THREAD_STACK_SIZE, il processo DataFlowEngine avrà bisogno di una grande quantità di spazio di memoria per lo stack.

Aumento della dimensione dello stack su z/OS

I componenti Integrator su z/OS sono compilati utilizzando il nuovo XPLINKage (extra performance linkage), che aggiunge ottimizzazione al codice runtime. Tuttavia, se la dimensione iniziale dello stack non è sufficiente, verranno utilizzate le estensioni stack. In ogni estensione sono utilizzati 128KB. E' molto importante scegliere una dimensione dello stack dall'alto verso il basso sufficientemente grande, poiché XPLINK non opera correttamente quando vengono utilizzate le estensioni stack.

Per stabilire le dimensioni dello stack adatte, un amministratore di componenti per z/OS può utilizzare lo strumento LE (Language Environment) Report Storage. Per fare ciò, è necessario che un flusso di messaggi venga verificato utilizzando l'opzione RPTSTG con la variabile di ambiente _CEE_RUNOPTS. Questa variabile andrebbe impostata nel profilo componente (BIPBPROF per un broker) durante lo sviluppo e il test dei flussi di messaggi previsti per la produzione. Ad esempio:
export _CEE_RUNOPTS=XPLINK\(ON\),RPTSTG(ON)
E' poi possibile sovrascrivere i valori predefiniti per le dimensioni dello stack su z/OS alterando o aggiungendo la variabile di ambiente LE_CEE_RUNOPTS nel profilo componenti.

Quando si effettua l'aggiornamento del profilo componente si deve arrestare il componente, apportare le necessarie modifiche al profilo, inoltrare BIPGEN per ricreare ENVFILE e riavviare il componente.

Ad esempio, è possibile modificare i valori predefiniti di 50K e 512K nella riga seguente per soddisfare le proprie necessità:
export _CEE_RUNOPTS=XPLINK(ON),THREADSTACK(ON,50K,15K,ANYWHERE,KEEP,512K,128K)

Utilizzando RPTSTG si aumenta il tempo di esecuzione dell'applicazione. Si consiglia quindi di utilizzare tale opzione come supporto solo allo sviluppo dei flussi di messaggi e dell'ambiente di produzione finale. Una volta stabilite le opportune dimensioni dello stack corrette necessarie si consiglia di rimuovere questa opzione dalla variabile di ambiente _CEE_RUNOPTS.

Nota: gli stack XPLINK crescono verso il basso nella memoria virtuale mentre il vecchio collegamento standard cresce verso l'alto. Per evitare implicazioni sulle prestazioni causate dal passaggio dallo spazio stack verso il basso allo spazio stack verso l'alto durante il runtime, si dovrebbero compilare le estensioni definite dall'utente utilizzando l'opzione XPLINK, quando è possibile. Se il flusso di messaggi utilizza estensioni definite dall'utente che sono state compilate con la convenzione di collegamento standard, sarà necessario stabilire e impostare un valore adatto per la dimensione dello stack verso l'alto.

Determinazione della dimensione dello stack corretta

In WebSphere Message Broker qualsiasi elaborazione che implichi un'elaborazione nidificata o ricorsiva può causare un utilizzo estensivo dello stack. Ad esempio, nelle seguenti situazioni si potrebbe avere la necessità di aumentare la dimensione dello stack:
  • Quando un flusso di messaggi sta elaborando un messaggio che contiene un numero elevato di ripetizioni o una nidificazione complessa.
  • Quando un flusso di messaggi sta eseguendo ESQL che richiama ricorsivamente la stessa procedura o funzione o quando un operatore, ad esempio un operatore di concatenazione, viene utilizzato ripetutamente in un'istruzione ESQL.
Attività correlate
Ottimizzazione dei tempi di riposta del flusso di messaggi
Riferimenti correlati
Flussi di messaggi
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac00340_