Existe-t-il un moyen de déterminer la consommation de mémoire d'un travail individuel sur l'iSeries?

StackOverflow https://stackoverflow.com/questions/446893

Question

Nous avons un mélange d’applications .Net qui se connectent via ODBC et DB2 Connect à une partition logique iSeries à la version V5R4. Nous avons également des travaux par lots en mode natif sur la machine (principalement en COBOL, RPG et straight CL). À certaines périodes de la journée, le nombre de pages défectueuses est très élevé et nous essayons de déterminer quelles applications pourraient être à l'origine du problème.

Sans acheter l’un des nombreux outils coûteux du marché (par exemple, iDoctor), n’est-il pas possible de connaître la quantité de mémoire utilisée par chaque travail. La plupart de nos travaux sont en train de manquer du pool 2 et nous constatons une amélioration des performances lorsque nous ajoutons de la mémoire à ce pool et que regarder simplement wrksyssts n'aide pas beaucoup. Nous aimerions isoler les tâches à problèmes et voir si certaines modifications peuvent être apportées pour améliorer les performances et réduire l'utilisation inutile de la mémoire.

Était-ce utile?

La solution

Si vous ne vous souciez pas de Java, de son format jvm ou de la programmation ...

Obtenez les éléments suivants (tous disponibles pour Windows, Linux, AIX, Solaris, etc ... Mac?):

N'oubliez pas que JTOpen est simplement une ancienne bibliothèque Java, ce qui vous permet d'utiliser n'importe quel langage jvm pouvant accéder aux bibliothèques java ordinaires. J'utilise Groovy parce que j'ai un truc pour ça. Ne vous inquiétez pas, Groovy est sympa.

Voilà.

 import com.ibm.as400.access.*

 // how many seconds to run  
 secs = 20 

 sys = new AS400("theserver", "paulg", "dotnet4evah")   
 job = new Job(sys, "jobname", "jobusername", "jobnumber")

 job.load()
 println "Stats for ${job.toString()}"  
 // this might look horrible
 println "total CPU time\tpage faults/sec\tdisk IO ops/sec"
 while (secs--) {
   job.loadStatistics()
   print "${job.getCPUUsed()/1000}\t\t" 
   print "${job.getValue(Job.ELAPSED_PAGE_FAULTS)}\t\t"
   println "${job.getValue(Job.ELAPSED_DISK_IO)}"
   job.resetStatistics()
   Thread.sleep(1000)
 }

 sys.disconnectAllServices()

C'est ça. Il existe de nombreuses autres valeurs de travail pour jouer avec . Je n'ai jamais eu à me soucier de ces statistiques sur les emplois, donc je ne sais pas si le rétablissement des statistiques est la bonne chose.

Il est difficile de connaître le numéro du travail et d’autres détails relatifs au travail afin de créer l’objet Job. Voilà pourquoi JobList est vraiment bien. Vous pouvez également exécutez les commandes CL à partir de votre script si cela est utile.

Je pense qu'IBM utilise cette bibliothèque pour créer Ops Navigator. Cela fait donc peut-être déjà quelque temps que vous l'utilisez.

Autres conseils

Cela semble aider un peu:

- Dans iSeries Navigator, développez Mes connexions > connexion > Gestion du travail > Pools de mémoire > Pools actifs ou pools partagés. - Cliquez avec le bouton droit sur le pool de mémoire que vous souhaitez utiliser, puis cliquez sur Travaux. - Personnaliser la vue pour inclure la colonne Défauts de page

Au moins, je peux voir quels emplois ont des problèmes. La prochaine fois que nous aurons le même problème, nous verrons s’il est utile de trouver la ou les applications en cause.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top