Página 1 de 1

NTVDM e multiplas seções

Enviado: 31 Jan 2012 08:02
por MWAdriano
Pessoal, estou tendo o seguinte problema.

Tenho uma aplicação compilada em Clipper 5.3b com Exospace usando _DBFCDX e acessando os arquivos em um servidor de arquivos Windows. Ela funciona bem em alguns computadores clientes com Windows XP, porém estou tendo problemas em alguns clientes que também usam Windows XP no seguinte sentido: Quando abro mais do que uma instãncia do mesmo programa dentro da mesma máquina acessando os DBF's e CDX remotos em um servidor de arquivos Windows, ás vezes a aplicação paralisa e nessa, corrompe índices. Percebo que as vezes vejo o NTVDM travado consumindo 100% do processamento. Uso FreeTSlice() compilado no código para avisar o Idle para o SO. Se eu fecho uma das instâncias do programa, a instancia que estava travada volta a funcionar normalmente. Mas as vezes já é tarde pois corrompeu os índices..

Isso está me tirando o sono.. Alguém sabe dizer o que pode ser ??

Grato.

Adriano.

NTVDM e multiplas seções

Enviado: 31 Jan 2012 08:37
por kiko
quando vc executa o sistema em mais de um terminal tambem acontece isso? ou só acontece quando executa duas seções na mesma maquina?

se sim, considere verificar a estrutura da rede, incluindo os cabos, placas, hardware do servidor....

se não, considere mudar do exospace para o blinker, pois se o erro ocorre apenas quando se inicia duas seções na mesma maquina, você pode estar com o executavel em modo real, o que não é recomendavel.

pode ser chover no molhado, mas você tem as rotinas de tratamento de gravação em rede? RLock FLock e outros...

NTVDM e multiplas seções

Enviado: 31 Jan 2012 09:30
por Pablo César
Outra, tem necessidade de que o aplicativo permita abrir em mais de uma sessão ? Precisa isso ? Eu não permito que abra duas vezes o programa, para isso tem várias formas de limitar o multissessão. Tem que avaliar de que forma é aberto e travado o BD na rede.

NTVDM e multiplas seções

Enviado: 31 Jan 2012 10:42
por kiko
não sei se é o caso do nosso companheiro, mas se utilizar TS no sistema, é preciso deixar abrir mais de uma seção do aplicativo por vez...
mas rodando em modo protegido, as seções não vão se bagunçar...

NTVDM e multiplas seções

Enviado: 01 Fev 2012 08:08
por MWAdriano
Pessoal, eu uso a biblioteca CA-Clipper Tools e EXOSPACE e OPTEDIT com a opção -EXTRAMIN para reservar 12 MB de RAM para a aplicação. Eu imagino que estou usando a aplicação em modo protegido sim, até pela quantidade de memória usada pelo executável. Ao menos no script eu peço para o EXOSPACE linkar no modo protegido... E o executável é bem grande (1.6MB).

Eu não sei se a aplicação dá problema em multiplas seções via Terminal Service, porque não estou usando assim hoje. O fato é que essa aplicação joga a NTVDM para uso de 50% do processamento (são 2 cores, por isso não 100%), isso mesmo com a FreeTSlice() para avisar que a aplicação está Idle. Francamente não entendi porque.. Mas em outros computadores está funcionando normalmente, com baixo consumo de processamento e sem travar, apenas em dois terminais com XP está acontecendo o problema. Na minha cabecinha "monotarefa" eu fico em dúvidas como o SO faz para mapear a abertura de tantos arquivos ao mesmo tempo, sendo que as aplicações (mesmo EXEs diferentes) abrem os mesmos DBF's/CDX, e a quantidade aberta por seção é relativamente grande (acho que uns 98 arquivos entre DBF/CDX por seção).... O Config.NT está com Files=199, mas mesmo assim não excederia esse número de arquivos somando todas as seções? Como será que o XP gerencia isso? E os Locks mencionados pelo colega?? Será que o servidor faz o controle em separado por aplicação do terminal? Porque uma aplicação pode travar um registro enquanto a outra trava outro... e quando as duas tentarem travar o mesmo, a que chegar primeiro deve conseguir e a segunda tem que receber um NÃO do servidor para esperar... estou errado ??

Bem... sou acostumado com o antigo mundinho do DOS puro e do Win98 q a gente não abria mais de uma seção por terminal, mas o fato é q a aplicação funciona abrindo multisseção na maioria dos terminais e tá dando problema em apenas dois.

Agradeço se alguém souber ajudar!
Nota de Moderação:
por Pablo César: Palavra corrigida, pois acredito que seria essa a palavra que quis dizer. De outra forma precisaria ser censurada.

NTVDM e multiplas seções

