Translate

Mostrar mensagens com a etiqueta Loop Infinito. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Loop Infinito. Mostrar todas as mensagens

terça-feira, 19 de novembro de 2013

☕🔥 ABEND S722 — O “ENCERRAMENTO MISERICORDIOSO” DO z/OS

Bellacosa Mainframe abend s722

 

☕🔥 ABEND S722 — O “ENCERRAMENTO MISERICORDIOSO” DO z/OS

Quando o Mainframe Diz:

“ALGUÉM DECIDIU MATAR ESSE JOB.”

Se existe um ABEND que confunde TODO programador COBOL Junior Padawan…

é o misterioso:

🚨 S722

Porque ele parece com:

S322

Mas NÃO é igual.

E aí começa o caos:

“Foi timeout?”
“Foi loop infinito?”
“O operador matou?”
“O JES executou?”
“O sistema entrou em guerra?”

☕ Respira.

Porque o S722 é um dos ABENDs mais interessantes para entender:

cancelamento manual

operação do z/OS

JES2

runaway jobs

comandos de operador

batch control

intervenção humana no mainframe


🔥 O QUE É O S722?

O S722 significa:

🚨 JOB CANCELADO PELO OPERADOR

Traduzindo:

ALGUÉM MATOU O JOB MANUALMENTE.


☕ O MAIOR SEGREDO

Diferente do:

S322

que é:

TIME LIMIT EXCEEDED

o:

S722

significa:

intervenção humana.


🔥 O QUE REALMENTE ACONTECE

O job está rodando:

EXECUTANDO...

Talvez:

  • lento

  • preso

  • loop infinito

  • consumindo CPU

  • esperando recurso

  • travando produção

Então o operador digita:

C jobname

ou:

P jobname

ou algum comando equivalente.

Resultado:

💥 S722


☕ ANALOGIA BELLACOSA MAINFRAME

Imagine um trem fora de controle.

O sistema ainda NÃO bateu.

Mas alguém puxa:

🚨 O FREIO DE EMERGÊNCIA

Isso é o:

☠️ S722


🔥 O S722 NÃO É NECESSARIAMENTE ERRO

Isso é MUITO importante.

Às vezes o job:

  • estava correto

  • estava lento

  • processava bilhões de registros

  • apenas demorava demais

E alguém cancelou.


☕ O S722 É “ABEND SOCIAL”

Porque envolve:

humanos.

Operadores.

Schedulers.

Produção.

Pressão.

Batch window.


🔥 O CENÁRIO CLÁSSICO

Sexta-feira

fechamento mensal

CPU alta

SLA atrasando

E então alguém vê:

JOB XYZ RUNNING 5 HOURS

Operador:

C XYZ

Resultado:

💥 S722


☕ O S722 vs S322

Essa diferença salva carreiras.


☕ S322

Sistema matou por tempo excedido.


☕ S722

Humano matou manualmente.


🔥 O MAIOR VILÃO DO S722

LOOP INFINITO

Porque operadores frequentemente cancelam:

  • jobs presos

  • loops

  • SQLs infinitos

  • SORTs monstruosos


☕ EXEMPLO COBOL CLÁSSICO

PERFORM UNTIL WS-FIM = 'S'

   READ CLIENTE

END-PERFORM

Mas:

WS-FIM nunca muda

Agora:

job nunca termina.

Operador vê CPU alta.

Resultado:

☠️ CANCEL JOB → S722


🔥 O “READ SEM EOF”

Trauma coletivo do COBOL batch.


☕ ERRO

READ ARQ

sem:

AT END

Agora:

loop eterno.


🔥 O SQL ASSASSINO

Outro clássico.

SELECT *
FROM TABELA_GIGANTE

Sem índice.

Sem filtro.

Sem COMMIT.

Agora o DB2 sofre.

Operador sofre.

Produção sofre.

Resultado:

💥 S722


☕ O S722 E O “WAIT”

Às vezes o job nem está usando CPU.

Ele está:

  • esperando fita

  • esperando lock

  • preso em ENQ

  • deadlock

  • I/O congelado

Alguém perde paciência.

CANCEL


🔥 O S722 E O JES2

O JES monitora jobs ativos:

SDSF ST

