¿Hay alguna forma de determinar el consumo de memoria de un trabajo individual en iSeries?

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

Pregunta

Tenemos una mezcla de aplicaciones .Net que se conectan a través de ODBC y DB2 Connect a una LPAR de iSeries que se encuentra en V5R4. También tenemos algunos trabajos por lotes que se ejecutan de forma nativa en la máquina (COBOL, RPG y CL directo en su mayoría). Durante ciertos períodos del día, experimentamos fallas de página altas y estamos tratando de determinar qué aplicaciones podrían estar causando el problema.

Sin comprar ninguna de las docenas de herramientas costosas en el mercado (es decir, iDoctor), ¿hay alguna manera de ver la cantidad de memoria consumida por cada trabajo? La mayoría de nuestros trabajos se están quedando sin el grupo 2 y vemos un rendimiento mejorado cuando agregamos memoria a ese grupo y simplemente mirar wrksyssts no ayuda mucho. Nos gustaría aislar los trabajos problemáticos y ver si se pueden hacer algunas modificaciones para mejorar el rendimiento y reducir la utilización innecesaria de memoria.

¿Fue útil?

Solución

Si no le importa Java o su jvm o está haciendo una pequeña codificación ...

Obtenga lo siguiente (todo disponible para Windows, Linux, AIX, Solaris, etc ... Mac?):

Tenga en cuenta que JTOpen es simplemente una biblioteca antigua de Java simple para que pueda usar cualquier lenguaje jvm que pueda acceder a las bibliotecas Java normales. Estoy usando Groovy porque tengo algo para eso. No te preocupes, Groovy es agradable.

Aquí va.

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

Eso es todo. Hay muchos otros valores de trabajo para jugar con . Nunca he tenido que molestarme con estas estadísticas de trabajo, así que no sé si restablecer las estadísticas es lo correcto.

Es realmente difícil saber el número de trabajo y otros detalles sobre el trabajo para crear el objeto Trabajo. Es por eso que JobList es muy agradable. También puede ejecuta comandos CL desde tu script si eso es útil.

Creo que IBM usa esta biblioteca para construir Ops Navigator, por lo que quizás ya lo haya estado utilizando durante un tiempo.

Otros consejos

Esto parece ayudar un poco:

- En iSeries Navigator, expanda Mis conexiones > conexión > Gestión de trabajo > Grupos de memoria > Piscinas activas o piscinas compartidas. - Haga clic con el botón derecho en el grupo de memoria que desea usar y haga clic en Trabajos. - Personalizar la vista para incluir la columna Fallos de página

Al menos puedo ver qué trabajos tienen problemas de fallas. La próxima vez que aparezca un problema, veremos si ayuda a encontrar las aplicaciones infractoras.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top