iSeriesで個々のジョブのメモリ消費を判断する方法はありますか?
-
22-07-2019 - |
質問
ODBCとDB2 Connectを介してV5R4のiSeries LPARに接続する.Netアプリが混在しています。また、マシン上でネイティブに実行されるバッチジョブもあります(ほとんどがCOBOL、RPG、およびストレートCL)。 1日の特定の期間に、ページ違反が発生し、どのアプリが問題を引き起こしているのかを判断しようとしています。
市場にある数十の高価なツール(iDoctorなど)を購入せずに、各ジョブで消費されているメモリの量を確認する方法はありますか。ほとんどのジョブはプール2を使い果たしています。そのプールにメモリを追加すると、パフォーマンスが向上することがわかります。wrksysstsを見るだけではあまり役に立ちません。問題のあるジョブを切り分けて、パフォーマンスを改善し、不要なメモリ使用率を減らすためにいくつかの変更を行えるかどうかを確認します。
解決
Javaまたはそのjvmを気にしない場合、または少しコーディングを行う場合...
次のものを入手します(Windows、Linux、AIX、Solarisなど... Macで利用可能ですか?):
- Groovy はJavaが嫌いです 言葉遣い
- JTOpen (IBMの
/ software / access / "rel =" nofollow noreferrer "> System i Access およびサーバーで受け取るべきもの
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()
それだけです。 再生。これらの仕事の統計を気にする必要がなかったので、統計のリセットが正しいかどうかはわかりません。
Jobオブジェクトを作成するために、ジョブ番号とジョブに関するその他の詳細を実際に知るのは苦痛です。そのため JobList はとてもいいです。 スクリプトからCLコマンドを実行するのが便利な場合。
IBMはこのライブラリを使用してOps Navigatorを構築していると思いますので、もうしばらく使用していると思います。
他のヒント
これは少し役立つようです:
-iSeriesナビゲーターで、「接続」>を展開します。接続>作業管理>メモリプール>アクティブプールまたは共有プール。 -使用するメモリプールを右クリックし、[ジョブ]をクリックします。 -ページ違反列を含むようにビューをカスタマイズします
少なくとも、どのジョブに障害のある問題があるかはわかります。次回問題が発生したときに、問題のアプリを見つけるのに役立つかどうかを確認します。