Como você controla o uso de memória em um script ksh93

2

Temos vários scripts ksh que são executados para sempre (dentro de um loop while), ou pelo menos até que um evento de desligamento seja entregue a eles. Nós tínhamos um projeto onde esses scripts eram convertidos para o ksh93 (e a funcionalidade foi adicionada) e o O / S foi atualizado do AIX 5.3 para o 6.1. Os scripts ksh foram executados sem problemas no AIX 5.1. Agora que convertemos para o ksh93, AIX 6.1 e funcionalidade adicional, estamos descobrindo que a memória dos processos continua a crescer até que tenha excedido seu limite. Nós tivemos que adicionar lógica para matar e reiniciar os processos quando eles atingem um limite de memória.

Estamos assumindo, talvez de forma incorreta, que há um vazamento de memória em alguma função ksh93.

Estou tentando determinar se há uma função específica que não está liberando memória. Para obter memória de processo, tenho usado svmon -P $$ | grep $$ | awk '{ print $3 }' . Talvez exista uma maneira melhor de fazer isso.

Aqui está a saída do comando svmon em vários pontos do script. Eu adicionei um "End-Of-Loop" para mostrar a parte inferior do loop "while" externo. Você notará que o uso da memória continua subindo, exceto pela leitura ocasional, onde está de volta para perto do valor inicial. Eu estou supondo que esses valores baixos estão errados porque a próxima leitura após o valor baixo parece seguir a leitura logo antes do valor baixo. Se você remover os valores baixos, o uso da memória continuará a subir. Esse script é um script de monitoramento que verifica a existência de nossos outros processos. Os scripts dos nossos outros processos exibem o mesmo tipo de comportamento.

Existe uma maneira melhor de determinar o uso de memória? Alguém está ciente das funções comuns do ksh93 que não liberam a memória corretamente? A IBM sugeriu que atualizássemos para o AIX 7.x mas isso não é uma possibilidade no momento.

Eu deveria avisá-lo agora. Eu sou um DBA, não um desenvolvedor de script ksh.

