Есть ли способ определить потребление памяти отдельными заданиями на iSeries? - PullRequest
1 голос
/ 15 января 2009

У нас есть смесь приложений .Net, которые подключаются через ODBC и DB2 Connect к LPAR iSeries, который находится в V5R4. У нас также есть несколько пакетных заданий, выполняющихся на компьютере (в основном COBOL, RPG и прямой CL). В определенные периоды дня мы сталкиваемся с большим количеством страниц и пытаемся определить, какие приложения могут вызывать проблему.

Не покупая ни одного из десятков дорогих инструментов на рынке (например, iDoctor), есть ли способ узнать объем памяти, потребляемый каждой работой. В большинстве наших работ не хватает пула 2, и мы видим повышение производительности, когда добавляем память в этот пул, и простой просмотр wrksyssts мало чем помогает. Мы хотели бы изолировать проблемные задания и посмотреть, можно ли внести некоторые изменения для повышения производительности и уменьшения ненужного использования памяти.

Ответы [ 2 ]

3 голосов
/ 28 апреля 2009

Если вы не против Java или ее jvm или немного программируете ...

Получите следующее (все доступно для Windows, Linux, AIX, Solaris и т. Д. ... Mac?):

  • Groovy Я ненавижу Java многословие
  • JTOpen - версия IBM с открытым исходным кодом IBM Toolbox for Java , которая поставляется с System i Access и которую вы должны были получить на своем сервере

Имейте в виду, что JTOpen - это просто старая библиотека Java, поэтому вы можете использовать любой язык jvm , который может обращаться к обычным библиотекам Java. Я использую 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()

Вот и все. Есть много других значений задания, чтобы играть с . Мне никогда не приходилось беспокоиться об этой статистике работы, поэтому я не знаю, правильно ли сбрасывать статистику.

Трудно знать номер задания и другие подробности о задании, чтобы создать объект задания. Вот почему JobList так хорош. Вы также можете запускать команды CL из скрипта, если это полезно.

Я думаю, что IBM использует эту библиотеку для сборки Ops Navigator, так что, возможно, вы уже использовали это уже некоторое время.

0 голосов
/ 15 января 2009

Это, кажется, немного помогает:

- В Навигаторе iSeries разверните Мои соединения> Соединение> Управление работами> Пулы памяти> Активные пулы или Общие пулы. - Щелкните правой кнопкой мыши пул памяти, который вы хотите использовать, и выберите Вакансии. - Настроить вид, чтобы включить столбец ошибок страницы

По крайней мере, я вижу, на каких рабочих местах возникают проблемы. В следующий раз, когда возникнет проблема, мы посмотрим, поможет ли она найти приложение (я), нарушающее работу.

...