Scope
- A performance check includes to verify what performance is available from a given system.
- The check for parallelization provides results for which number of parallel tasks an acceptable performance can be verified.
- Performance optimization for individual environments is part of the SOS Consulting Services.
Test Suite
- The performance check is carried out by use of a test suite.
- It is not recommended to run the test suite in parallel to business-related jobs in a production environment. However, we recommend to run the test suite either in a test environment or during a job maintenance windows in a production environment.
Test Suite Download and Installation
- Download: performance_parallel_tasks.zip
- Installation: Unzip the archive to an arbitrary folder in your
live
directory. The test suite will be created in a folderperformance_parallel_tasks
.
Test Suite Contents
- The test suite contains the following jobs:
run_parallel_jobs
- This job will execute a number of parallel tasks for one of the below test jobs.
- This job can be configured for increased paralellization of test jobs, see below.
parallel_job_windows
This job is used for Windows environments. The purpose of this job is to sleep for number of seconds that is specified by a job parameter.
parallel_job_unix
This job is used for Unix environments. The purpose of this job is to sleep for number of seconds that is specified by a job parameter.
- The test suite makes use of the following process class
Performance
This process class is used to restrict the max. number of parallel processes and optionally to assgin a JobScheduler Agent for execution of the test suite.
Test Suite Configuration
- Job:
run_parallel_jobs
- This job makes use of the following parameters:
- Parameter
job
:- Purpose: the name or path of the test job to execute. Modify this value to point to the job
parallel_job_unix
if you are running the test suite in a Unix environment. - Default:
parallel_job_windows
- Purpose: the name or path of the test job to execute. Modify this value to point to the job
- Parameter
sleep
- Purpose: the number of seconds that the test job should execute.
- Default:
10
- Parameter
tasks
- Purpose: the number of parallel tasks.
- Default:
50
- Parameter
- This job makes use of the following parameters:
- Job:
parallel_job_windows
,parallel_job_unix
- Optional configuration items:
- Options
tasks
- Purpose: this option specifies the max. number of tasks that this job can be executed for. Tasks that exceed this number will be enqueued.
- Default:
500
- Options
- Optional configuration items:
- Process Class: Performance
- Optional configuration items:
- Attribute:
max_processes
- Purpose: the max. number of tasks that can be executed for all jobs that are assigned this process class. Tasks that exceed this number will be enqueued.
- Default:
100
- Attribute:
- Optional configuration items:
Performance Check
Configure Performance Check
- The performance check is intended to verify by what level of parallelism your system will show acceptable performance.
- Therefore play with the parameters
sleep
andtasks
of therun_parallel_jobs
job.- Start with a medium number as e.g. 50 tasks and double this value for the next execution of the test suite.
- Push the limits by modifying the
max_processes
configuration item for the process class.
Run Performance Check
- Run the job
run_parallel_jobs
- This job will check if any tasks are running for the specified test job and will start additional tasks if applicable.
- This job will not terminate. Instead it will repeat itself to start new tasks if previously tasks of the test job have completed.
- Start this job by use of JOC with the job context menu Start Task Immediately.
- Terminate this job by use of JOC with the task context menu Terminate.
- Check the level of parallelization
- Tasks that are started for the test job are visible with JOC
- In addition you should find processes in the operating system Task Manager (Windows) or top (Unix) command output that can easily be determined as they are executing a ping command.
Intepretation of Results
- If your overall system performance slows down then you have hit the limit of parallelization. This might occur at 100, 200, 500 or more tasks in parallel.
- You can verify the performance impact from the duration of individual tasks that are available with the JOC tasks history or by use of JID.
- The estimated duration of a task is the number of seconds specified for the
sleep
parameter plus about 1s for the task start. - If the duration of a task exceeds the value of the
sleep
parameter by more than e.g. 3s then you experience some performance impact. - When you experience missing responsiveness of your operating system then the performance impact has become inacceptable.
- The estimated duration of a task is the number of seconds specified for the
Troubleshooting
- When hitting performance limits then consider the following hints.
- Trouble: JOC is not responding
- Explanation: JOC does not respond due to increased system load. JobScheduler will still execute jobs, however, responsed to JOC's status requests are delayed and make the GUI unusable.
- Measures: Terminate the
run_parallel_jobs
job. Use the following termination command from the command line:- Windows command line to terminate job
.\jobscheduler.cmd command "<modify_job job='/performance/performance_parallel_tasks/run_parallel_jobs' cmd='end'/>"
- Unix command line to terminate job
./jobscheduler.sh command '<modify_job job="/performance/performance_parallel_tasks/run_parallel_jobs" cmd="end"/>'
- Trouble: Error occurs on task termination: SCHEDULER-280 Process terminated with exit code -1073741502 (0xC0000142)
- Explanation:if the test job shows this error message then most presumably you have hit a system limit for the Desktop Heap Size on a Windows system.
- Measures: At the point of time of occurence terminate the
run_parallel_jobs
job. Then adjust the desktop heap size having carefully studied the vendor information on this configuration item.- We found the following resources useful:
- Desktop Heap Overview
- An in-depth article from 2007. However, the conclusions apply to current OS versions as well.
- Chapter: Configuring the size of individual desktop heaps
- User32.dll or Kernel32.dll does not initialize
- This MS support article does not start exactly from the same phenomenon, however, it arrives at the same conclusions.
- "Every service process that is executed under a user account will receive a new desktop in a noninteractive window station that is created by the Service Control Manager (SCM). Therefore, each service that is executed under a user account will consume the number of kilobytes of desktop heap that is specified in the third SharedSection value. All services that are executed under the LocalSystem account when Allow Service to Interact with the Desktopis not selected share the desktop heap of the "Default" desktop in the noninteractive service windows station (Service-0x0-3e7$).
- Desktop Heap Overview
- We found the following resources useful:
- Trouble: JOC is not responding