Enviado: 01 Fev 2012 10:13
por Pablo César
a gente não abria mais de uma seção por terminal, mas o fato é q a aplicação funciona abrindo multisseção na maioria dos terminais e tá dando problema em apenas dois
Ok, pelo sim pelo não eu restringiria a abertura em multissessão. Eu chego a pensar que o usuário abrir duas vezes ou mais o aplicativo que tem um banco de dados é totalmente desnecessário. Quiser pegar esta rotina, para impedir que abra duas vezes, com ela você abre no C:, isto é, para cada terminal grava no local (no raiz) o arquivo que serve para saber se está aberto e ativo:

Código: Selecionar todos

VARQ="C:\SCR.USO"
IF !FILE(VARQ) // Cria arquivo se ele nao existir...
  VARQH=FCREATE(VARQ,0)
  IF !VARQH>0
     MENSAGEM("Erro na abertura inicializa‡„o do sistema.",5)
     QUIT
  ENDIF
  TXT:="Terminal: "+UPPER(NETNAME())
  TXT_T:=FWRITE(VARQH,TXT) // Grava como conte£do o nome da esta‡„o
  IF !TXT_T=LEN(TXT)
     MENSAGEM("Erro ao de acesso ao registrar abertura do sistema.",5)
     QUIT
  ENDIF
  FCLOSE(VARQH)
ENDI
JANELA2:=FOPEN(VARQ,18) // Abre em modo Exclusivo
IF !JANELA2>0
   CLS
   TONE(138,8)
   TONE(196,8)
   TONE(207,8)
   FOR I=0 TO MAXROW()
       @ I,00 SAY REPLICATE(CHR(219),80) COLOR "W+/B"
   NEXT
   SOMBRA(08,18,15,61)
   ALERT("Sistema aberto em outra janela !.;;Verifique na barra de tarefas da tela do;Windows e clique na sess„o minimizada.",{"Retornar ao Windows"},0)
   QUIT
ENDIF
Cada sessão abre e utiliza um espaço de memória, não compartilha a mesmo memória, mesmo que o aplicativo seja o mesmo. O que compartilhar o espaço livre de memória, isto é, gerenciado o quanto cada aplicativo utiliza a memória. Assim, quanto mais abrir menos memória livre terá. Então na verdade aquele files no config será multiplicado pela vezes em que o aplicativo estiver aberto. E se trava e porque o gerenciamento de memória está saturado. Na minha opinião, o EXOSPACE está totalmente ultrapassado e é inconveniente continuar utilizá-lo. Tal é assim que ele está descontinuado. O uso do BLINKER é o mais indicado para utilizá-lo com Clipper, sem sombras de dúvidas. Eu sempre o utilizei sem configuração alguma com particularidade de uso de memória. Compilava de forma simples. Experimenta e veja o resultado. Não vai fazer mal algum, tudo pelo contrário.

Então colega, na minha opinião você deveria eliminar o EXOSPACE e implentar no inicio do seu PRG principal a rotina que passei. Podis crer !

NTVDM e multiplas seções

Enviado: 01 Fev 2012 10:18
por Pablo César
Ia esquecendo outro detalhe, naquela rotina se quiser ainda pode implementar o uso do WINDOW2TOP do WAPI do Maligno para fechar a segunda sessão e trazer a primeira sessão para o usuário. E se estiver minimizado pode utilizar o FLASHTBAR para que fique piscando pro usuário, simulando o mesmo efeito das sessões do MSN quando alguém responde.

Nas minhas aplicações GUI acostumo fechar e trazer a primeira sessão pra frente (visível) sem dar mensagem alguma, apenas não deixar abrir multissessão. Ao não ser que o aplicativo não venha a fazer uso de banco de dados. E que por ventura precise usar mais de uma vez...

NTVDM e multiplas seções

Enviado: 02 Fev 2012 23:07
por MWAdriano
Entendi..

Duas coisas:

1a. O fato é que seria interessante poder usar duas sessões, pois existem rotinas na aplicação em que a aplicação fica realizando várias tarefas no banco de dados e estas demoram.. Enquanto isso o usuário poderia ter outra seção aberta para realizar outras tarefas que dependem da intervenção e são independentes da primeira. Então, poder abrir até umas três sessões da mesma aplicação seria de grande utilidade para o usuário... Eu cheguei a essa conclusão.

Os terminais tem cerca de 1GB de RAM, geralmente, o que para Windows XP, em tese, com três sessões (instâncias) da aplicação seria baba (disse em tese), pois não ocuparia nem metade da memória RAM disponível. Contudo, tenho encontrado esses problemas em alguns casos. Portanto, se tivesse uma maneira segura, seria ótimo.

2a. Com o uso do BLINKER, eu tive umas experiências ruins, principalmente quanto ao uso de umas funções de comunicação serial da CA-TOOLS.. Em determinadas situações estava gerando GPF e nunca consegui sana-los.. Tentei vários scripts sujeridos ná época, mas alguns dava problema de memória insuficiente e outros não dava, mas dava GPF. Já estava quase ficando louco quando percebi que com o EXOSPACE os famigerados GPF's não estavam acontecendo e o problema de memória desapareciam com o OPTEDIT -EXTRAMIN. Por isso optei por usar o EXOSPACE como padrão..