28721   
Start-Of-Loop   
28435   <--- low value  
28733   
28737   
28740   
28745   
28747   
28435   <--- low value   
28755   
28759   
28762   
28767   
28770   
28774   
28777   
28780   
28783   
28787   
28791   
28806   
28809   
28813   
28817   
28822   
28825   
28828   
28831   
28833   
28835   
28835   
28838   
28839   
28843   
28843   
28843   
28435   <--- low value   
28843   
28843   
28846   
28846   
28847   
28408   <--- low value   
28853   
28853   
28853   
28408   <--- low value  
28854   
28854   
28857   
28857   
28859   
28860   
28863   
28863   
28864   
28865   
28867   
28869   
28871   
28874   
28878   
28878   
28879   
28879   
28882   
28882   
28883   
28884   
28887   
28888   
28891   
28891   
28435   <--- low value  
28894   
28897   
28898   
28901   
28436   <--- low value  
28904   
28904   
28906   
28906   
28910   
28910   
28914   
28407   <--- low value  
28917   
28435   <--- low value  
28921   
28923   
28927   
28927   
28930   
28436   <--- low value  
28935   
28935   
28935   
28938   
28942   
28942   
28435   <--- low value  
28946   
28948   
28950   
28953   
28953   
28953   
28953   
28953   
28953   
28957   
28957   
28958   
28958   
28959   
28959   
28961   
28962   
28965   
28408   <--- low value  
28966   
28966   
28967   
28968   
28970   
28971   
28974   
28974   
28975   
28975   
28976   
28976   
28408   <--- low value  
28978   
28978   
End-Of-Loop  
28436   <--- low value  
28982   
28982   
28983   
28408   <--- low value  
28984   
28984   
28985   
28440   <--- low value  
28989   
28990   
28436   <--- low value  
28991   
28991   
28991   
28991   
28991   
28994   
28995   
28995   
28995   
28995   
28997   
29001   
29004   
29008   
28435   <--- low value  
29008   
29008   
28408   <--- low value  
29011   
29011   
29011   
29015   
29015   
29019   
29019   
29019   
29019   
29020   
28435   <--- low value  
29025   
29026   
29028   
29030   
29033   
29033   
28435   <--- low value  
29035   
29039   
28436   <--- low value  
29039   
29039   
29041   
29043   
28408   <--- low value  
29047   
29050   
29050   
29052   
29052   
29055   
29055   
29057   
29057   
29058   
28408   <--- low value  
29061   
29062   
29067   
29067   
29068   
28408   <--- low value  
29069   
29070   
29075   
28408   <--- low value  
29076   
29076   
29076   
28408   <--- low value  
28408   <--- low value  
28435   <--- low value  
29080   
29083   
28408   <--- low value  
29087   
29089   
29089   
29092   
29094   
28430   <--- low value  
29097   
29100   
29101   
29103   
28408   <--- low value  
29103   
29103   
29104   
29104   
28435   <--- low value  
29107   
28408   <--- low value  
29111   
29113   
29114   
29117   
29117   
29120   
29120   
29122   
29122   
29124   
29124   
29127   
29127   
29129   
29129   
28408   <--- low value  
29134   
29135   
29135   
29135   
29135   
29139   
29139   
29139   
29139   
28440   <--- low value  
29139   
28435   <--- low value  
28408   <--- low value  
29139   
End-Of-Loop  
29141   
29145   
29145   
29147   
28435   <--- low value  
29150   
29150   
29153   
29153   
29155   
29157   
29157   
29157   
29157   
29157   
29159   
29159   
29159   
29159   
29163   
29163   
29167   
29169   
29172   
29172   
29175   
29175   
29177   
29177   
29177   
29179   
28435   <--- low value  
29181   
29186   
29186   
29189   
29189   
29191   
29193   
29196   
29196   
29198   
29198   
29199   
29200   
29202   
29202   
29205   
29205   
28435   <--- low value  
29209   
29211   
28435   <--- low value  
29216   
29217   
29220   
28435   <--- low value  
29225   
29225   
28433   <--- low value  
29227   
28433   <--- low value  
29229   
29230   
29231   
29233   
29233   
29235   
29237   
29238   
29239   
29244   
29247   
29250   
29252   
29258   
29260   
29263   
29264   
29268   
29269   
29271   
29271   
29274   
29274   
28435   <--- low value  
28408   <--- low value  
29283   
29286   
29287   
29291   
29291   
29295   
29295   
29295   
29299   
29303   
29303   
29306   
29306   
29308   
29310   
29312   
28440   <--- low value  
29312   
29312   
29317   
29318   
29322   
29322   
29323   
29323   
28408   <--- low value  
28407   <--- low value  
29327   
29327   
29329   
29329   
28435   <--- low value  
29329   
29330   
29331   
28437   <--- low value  
29333   
29336   
29336   
29336   
29336   
29336   
29336   
29336   
29336   
29336   
End-Of-Loop  
29338   
29342   
29343   
29343   
29345   
29347   
28435   <--- low value  
28435   <--- low value  
29349   
29349   
29351   
29353   
29353   
29354   
29354   
29354   
29354   
29354   
28436   <--- low value  
28408   <--- low value  
29356   
29357   
29357   
29361   
29361   
28435   <--- low value  
29361   
29363   
29363   
29366   
29367   
29373   
28408   <--- low value  
29376   
29376   
29380   
28407   <--- low value  
28435   <--- low value  
29381   
28440   <--- low value  
29387   
29387   
29390   
29394   
29394   
28436   <--- low value  
29396   
29398   
29399   
29401   
29401   
29402   
29402   
29403   
29404   
29406   
28436   <--- low value  
29411   
28408   <--- low value  
29417   
29417   
29418   
29419   
29421   
29421   
29423   
29424   
29426   
29426   
28408   <--- low value  
29431   
29435   
29435   
28435   <--- low value  
29439   
29442   
29444   
28435   <--- low value  
29447   
29449   
29449   
29451   
29451   
29455   
29455   
28435   <--- low value  
29458   
29461   
29462   
29465   
29467   
28408   <--- low value  
29470   
29473   
29475   
29478   
29479   
29483   
29483   
29485   
29485   
29488   
29488   
29489   
29489   
29489   
29489   
29491   
29492   
29493   
29493   
29495   
29497   
29501   
29503   
29504   
29504   
29506   
29508   
29509   
29511   
29515   
29515   
29519   
29519   
28436   <--- low value  
29521   
28408   <--- low value  
29522   
29523   
28435   <--- low value  
29523   
29523   
29523   
End-Of-Loop  
    
por Scavenger 02.07.2013 / 22:12

1 resposta

0

Desculpe eu não posso responder suas perguntas, mas eu sugiro que você mude o script para fazer o loop um número predefinido de vezes, então corra e termine. Desta forma, o sistema operacional irá liberar a memória excessiva alocada pelo vazamento antes de ficar enorme.

Isso deve ser mais eficiente do que verificar quanto de memória está sendo usada o tempo todo.

    
por 11.08.2013 / 01:08

Tags