Operador vê:

  • CPU

  • tempo

  • status

  • initiator

E pode cancelar.


☕ O COMANDO DA MORTE

Em muitos ambientes:

C jobname

ou:

CANCEL jobname

🔥 O S722 E O DUMP

Aqui nasce o conhecimento Jedi.


☕ MUITAS VEZES NÃO HÁ ERRO REAL

O programa foi interrompido artificialmente.

Então o dump pode mostrar:

exatamente onde ele estava.


🔥 ISSO É OURO

Porque agora você pode descobrir:

  • loop

  • SQL lento

  • READ preso

  • WAIT

  • deadlock

  • SORT gigante


☕ COMO INVESTIGAR O S722 PASSO A PASSO


✅ PASSO 1 — VERIFIQUE JESMSGLG

Procure:

JOB CANCELLED

ou:

CANCELLED BY OPERATOR

✅ PASSO 2 — IDENTIFIQUE O STEP

STEP01

✅ PASSO 3 — ANALISE O SYSOUT

Última mensagem geralmente aponta:

  • loop

  • repetição

  • SQL preso


✅ PASSO 4 — VERIFIQUE CPU

Pergunte:

  • CPU alta?

  • elapsed alto?

  • I/O preso?


✅ PASSO 5 — ANALISE O DUMP

Veja:

  • PSW

  • offset

  • linha COBOL

  • SQL ativo

  • WAIT state


🔥 O SEGREDO DO PSW

O PSW mostra:

ONDE O JOB MORREU.

Mesmo cancelado manualmente.


☕ O OFFSET

Exemplo:

OFFSET X'01FA'

Cruze com listing COBOL.

Agora você encontra:

PERFORM UNTIL...

Boom.


🔥 O S722 E O SDSF

Ferramenta dos operadores Jedi.

Comandos:

ST
DA

Mostram:

  • jobs ativos

  • CPU

  • tempo

  • status


☕ O MAIOR ERRO DO PADAWAN

Ver:

S722

e corrigir apenas:

TIME=1440

Não.

Porque talvez:

o job estivesse realmente preso.


🔥 O S722 E O ABEND-AID

Ferramentas modernas mostram:

  • call stack

  • loops

  • SQL ativo

  • wait chain

Facilitando MUITO análise.


☕ O S722 E O DB2

Outro cenário clássico.

Programa faz:

cursor sem COMMIT

ou:

tablespace lock

Produção trava.

Operador cancela.


🔥 O S722 E O CICS

Equivalente filosófico no online:

AICA

Mas:


☕ AICA

Sistema mata task online.


☕ S722

Humano mata batch.


🔥 CURIOSIDADE HISTÓRICA

Nos anos 70/80:

Operadores controlavam datacenters quase manualmente.

Muitos S722 aconteciam literalmente por decisão operacional humana olhando consoles físicos.


☕ EASTER EGG MAINFRAME

Veteranos brincam:

“S722 significa:

Seu Job Irritou Alguém.”


🔥 O MAIOR ENSINAMENTO DO S722

Ele ensina algo profundo:

performance ruim afeta pessoas reais.

No z/OS:

  • batch window

  • SLA

  • produção

  • financeiro

  • folha

  • banco

dependem do tempo correto.


☕ COMO EVITAR S722


✅ Sempre tratar EOF


✅ Revisar loops


✅ Monitorar SQL


✅ Fazer COMMIT


✅ Validar índices DB2


✅ Evitar waits infinitos


✅ Testar volume real


✅ Conversar com Operação

Sim.

Isso é MUITO importante.


🔥 A VERDADE FINAL

O S322 pune excesso automático de tempo.
O AICA pune runaway tasks online.

Mas…

☕ O S722 É O JULGAMENTO HUMANO FINAL SOBRE UM JOB QUE PAROU DE RESPEITAR O TEMPO DO DATACENTER.


quarta-feira, 25 de setembro de 2013

☕🔥 ABEND S322 — O “EXECUTOR DO TEMPO” NO z/OS

 

Bellacosa Mainframe abend s322

☕🔥 ABEND S322 — O “EXECUTOR DO TEMPO” NO z/OS

Quando o Mainframe Diz:

“SEU JOB DEMOROU DEMAIS.”