Eu li de alguns usuários que usam multissessão com Terminal Service com Clipper.. Será realmente que existem boas experiências disso?

Ouvi também dizer sobre o tal Tamedos, que ajudaria. Porém, ele é pago e me disseram que ao termino do tempo de uso gratuito ele mais prejudica que ajuda... Não sei se é verdade! Mas em que ele poderia ajudar nesse caso?

Grato!

NTVDM e multiplas seções

Enviado: 05 Fev 2012 19:49
por rochinha
Amiguinho,

Consulte o registro da maquina e veja se o WOW esta preparado para permitir que as sessões realmente estejam rodando em separado.

Veja em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WOW se DefaultSeparateVDM esta Yes

WOW.REG

Código: Selecionar todos

Windows Registry Editor Version 5.00
;------------------------------------------------------------------------------------------------------------
;Opens 16-bit apps in a separate memory space
;This increases stability when dealing with 16-bit apps.
;(No = disabled, Yes = enabled)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WOW]
"DefaultSeparateVDM"="Yes"
O aplicativo que roda em separado e as rotinas que voce diz que são demoradas, por acaso voce otimizou o código de forma que elimine idas e vindas nas tabelas?

Provavelmente voce utiliza laços, e o que pode ocasionar este aumento de carga poderia ser excessivas aberturas e fechamentos ou locates/set filters.

O fato de voce te-los colocado em executável separado é porque não quer que outra ação do usuário ou qualquer problema feche a execução enquanto ela roda.

NTVDM e multiplas seções

Enviado: 06 Fev 2012 01:38
por MWAdriano
Rochinha, sim o DefaultSeparateVDM esta Yes.

E sim, eu uso bastante aberturas e fechamentos de arquivos. Nao uso LOCATE ou SET FILTER.

Porem, sim eu uso varios lacos FOR, varrendo dados, SEEK's aos punhados, RLock() bdUnlock() aos montes... dbAppend()... dbCommit()... etc.

Mas náo posso usar esses comandos em grande quantidade?

E porque o problema so tem se manifestado em dois computadores?

Grato.

NTVDM e multiplas seções

Enviado: 06 Fev 2012 08:17
por kiko
São computadores bons?

Eu conheço "heróis" que conseguiram instalar Windows XP em computadores que mal rodavam o 98, e eram justamente esses computadores que davam problema quando executava o sistema. Eram problemas dos mais variados, desde índices corrompidos até mesmo o banco de dados. Enfim, era caótico...

Veja se as máquinas são boas, se tem bastante memória, se tem espaço no HD, e coisas do tipo...

NTVDM e multiplas seções

Enviado: 06 Fev 2012 10:28
por rochinha
Amiguinhos,
Eu conheço "heróis" que conseguiram instalar Windows XP em computadores que mal rodavam o 98
Então sou um, mas voces também podem. É só encontrar as distros MicroXP By Experience, UltraSmall XP ou XP Player Edition.

Quanto ao posso ou não posso de quantidades de comandos isto não existe, voce pode e deve colocar os comandos que necessita na quantidade que quizer.

O fato de em uma maquina acontecer um uso maior depende de outros fatores.

- Deixar as configurações bem identicas em relação ao CONFIG.SYS ajuda muito.
- Acrescentar o aplicativo nas excessões do Antivirus para não ser verificado enquanto em uso.
- Memória virtual do Windows, veja se esta fixa em tamanho ou gerenciada pelo sistema, compatibilize.
- Dê um tunning nas propriedades do atalho que voce usa para acessar o referido programa dando-lhe ou tirando memória.

NTVDM e multiplas seções

Enviado: 11 Fev 2012 19:59
por Cavalo Marinho
Amigo eu utilizo o blinker como ja falado aki neste forum e blz, abro nao duas seçoes mas 4, 5 e roda tudo tranquilo sem está utilizando 100% da cpu, nao se se vou falar besteira, mas voce disse que seria em somente duas estacoes do windows que dá este problema náo é? então nao é problema de sua aplicação, vou dar duas dicas:
1 verifique se nas propriedades de rede esta instalado o cliente novell netware, ja tive problemas de lentidao quando este cliente esta instalado
2 Veja a possibilidade de formatar a maquina utilizando o xp service pack 3
Espero ter ajudado

NTVDM e multiplas seções

Enviado: 17 Fev 2012 02:32
por JoséQuintas
Só vi agora este post.
Aqui eu usava Clipper 5.1 + Blinker + OSLIB.
Em testes, nunca tive limite de sessões.
Como faço conversões automáticas pra mudança de versão, igual pra todos os clientes, de vez em quando abria umas 15 sessões simultâneas, uma com o backup de cada cliente pra testar mudanças - Ia abrindo as sessões e carregando pra cada cliente, antes do anterior terminar.
O único limite sempre foi a memória disponível, pra não ficar lento demais.
Nunca tive problema isso, e sempre com a configuração default do Windows, exceto files=200.
O HD é que ficava a mil por hora... reindexando todos ao mesmo tempo.