2009-01-15 22 views
1

我們有通過ODBC和DB2 Connect連接到位於V5R4的iSeries LPAR的.Net應用程序的混合體。我們還有一些本機上運行的批處理作業(主要是COBOL,RPG和直接CL)。在一天中的某些時段,我們會遇到高頁面錯誤,並試圖確定哪些應用程序可能導致此問題。有什麼方法可以確定iSeries上的單個作業內存消耗?

沒有購買市面上幾十種昂貴工具(即iDoctor)中的任何一種,是否有任何方法可以查看每項工作消耗的內存量。我們大部分的工作都沒有用完,我們確實看到了改進的性能,當我們向該池中添加內存時,僅僅看着wrksyssts沒有多大幫助。我們希望找出問題作業,並查看是否可以進行一些修改以提高性能並減少不必要的內存利用率。

+0

一般來說,如果您需要執行有效的性能監控(特別是在預算中),基本上**沒有作業**應該在系統池2中運行。系統池2是* BASE,* BASE中的內存不應被活動作業使用。 (這包括所有IBM提供的服務器作業等,默認情況下在* BASE中運行。) 系統內存管理的基本原理是「所有添加到共享池的內存總是從* BASE中取出,從共享池釋放的所有內存總是返回到* BASE。」如果你想按照預算來做,計劃和工作就算是有用的指標。 – user2338816 2014-03-22 12:45:54

回答

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,因此您可能已經使用了一段時間了。

0

這似乎有點幫助:

- 在iSeries導航器中,展開我的連接>連接>工作管理>內存池>活動池或共享池。 - 右鍵單擊​​要使用的內存池,然後單擊作業。 - 自定義視圖以包含頁面錯誤列

至少我可以看到哪些作業有故障問題。下一次問題出現後,我們會看看它是否有助於找到有問題的應用程序。