Se existe um ABEND que transforma operador, sysprog e programador COBOL em investigadores desesperados…

é o lendário:

🚨 S322

E normalmente ele aparece assim:

IEF450I JOBNAME STEP01 - ABEND=S322

ou:

TIME EXCEEDED

ou ainda:

CPU TIME LIMIT EXCEEDED

E naquele instante…

o Junior Padawan entra em pânico:

“O mainframe travou?”
“Meu SORT entrou em loop?”
“O COBOL nunca terminou?”
“O JES2 ficou bravo?”
“A CPU derreteu?”

☕ Respira.

Porque o S322 é um dos ABENDs MAIS IMPORTANTES para entender:

performance

loops infinitos

consumo de CPU

batch tuning

TIME parameter

runaway jobs


🔥 O QUE É O S322?

O S322 é um:

🚨 TIME LIMIT EXCEEDED

Traduzindo:

O JOB ULTRAPASSOU O TEMPO DE CPU PERMITIDO.

Então o z/OS decidiu:

☠️ “VOU ENCERRAR ISSO AGORA.”


☕ A FILOSOFIA DO S322

No z/OS:

CPU É RECURSO SAGRADO.

Milhares de jobs compartilham:

  • processador

  • initiators

  • discos

  • spool

  • memória

Um job descontrolado pode:

  • atrasar produção

  • bloquear batch window

  • derrubar SLA

  • gerar caos operacional

Então o sistema impõe limites.


🔥 O GRANDE SEGREDO

S322 normalmente NÃO é bug de sintaxe.

É:

problema de lógica

loop infinito

SQL ruim

SORT monstruoso

leitura sem fim

runaway batch


☕ O MOMENTO EXATO DO S322

Fluxo:

JOB EXECUTA
 ↓
CPU TIME cresce
 ↓
Limite TIME atingido
 ↓
JES/zOS encerra job
 ↓
S322

🔥 O PARÂMETRO MAIS IMPORTANTE

TIME=

No JCL:

//JOBNAME JOB ... TIME=(1)

ou:

TIME=1440

☕ O QUE ISSO SIGNIFICA?


☕ TIME=(1)

Máximo:

1 minuto de CPU


☕ TIME=1440

Até:

24 horas


🔥 O ERRO CLÁSSICO DO PADAWAN

//STEP1 EXEC PGM=PROG1,TIME=(1)

Mas o job precisa:

5 minutos

Resultado:

💥 S322


☕ O MAIOR VILÃO DO S322

🚨 LOOP INFINITO

O rei absoluto dos ABENDs temporais.


🔥 EXEMPLO CLÁSSICO COBOL

PERFORM UNTIL WS-FIM = 'S'

   READ ARQUIVO

END-PERFORM

Mas:

WS-FIM nunca muda

Agora:

CPU sobe

job nunca termina

scheduler sofre

S322 aparece


☕ O LOOP FANTASMA

Mais perigoso:

PERFORM VARYING IDX FROM 1 BY 1
   UNTIL IDX > 100

Mas dentro:

MOVE 1 TO IDX

Agora:

loop eterno.


🔥 O S322 E O END-OF-FILE

Clássico absoluto.


☕ O ERRO

Junior esquece:

AT END

🔥 EXEMPLO

READ CLIENTE

sem:

AT END MOVE 'S' TO WS-FIM

Agora o READ nunca encerra corretamente.

Loop eterno.

Resultado:

☠️ S322


☕ O S322 E O SQL

Outro campeão.


🔥 CURSOR MALDITO

SELECT * FROM TABELA_GIGANTE

Sem índice.

Sem filtro.

Sem COMMIT.

Agora:

CPU explode.


☕ O SORT DA MORTE

//SYSIN DD *
  SORT FIELDS=COPY
