Gibt es eine Möglichkeit, um einen einzelnen Aufträge Speicherverbrauch auf der iSeries zu bestimmen?

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

Frage

Wir haben eine Mischung aus .NET-Anwendungen, die über ODBC und DB2 Connect zu einem iSeries-LPAR anschließen, das mit V5R4 ist. Wir haben auch einige Batch-Jobs laufen nativ auf der Maschine (COBOL, RPG, und gerade CL meist). Zu bestimmten Zeiten des Tages erleben wir hohe Verwerfungen Seite und versuchen zu bestimmen, welche Anwendungen könnten das Problem verursachen.

Ohne von den Dutzenden von teueren Werkzeugen auf dem Markt kaufen (das heißt iDoctor), ist es eine Möglichkeit, die Größe des Speichers zu sehen, die von jedem Job verbraucht wird. Die meisten unserer Aufträge ausgeführt werden aus Pool 2 und wir tun eine verbesserte Leistung sehen, wenn wir Speicher zu diesem Pool hinzufügen und einfach bei WRKSYSSTS suchen nicht viel helfen. Wir möchten, dass das Problem Jobs isolieren und sehen, ob einige Modifikationen vorgenommen werden können, die Leistung zu verbessern und unnötige Speichernutzung zu reduzieren.

War es hilfreich?

Lösung

Wenn Sie nichts dagegen haben Java oder seine Jvm oder ein wenig Codierung zu tun ...

Holen Sie sich das folgende (alle verfügbar für Windows, Linux, AIX, Solaris, etc ... Mac?):

Beachten Sie, dass JTOpen ist nur eine einfache alte Java-Bibliothek, so dass Sie verwenden können, jede Jvm Sprache , die gewöhnlichen Java-Bibliotheken zugreifen kann. Ich bin mit Groovy weil ich bin eine Sache für sie hat. Keine Sorge, Groovy schön ist.

Hier geht.

 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()

Das ist es. Es gibt viele andere Job-Werte auf mit spielen. Ich habe noch nie mit diesen Auftragsstatistiken stören, damit ich weiß nicht, ob die Statistiken Zurücksetzen das Richtige ist.

Es ist ein Schmerz, um tatsächlich die Auftragsnummer und andere Details über den Job zu kennen, um das Job-Objekt zu erstellen. Deshalb laufen CL-Befehle von Ihrem Skript, ob das sinnvoll ist.

Ich denke, dass IBM diese Bibliothek verwendet Ops Navigator so vielleicht bauen Sie schon eine Weile mit diesem habe.

Andere Tipps

Dies scheint ein wenig zu helfen:

- In iSeries Navigator, Meine Kontakte erweitern> Verbindung> Work Management> Speicher-Pools> Aktive Pools oder Gemeinschafts-Pools. - Rechtsklick auf den Speicherpool, den Sie verwenden möchten, und klicken Sie auf Jobs. - Anpassen Ansicht enthalten die Seitenfehler Spalte

Wenigstens kann ich sehen, welche Jobs Verwerfungen Probleme haben. Die nächste Mal Frage aufkommt, wir werden sehen, ob es die beanstandete App (s) hilft finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top