Child pages
  • Performance Tuning Tips for IDM 6.5
Skip to end of metadata
Go to start of metadata

Baseline environment: AWS us-west-2

1 EC2 instance, t2.medium (2 cpu 4 gb memory), Amazon Linux

1 RDS PostgreSQL 11.5 instance, db.m4.large

OpenJDK 1.8.0_222, IDM 6.5.0.2


Command used for each test:
apache-jmeter-3.3/bin/jmeter.sh -n -t jmeter-idm-create-users.jmx -l results.txt -j jmeter.log

With no changes at all to the default project, java settings or the default PostgreSQL schema:

summary + 1138 in 00:00:12 = 98.0/s Avg: 100 Min: 38 Max: 566 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 3419 in 00:00:30 = 114.0/s Avg: 87 Min: 43 Max: 194 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 4557 in 00:00:42 = 109.5/s Avg: 90 Min: 38 Max: 566 Err: 0 (0.00%)
summary + 3428 in 00:00:30 = 114.3/s Avg: 87 Min: 42 Max: 175 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 7985 in 00:01:12 = 111.5/s Avg: 89 Min: 38 Max: 566 Err: 0 (0.00%)
summary + 2015 in 00:00:19 = 106.5/s Avg: 87 Min: 24 Max: 383 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:01:31 = 110.5/s Avg: 88 Min: 24 Max: 566 Err: 0 (0.00%)

By removing the unique policy for userName in managed.json (not needed thanks to the unique index in the pg repo):

summary + 1649 in 00:00:15 = 108.4/s Avg: 90 Min: 37 Max: 618 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 3726 in 00:00:30 = 124.2/s Avg: 80 Min: 36 Max: 161 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 5375 in 00:00:45 = 118.9/s Avg: 83 Min: 36 Max: 618 Err: 0 (0.00%)
summary + 3676 in 00:00:30 = 122.5/s Avg: 81 Min: 32 Max: 319 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 9051 in 00:01:15 = 120.3/s Avg: 82 Min: 32 Max: 618 Err: 0 (0.00%)
summary + 949 in 00:00:08 = 125.5/s Avg: 72 Min: 22 Max: 135 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:01:23 = 120.8/s Avg: 81 Min: 22 Max: 618 Err: 0 (0.00%)

By removing the conditional assignments in managed.json (not needed if there is no mappings or use of conditional roles):

summary + 1301 in 00:00:12 = 111.7/s Avg: 87 Min: 30 Max: 676 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 4160 in 00:00:30 = 138.8/s Avg: 71 Min: 22 Max: 266 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 5461 in 00:00:42 = 131.2/s Avg: 75 Min: 22 Max: 676 Err: 0 (0.00%)
summary + 4239 in 00:00:30 = 141.3/s Avg: 70 Min: 25 Max: 284 Err: 0 (0.00%) Active: 7 Started: 10 Finished: 3
summary = 9700 in 00:01:12 = 135.4/s Avg: 73 Min: 22 Max: 676 Err: 0 (0.00%)
summary + 300 in 00:00:02 = 122.1/s Avg: 44 Min: 21 Max: 116 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:01:14 = 135.0/s Avg: 72 Min: 21 Max: 676 Err: 0 (0.00%)

By changing authentication.json to add a STATIC_USER auth module for openidm-admin, to avoid the cost of going to the repo to authenticate each request:
{
"name" : "STATIC_USER",
"properties" : {
"queryOnResource" : "internal/user",
"username" : "openidm-admin",
"password" : "openidm-admin"
"defaultUserRoles" : [
"internal/role/openidm-admin"
]
},
"enabled" : true
}

Add to the beginning of the list of authModules, so if it is successful none of the others will be used.

summary + 604 in 00:00:06 = 108.4/s Avg: 88 Min: 29 Max: 666 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 4252 in 00:00:30 = 141.7/s Avg: 70 Min: 23 Max: 177 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 4856 in 00:00:36 = 136.5/s Avg: 72 Min: 23 Max: 666 Err: 0 (0.00%)
summary + 4103 in 00:00:30 = 136.8/s Avg: 73 Min: 24 Max: 413 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 8959 in 00:01:06 = 136.6/s Avg: 72 Min: 23 Max: 666 Err: 0 (0.00%)
summary + 1041 in 00:00:08 = 133.9/s Avg: 64 Min: 19 Max: 173 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:01:13 = 136.3/s Avg: 71 Min: 19 Max: 666 Err: 0 (0.00%)

