Modernisation Oracle Forms

Erreur à l'exécution de Forms après un nombre relativement faible (50 80) de connexions simultanées

Introduction

S'APPLIQUE À :
Oracle Forms - Version 6.0.8 à 11.1.2.1.0 [Release 6.0.8 à 11g]
Microsoft Windows x64 (64 bits)
Microsoft Windows (32 bits)

Symptômes

Attention : cette note repose entièrement sur la documentation de Microsoft. Elle implique des modifications du registre qui, mal faites, peuvent avoir de graves conséquences sur votre installation. Microsoft recommande de sauvegarder votre registre et/ou votre système avant de modifier le registre.

Ce problème est propre aux systèmes d'exploitation MS Windows, généralement Windows 2000, 2003 ou 2008. Bien qu'il soit peu fréquent, il survient aussi bien sous Windows 32 bits que 64 bits. Notez que sous Windows 64 bits avec Forms 11g 64 bits, le seuil d'apparition du problème peut se situer autour de 170. Vous pouvez obtenir les indications d'erreur suivantes :

Forms 11g - FRM-93552
Forms 6i, 9.0.4.X, 10.1.2.X - FRM-92050 sometimes together with FRM-92101 or FRM-92102
Forms 9.0.4.X, 10.1.2.X - application.log shows FRM-93000
Forms 6i (Forms Listener Servlet) - jserv.log shows FRM-93000
Forms 6i (Forms Server) - error log shows ERROR 1444 - FORMS SERVICE STOPS UNEXPECTEDLY 1444

Le problème se produit avec un petit nombre de connexions : de 50 à 80 sur les machines 32 bits et environ 170 sur les machines 64 bits. Le nombre exact dépend de facteurs propres au système d'exploitation, comme le nombre de processeurs, leur vitesse, la mémoire, etc. Le problème peut même survenir avec moins de 50 connexions.

Cause

Windows dispose d'une ressource mémoire appelée Desktop Heap. Une section particulière de cette ressource arrive à saturation, ce qui cause le problème.

Solution

Remarque : l'étape suivante est un moyen pratique de déterminer si le problème est lié au heap. Il s'agit uniquement d'une étape de diagnostic. Il n'est PAS recommandé de conserver cette configuration. Voir l'avertissement de Microsoft à ce sujet sous le titre "Attention".

Après l'étape 1 ci-dessous, le nombre de connexions possibles sans problème devrait augmenter sensiblement. Sinon, le problème n'est très probablement pas lié au heap.

Notez que la seule façon de déterminer avec certitude s'il existe un problème de ressources lié au Desktop est d'utiliser l'outil approprié de Microsoft. Consultez la Note 393163.1 "How To Check Utilization of 'Desktop Heap' on MS Windows Platforms Using 'dheapmon'" pour un tel outil. Si vous avez besoin d'aide pour exécuter cet outil ou interpréter ses résultats, communiquez avec Microsoft.

1. Modifiez la propriété de connexion (logon) du service concerné pour cocher "[x] Allow service to interact with desktop" (en conservant toutes les valeurs par défaut du registre!) et redémarrez le service.

Cela oblige le service Apache (Forms 6i) ou le service Oracle Process Manager (OPMN) (Forms 9i et versions ultérieures) à utiliser le IO Desktop heap, qui est par défaut plus grand que le Non-IO Desktop heap. Le terme "Desktop" ne doit pas être confondu ici avec le bureau Windows habituel, qui contient vos icônes, votre arrière-plan, etc. Dans ce contexte, il s'agit de la terminologie de Microsoft pour désigner une zone de mémoire.

Une fois que vous avez vérifié que cela augmente le nombre de processus frmweb possibles, remettez ce paramètre à sa valeur par défaut (décoché) et modifiez la taille du Non-IO Desktop Heap dans le registre, car c'est celle qu'utilise le service OPMN du middle tier.

2. Modifiez la variable de taille du Non-IO Desktop Heap dans le registre. Ne le faites que si :

  1. Une sauvegarde du registre a été faite. Toute erreur de modification du registre peut rendre le système inutilisable.
  2. La solution 1 a été testée et a augmenté le nombre de processus qui s'exécutent correctement.

Les informations suivantes s'appliquent à Windows NT, Windows 2000 et Windows 2003.
Ouvrez le registre et allez à HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems.

Double-cliquez sur la valeur Windows dans le volet de droite. Augmentez le paramètre SharedSection approprié, qui est le troisième.
Par exemple, SharedSection définit les heaps du système et du bureau selon le format suivant :

Example Setting ->  SharedSection= 1024,3072,512

SharedSection=xxxx,yyyy,zzzz The default values are normally 1024,3072,512

All the values are in kilobytes (KB).

xxxx = System-wide Heapsize. There is no need to modify this value and it is ignored for the rest of this discussion.

yyyy = IO Desktop Heapsize. This is the heap for memory objects in the IO Desktop and there is normally no need to modify this value. Programs that are run from a command line (.bat files) or an icon use this memory resource.

zzzz = Non-IO Desktop Heapsize. This is the heap for memory objects in the Non-IO Desktop and is used by programs that are spawned from a service. Therefore, this is the value that should be increased if the OPMN process is being started as a service which is the default for a windows installation of the Application Server. This number can be set as high as 30 MB (30720 KB). However, it is seldom necessary to set it this high.

Si vous modifiez ces valeurs, vous devez redémarrer le système.

Il est recommandé que les valeurs soient des multiples de 512, mais ce n'est pas obligatoire. La taille totale des heaps est limitée à 48 Mo sous Windows.

Si vous rencontrez ce problème et que le processus OPMN s'exécute en tant que service, et en supposant que vos valeurs sont proches des valeurs par défaut indiquées ci-dessus, nous vous suggérons de porter le Non-IO Desktop Heap à 5 Mo (5120 Ko). Ce paramètre ressemblerait à ceci ->
SharedSection = 1024,3072,5120

Cela fixe la taille du Non-IO Desktop Heap à 5 Mo, ce qui devrait normalement suffire. Sinon, augmentez-la de 1 Mo et testez. Il n'est PAS nécessaire de modifier les deux premières variables (System-wide Heapsize & IO Desktop Heapsize).

Informations complémentaires

Le problème peut aussi se reproduire avec Forms 11g, et la même solution s'applique si les processus OPMN ou WLS sont démarrés en tant que services.
Remarque : en 10gR2, le service mentionné ci-dessus s'appelle normalement "Oracle<Middletier home name>ProcessManager", car le gestionnaire de processus est installé par défaut en tant que service Windows. Ainsi, si votre Middle Tier Home s'appelle "Mid10gR2", ce service Windows s'appellera "OracleMid10gR2ProcessManager".

En 11g, seul l'Oracle Process Manager de l'ORACLE_INSTANCE est installé par défaut en tant que service Windows. En raison de l'architecture différente de la 11g, ce service ne devrait pas être à l'origine du problème. Toutefois, si vous avez configuré votre serveur géré Forms (WLS_FORMS) en tant que service, cette étape s'applique au serveur géré WLS_FORMS.