Есть ли способ определить потребление памяти отдельными заданиями в iSeries?

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

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


person Paul G    schedule 15.01.2009    source источник
comment
Как правило, в системном пуле 2 не должно выполняться никаких заданий, если вам нужен эффективный мониторинг производительности (особенно при ограниченном бюджете). Системный пул 2 — это *BASE, и память в *BASE не должна использоваться активными заданиями. (Это включает в себя все поставляемые IBM серверные задания и т. д., которые по умолчанию выполняются в *BASE.) Фундаментальный принцип управления памятью в системе: вся память, добавляемая в общий пул, всегда берется из *BASE, вся память выпущенные из общего пула, всегда возвращаются в *BASE. Если вы хотите сделать это «в рамках бюджета», планирование и работа превыше даже полезных показателей.   -  person user2338816    schedule 22.03.2014


Ответы (2)


Если вы не возражаете против 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, так что, возможно, вы уже используете ее некоторое время.

person Allen    schedule 28.04.2009

Кажется, это немного помогает:

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

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

person Paul G    schedule 15.01.2009