By disabling the default (json) audit handler:

summary + 1529 in 00:00:12 = 132.7/s Avg: 73 Min: 22 Max: 606 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 4720 in 00:00:30 = 157.3/s Avg: 63 Min: 21 Max: 160 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 6249 in 00:00:42 = 150.5/s Avg: 65 Min: 21 Max: 606 Err: 0 (0.00%)
summary + 3751 in 00:00:23 = 160.0/s Avg: 58 Min: 16 Max: 194 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:01:05 = 153.9/s Avg: 63 Min: 16 Max: 606 Err: 0 (0.00%)

By removing the onCreate script for managed/user:

summary + 613 in 00:00:04 = 151.0/s Avg: 62 Min: 16 Max: 525 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 6216 in 00:00:30 = 207.3/s Avg: 48 Min: 12 Max: 136 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 6829 in 00:00:34 = 200.6/s Avg: 49 Min: 12 Max: 525 Err: 0 (0.00%)
summary + 3171 in 00:00:15 = 216.9/s Avg: 44 Min: 12 Max: 127 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:00:49 = 205.5/s Avg: 47 Min: 12 Max: 525 Err: 0 (0.00%)

By removing the meta declaration for managed/user:

summary + 1258 in 00:00:05 = 233.8/s Avg: 41 Min: 7 Max: 581 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 8742 in 00:00:28 = 310.3/s Avg: 31 Min: 6 Max: 189 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:00:34 = 298.0/s Avg: 32 Min: 6 Max: 581 Err: 0 (0.00%)


By expanding the DB connection pool:
"connectionPool" : {
"type" : "hikari",
"minimumIdle" : 50,
"maximumPoolSize" : 100
}
apache-jmeter-3.3/bin/jmeter.sh -n -t jmeter-idm-create-users.jmx -l results.txt -j jmeter.log

summary + 3624 in 00:00:13 = 284.1/s Avg: 34 Min: 6 Max: 692 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 6376 in 00:00:19 = 330.2/s Avg: 28 Min: 6 Max: 104 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:00:32 = 311.9/s Avg: 30 Min: 6 Max: 692 Err: 0 (0.00%)


Dropping all indexes on managedobjects except idx_json_managedobjects_username, managedobjects_pkey, and idx_managedobjects_object:

summary + 6872 in 00:00:22 = 315.3/s Avg: 31 Min: 6 Max: 543 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 3128 in 00:00:10 = 316.5/s Avg: 29 Min: 6 Max: 126 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:00:32 = 315.7/s Avg: 30 Min: 6 Max: 543 Err: 0 (0.00%)

Notification factory not enabled:

summary + 1297 in 00:00:05 = 264.7/s Avg: 36 Min: 6 Max: 488 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 8703 in 00:00:25 = 349.3/s Avg: 27 Min: 6 Max: 90 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 10000 in 00:00:30 = 335.4/s Avg: 29 Min: 6 Max: 488 Err: 0 (0.00%)

Remove relationshipFilter (20,000 total creates):

summary + 1280 in 00:00:05 = 282.2/s Avg: 34 Min: 6 Max: 490 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 12027 in 00:00:30 = 400.9/s Avg: 24 Min: 5 Max: 82 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary = 13307 in 00:00:35 = 385.3/s Avg: 25 Min: 5 Max: 490 Err: 0 (0.00%)
summary + 6693 in 00:00:16 = 414.4/s Avg: 22 Min: 5 Max: 92 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 20000 in 00:00:51 = 394.6/s Avg: 24 Min: 5 Max: 490 Err: 0 (0.00%)

Remove policy filter (20,000 total creates):

summary + 3064 in 00:00:06 = 546.5/s Avg: 17 Min: 3 Max: 492 Err: 0 (0.00%) Active: 10 Started: 10 Finished: 0
summary + 16936 in 00:00:24 = 720.6/s Avg: 13 Min: 3 Max: 72 Err: 0 (0.00%) Active: 0 Started: 10 Finished: 10
summary = 20000 in 00:00:29 = 687.0/s Avg: 13 Min: 3 Max: 492 Err: 0 (0.00%)






  • No labels