/*

Mas dataset:

5 bilhões de registros

E disco ruim.

Resultado:

☠️ S322


🔥 O S322 E O “WAIT”

Outro cenário sombrio.

Job preso:

  • ENQ

  • recurso

  • fita

  • dataset lock

  • deadlock lógico

Tempo passa.

Resultado:

💥 S322


☕ O S322 NÃO É NECESSARIAMENTE CPU

Isso é importante.

Às vezes:

elapsed time

também pode causar término dependendo de políticas do sistema.


🔥 COMO INVESTIGAR O S322 PASSO A PASSO


✅ PASSO 1 — VERIFIQUE O JESMSGLG

Ali está a verdade.

Exemplo:

TIME EXCEEDED

✅ PASSO 2 — IDENTIFIQUE O STEP

STEP01

✅ PASSO 3 — VERIFIQUE CPU TIME

Mensagens:

CPU: 00:00:59

✅ PASSO 4 — PROCURE LOOPS

Pergunte:

  • EOF existe?

  • índice muda?

  • condição muda?

  • cursor fecha?

  • COMMIT existe?


✅ PASSO 5 — ANALISE O SYSOUT

Última mensagem repetitiva geralmente aponta o loop.


🔥 O SEGREDO DOS DISPLAYs

Veteranos usam:

DISPLAY IDX

para descobrir:

  • loop preso

  • contador travado

  • repetição infinita


☕ O DUMP DO S322

Curiosamente:

muitas vezes NÃO existe dump útil.

Porque o sistema apenas mata o job por timeout.


🔥 MAS ÀS VEZES EXISTE

Com opções especiais:

  • SYSUDUMP

  • CEEDUMP

  • SLIP

  • Abend-AID

Você pode capturar o estado.


☕ COMO O VETERANO INVESTIGA

Veterano pergunta imediatamente:

“O JOB ESTÁ PRESO OU APENAS LENTO?”

Isso muda tudo.


🔥 JOB LENTO

  • volume gigantesco

  • SQL ruim

  • SORT pesado

  • I/O excessivo


🔥 JOB PRESO

  • loop infinito

  • EOF errado

  • condição impossível

  • deadlock


☕ O S322 E O CICS

No CICS equivalente filosófico seria:

🚨 AICA

Ambos representam:

excesso de tempo.

Mas:


☕ S322

Batch.


☕ AICA

Online/CICS.


🔥 O S322 E O JES2

O JES monitora:

  • accounting

  • CPU

  • limites

  • classe de execução

Ele participa do encerramento.


☕ O SEGREDO DO TIME=NOLIMIT

Alguns ambientes permitem:

TIME=NOLIMIT

Veteranos tremem quando veem isso.

Porque runaway jobs podem:

destruir batch windows inteiras.


🔥 O S322 E O MAINFRAME ANTIGO

Nos anos 70/80:

CPU era MUITO cara.

Minutos desperdiçados tinham impacto financeiro enorme.

Então IBM criou mecanismos agressivos de timeout.


☕ CURIOSIDADE HISTÓRICA

Em ambientes antigos:

um loop infinito podia literalmente:

atrasar folha de pagamento inteira.


🔥 EASTER EGG MAINFRAME

Veteranos brincam:

“S322 significa:

Seu Job Não Quer Morrer.”


☕ O MAIOR ERRO DO PADAWAN

Resolver S322 aumentando:

TIME=1440

sem descobrir causa raiz.

Agora o job infinito só demora MAIS para morrer.


🔥 COMO EVITAR S322


✅ Sempre validar EOF


✅ Loops precisam mudar estado


✅ Revisar PERFORM UNTIL


✅ Revisar SQL


✅ Monitorar CPU


✅ Testar com massa pequena


✅ Usar contadores de proteção


☕ O “CONTADOR DE SANIDADE”

Veteranos adoram isso:

ADD 1 TO WS-COUNT

IF WS-COUNT > 999999
   DISPLAY 'LOOP SUSPEITO'
   STOP RUN
END-IF

🔥 O MAIOR ENSINAMENTO DO S322

Ele ensina algo profundo:

processamento sem controle destrói ambientes compartilhados.


☕ A VERDADE FINAL

O S0C7 pune dados inválidos.
O S0C4 pune memória inválida.
O S013 pune estrutura inválida.

Mas…

☕ O S322 PUNE PROGRAMAS QUE ESQUECERAM QUE O TEMPO DA CPU É SAGRADO NO z/OS.


quinta-feira, 21 de março de 2013

☕🔥 ABEND AICA — O “RELÓGIO DA MORTE” DO CICS

 

Bellacosa Mainframe e o abend aica

☕🔥 ABEND AICA — O “RELÓGIO DA MORTE” DO CICS

Quando o CICS Grita:

“SEU PROGRAMA ESTÁ DEMORANDO DEMAIS!”

Se existe um ABEND que transforma CPU em panela de pressão…

é o temido:

🚨 AICA

E normalmente ele aparece assim:

DFHAC2206 TRANSID PAY1 ABEND AICA

ou:

AICA - TASK TIMEOUT

E naquele momento…

o programador COBOL Junior Padawan pensa:

“O programa travou?”
“Entrou em loop?”
“O CICS odiou meu SELECT?”
“A CPU pegou fogo?”

☕ Respira.

Porque o AICA é um dos ABENDs MAIS IMPORTANTES para entender performance no mundo CICS.


🔥 O QUE É O AICA?

O AICA significa:

🚨 TASK TIMEOUT NO CICS

Traduzindo:

Seu programa ficou tempo demais usando CPU ou não devolveu controle ao CICS.

E o CICS decidiu:

☠️ “CHEGA. VOU MATAR ESSA TASK.”


☕ A FILOSOFIA DO AICA

O CICS é um ambiente:

MULTIUSUÁRIO

Milhares de usuários podem estar online:

  • ATM

  • PIX

  • cartão

  • aeroporto

  • seguro

  • banco

  • governo

Se UMA transaction monopolizar CPU…

TODO MUNDO SOFRE.

Então o CICS age como um vigilante.


🔥 O CICS NÃO É PACIENTE

No batch, um loop pode rodar horas.

No CICS?

❌ IMPOSSÍVEL.

O ambiente online exige:

  • resposta rápida

  • baixa latência

  • fairness

  • compartilhamento de CPU


☕ O QUE REALMENTE ACONTECE

Seu programa entra em execução:

EXEC CICS LINK

ou:

PERFORM UNTIL...

Mas ele:

  • nunca termina

  • consome CPU demais

  • entra em loop

  • fica preso

  • não libera controle

Então o CICS monitora o tempo.

Quando excede o limite:

💥 AICA


🔥 O GRANDE SEGREDO

AICA geralmente NÃO é erro de sintaxe.

É:

erro de lógica

erro de performance

loop infinito

design ruim


☕ O MAIOR VILÃO DO AICA

🚨 LOOP INFINITO

O clássico dos clássicos.


🔥 EXEMPLO COBOL JUNIOR

PERFORM UNTIL WS-FIM = 'S'

   DISPLAY 'PROCESSANDO'

END-PERFORM

Mas…

WS-FIM nunca vira 'S'

Resultado:

☠️ CPU sobe

task trava

CICS mata

AICA


☕ O LOOP ASSASSINO SILENCIOSO

Mais perigoso ainda:

PERFORM VARYING IDX FROM 1 BY 1
   UNTIL IDX > 100

   CONTINUE

END-PERFORM

Parece normal.

Mas imagine:

IDX corrompido

ou:

MOVE ZERO TO IDX

dentro do loop.

Agora ele nunca acaba.


🔥 O AICA E O “CICS DISPATCHER”

Aqui nasce o verdadeiro conhecimento Jedi.

O CICS possui um:

DISPATCHER

Ele controla:

  • CPU

  • tasks

  • prioridades

  • escalonamento

Quando uma task “segura a CPU” demais:

🚨 TIMEOUT


☕ O CONCEITO MAIS IMPORTANTE

No CICS:

VOCÊ NÃO “POSSUI” A CPU.

Você “empresta” CPU por alguns milissegundos.


🔥 COMO O CICS DETECTA O AICA

O sistema monitora:

  • elapsed time

  • CPU time

  • dispatch time

  • runaway task

Quando excede o parâmetro:

ICVTSD

ou limites internos…

💥 AICA


☕ O NOME REAL DO PROBLEMA

Muitos veteranos chamam AICA de:

🚨 RUNAWAY TASK

Task descontrolada.


🔥 O ERRO CLÁSSICO COM EXEC CICS

Outro caso famoso:

EXEC CICS READQ TS
END-EXEC

Dentro de um loop gigantesco.

Agora o programa:

  • chama CICS milhares de vezes

  • monopoliza recursos

  • explode consumo

Resultado:

☠️ AICA


☕ O AICA E O “WAIT”

Outro erro mortal:

Programa esperando algo que nunca chega.

Exemplo:

  • ENQ

  • recurso preso

  • deadlock lógico

  • polling infinito


🔥 O CASO DO “DISPLAY LOOP”

Junior faz debug assim:

PERFORM UNTIL WS-FIM = 'S'

   DISPLAY 'DEBUG'

END-PERFORM

Em batch?

Talvez sobreviva.

No CICS?

💀 Você acabou de invocar o AICA ancestral.


☕ COMO INVESTIGAR O AICA PASSO A PASSO


✅ PASSO 1 — IDENTIFIQUE A TRANSACTION

Mensagem:

DFHAC2206 TRANSID PAY1 ABEND AICA

Transaction:

PAY1

✅ PASSO 2 — IDENTIFIQUE O PROGRAMA

Dump:

PROGRAM = COBPAY01

✅ PASSO 3 — ANALISE O LOOP

Pergunte:

  • Existe PERFORM infinito?

  • Alguma condição nunca muda?

  • Índice travado?

  • Cursor eterno?

  • EXEC CICS dentro de loop?


✅ PASSO 4 — VERIFIQUE CPU

Ferramentas:

  • CICS Monitoring

  • Omegamon

  • SMF

  • CMF

  • RMF


🔥 COMO LER O DUMP DO AICA

O dump do AICA é MUITO interessante.

Porque frequentemente mostra:

o programa “congelado no tempo”.


☕ O QUE OLHAR


PSW

Mostra onde estava executando.


REGISTERS

Mostram:

  • base register

  • endereço

  • loop atual


TRACE

O ouro do CICS.

Mostra:

  • EXEC CICS repetitivos

  • chamadas infinitas

  • fluxo preso


🔥 O SEGREDO DO OFFSET

Exemplo:

OFFSET X'02FA'

Agora você cruza com o listing COBOL.

E encontra:

PERFORM UNTIL WS-END = 'Y'

Boom.

Achamos o monstro.


☕ O MAIOR ERRO DO PADAWAN

Pensar:

“O CICS travou.”

Na verdade:

O PROGRAMA NÃO PAROU.


🔥 O AICA E O PSEUDO-CONVERSATIONAL

Aqui entra arquitetura mainframe avançada.

CICS NÃO gosta de programas longos.

Ele prefere:

pseudo-conversational processing

Fluxo:

EXEC CICS RETURN TRANSID(...)

O programa devolve controle.

Depois volta mais tarde.

Isso evita:

  • task longa

  • retenção de memória

  • runaway task


☕ PROGRAMADORES BATCH SOFREM COM ISSO

Porque batch pensa:

processa tudo agora

CICS pensa:

responda rápido e saia

🔥 O AICA EM PRODUÇÃO

O cenário clássico:

Sexta-feira

fechamento mensal

pico bancário

CPU alta

E então:

AICA

Todo mundo entra em guerra.


☕ EASTER EGG MAINFRAME

Veteranos brincam:

“AICA significa:

Ainda Estou Calculando Aqui.”

Porque o programa parece nunca terminar.


🔥 CURIOSIDADE HISTÓRICA

Nos anos 70/80:

Runaway tasks podiam derrubar regiões CICS inteiras.

Então IBM endureceu agressivamente o controle de timeout.

O AICA virou mecanismo de sobrevivência do ambiente online.


☕ COMO EVITAR AICA


✅ Loops controlados


✅ Sempre alterar condição de saída


✅ Evitar EXEC CICS em loops gigantes


✅ Usar pseudo-conversational


✅ Limitar processamento online


✅ Monitorar CPU


🔥 O AICA E O “THINK TIME”

CICS odeia programas esperando usuário.

Nunca faça:

espera longa dentro da task

Porque task parada também consome recursos.


☕ O QUE O JEDI MAINFRAME APRENDE

AICA não é apenas um ABEND.

Ele ensina:

arquitetura online

compartilhamento de CPU

disciplina transacional

eficiência

design enterprise


🔥 FRASE FINAL DO MUNDO CICS

O ASRA quebra a realidade.
O S0C7 corrompe os números.
Mas…

☕ O AICA É O CICS ELIMINANDO PROGRAMAS QUE ESQUECERAM QUE O TEMPO É SAGRADO.