有没有办法确定iSeries上的单个作业内存消耗?

时间:2009-01-15 14:19:46

标签: performance memory ibm-midrange

我们混合使用.Net应用程序通过ODBC和DB2 Connect连接到V5R4上的iSeries LPAR。我们还有一些在机器上本机运行的批处理作业(主要是COBOL,RPG和直接CL)。在一天中的某些时段,我们遇到了高页面错误,并且正在尝试确定哪些应用可能会导致问题。

如果不购买市场上任何数十种昂贵的工具(即iDoctor),有没有办法看到每项工作消耗的内存量。我们的大多数工作都在池2之外用完了,当我们向该池添加内存并且只是查看wrksyssts时,我们确实看到了改进的性能。我们希望隔离问题作业,看看是否可以进行一些修改以提高性能并减少不必要的内存利用率。

2 个答案:

答案 0 :(得分:3)

如果你不介意Java或它的jvm或做一些编码......

获取以下内容(所有内容均适用于Windows,Linux,AIX,Solaris等... Mac?):

请记住,JTOpen只是一个普通的旧Java库,因此您可以使用可以访问普通Java库的任何jvm语言。我正在使用Groovy,因为我有一个东西。别担心,Groovy很不错。

到此为止。

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

就是这样。 play with还有许多其他职位值。我从来没有打扰过这些工作统计数据所以我不知道重置统计数据是否正确。

实际知道作业编号和有关作业的其他详细信息以创建Job对象是一件痛苦的事。这就是JobList如此美好的原因。如果有用,您也可以从脚本中run CL commands

我认为IBM使用这个库来构建Ops Navigator,所以也许你已经使用了一段时间了。

答案 1 :(得分:0)

这似乎有点帮助:

- 在“iSeries导航器”中,展开“我的连接”>连接>工作管理>记忆池>活动池或共享池。 - 右键单击​​要使用的内存池,然后单击“作业”。 - 自定义视图以包括“页面错误”列

至少我可以看到哪些工作有错误问题。下一次问题出现时,我们会看到它是否有助于找到有问题的应用程序。