Optimizing MOBIUS Environment for Stable Performance: A Comprehensive Analysis

Overview

  • This document contains the results of testing MOBIUS master-script tests. Ticket:  PERF-809 - Getting issue details... STATUS

Summary

  • All tests were run successfully and without errors on the Mobius-performance testing cluster (mcpt). Approximately over 100 tests with various environment configurations were conducted. The tests and configurations that showed the best results for two database modifications, such as db.r6g.4xlarge and db.r6g.8xlarge, will be demonstrated.
  • During testing, an insufficient amount of resources for Amazon OpenSearch Service was detected, so data node instance type was increased to r6g.2xlarge.search.
  • To improve performance, the AWS task count was adjusted for certain services, which increased the memory load on the database. To avoid OOM (Out of Memory) errors, configurations were changed in both the DB instance parameter group and the DB cluster parameter group. Specifically, the shared_buffers parameter was modified to SUM({DBInstanceClassMemory/24076},-50003).

  • To avoid "remaining connection slots are reserved for non-replication superuser and rds_superuser connections" errors, configurations were changed in both the DB instance parameter group and the DB cluster parameter group. max_connections was modified to LEAST({DBInstanceClassMemory/9531392},9000)
  •  For mod-authtoken CPU was changed from 512 to 1024 and task count was adjusted to 6 tasks (2 default), okapi and nginx-okapi CPU  was changed from 1024 to1536.
  • No sign of memory leaks on every module during master-script tests. Memory shows a stable trend. For tests with a high load of single record create and update (62 virtual users without pauses) OOM issue of mod-inventory was reported  MODINV-1023 - Getting issue details... STATUS

  • No modules are showing a growing CPU trend or any spikes. 
  • Average response time differs and depends on environment configurations.

  • The "Receiving: downloading" workflow. Due to its design, it's processed by the frontend and sends frequent requests to the database in a very large quantity. When under a load of 70% of tenants simultaneously, this causes significant degradation in the performance of all other workflows. Therefore, results are provided in tables with additional tests conducted with this workflow and without it. The CPU usage by the database increases by more than 25% with this workflow and reaches 99%.
  • Database connection count did not exceed 5700
  • During the high-load test, exporting 800,000 records concurrently for 62 tenants, an issue with the mod-data-export occurs PERF-927 - Getting issue details... STATUS , which will be resolved and tested in the next release - Quesnelia  PERF-888 - Getting issue details... STATUS . Other workflows performed normally. Resource usage was stable and corresponded to the load.
  • Test with Fiscal year rollover average duration 3:21:51 for 30 tenants and 6:26:33 for 60 tenants, finished without errors, shows severe performance degradation for data import and data export workflows due to high database CPU usage 99.8%.


Recommendations

Database parameter group configuration:

parameterchanged valuedefault valueComment
shared_buffersSUM({DBInstanceClassMemory/24076},-50003)SUM({DBInstanceClassMemory/12038},-50003)Increases freeable db memory from 25% to 50% and decreases cache memory limit from 75% to 50%
max_connectionsLEAST({DBInstanceClassMemory/9531392},9000)LEAST({DBInstanceClassMemory/9531392},5000)Increases maximal connection limit from 5000 to 9000 connections

Amazon OpenSearch Service

data node instance type - r6g.2xlarge.search

Services

mod-authtoken CPU - 1024, 6 tasks

okapi CPU-1536

nginx-okapi CPU-1536

For database size db.r6g.4xlarge

adjust task count to 6 for services:

  • mod-authtoken

adjust task count to 4 for services:

  • mod-permissions
  • mod-search
  • mod-patron
  • mod-inventory
  • mod-inventory-storage
  • mod-circulation
  • mod-circulation-storage
  • mod-order
  • mod-order-storage,
  • mod-invoice
  • mod-invoice-storage
  • mod-users

For database size db.r6g.8xlarge

adjust task count to 6 for services:

  • mod-authtoken
  • mod-search

adjust task count to 4 for services:

  • mod-permissions
  • mod-patron
  • mod-inventory
  • mod-inventory-storage
  • mod-circulation
  • mod-circulation-storage
  • mod-order
  • mod-order-storage,
  • mod-invoice
  • mod-invoice-storage
  • mod-organization
  • mod-organization-storage
  • mod-users
  • mod-finance
  • mod-finance-storage
  • mod-configuration


"Receiving: downloading" workflow optimization

Test Runs 

Test #

Workflows

Test Conditions

Results

1.

All workflows

2 tasks for all of the modules  (except the modules with 1 task by requirements) database r6g.4xlarge, shared_buffers   parameters  SUM({DBInstanceClassMemory/24076},-50003)Amazon OpenSearch Service r6g.2хlarge.search, 

Completed
2.All workflows

Adjasted task count to 4 for services: mod-permissions, mod-search, mod-patron, mod-inventory, mod-inventory-storage, mod-circulation, mod-circulation-storage, mod-order, mod-order-storage, mod-invoice, mod-invoice-storage, mod-users and task count 6 for mod-authtoken. Database r6g.4xlarge, shared_buffers   parameters  SUM({DBInstanceClassMemory/24076},-50003)Amazon OpenSearch Service r6g.2хlarge.search, mod-authtoken CPU - 1024, okapi CPU-1536, nginx-okapi CPU-1536

Completed
3.Without ERW: Exporting Receiving Information to CSV

Adjasted task count to 4 for services: mod-permissions, mod-search, mod-patron, mod-inventory, mod-inventory-storage, mod-circulation, mod-circulation-storage, mod-order, mod-order-storage, mod-invoice, mod-invoice-storage, mod-users and task count 6 for mod-authtoken. Database r6g.4xlarge, shared_buffers   parameters  SUM({DBInstanceClassMemory/24076},-50003)Amazon OpenSearch Service r6g.2хlarge.search, mod-authtoken CPU - 1024, okapi CPU-1536, nginx-okapi CPU-1536

Completed
4.All workflowsAdjasted task count to 4 for services: mod-permissions, mod-search, mod-patron, mod-inventory, mod-inventory-storage, mod-circulation, mod-circulation-storage, mod-order, mod-order-storage, mod-invoice, mod-invoice-storage, mod-users, mod-organization, mod-organization-storage, mod-finance, mod-finance-storage, mod-configuration and task count 6 for mod-authtoken, mod-search. Database r6g.8xlarge, shared_buffers   parameters  SUM({DBInstanceClassMemory/24076},-50003)Amazon OpenSearch Service r6g.2хlarge.search, mod-authtoken CPU - 1024, okapi CPU-1536, nginx-okapi CPU-1536Completed
5.Without ERW: Exporting Receiving Information to CSVAdjasted task count to 4 for services: mod-permissions, mod-search, mod-patron, mod-inventory, mod-inventory-storage, mod-circulation, mod-circulation-storage, mod-order, mod-order-storage, mod-invoice, mod-invoice-storage, mod-users, mod-organization, mod-organization-storage, mod-finance, mod-finance-storage, mod-configuration and task count 6 for mod-authtoken, mod-search. Database r6g.8xlarge, shared_buffers   parameters  SUM({DBInstanceClassMemory/24076},-50003)Amazon OpenSearch Service r6g.2хlarge.search, mod-authtoken CPU - 1024, okapi CPU-1536, nginx-okapi CPU-1536Completed
6.All workflowsAdjasted task count to 4 for services: mod-permissions, mod-search, mod-patron, mod-inventory, mod-inventory-storage, mod-circulation, mod-circulation-storage, mod-order, mod-order-storage, mod-invoice, mod-invoice-storage, mod-users and task count 6 for mod-authtoken. Database r6g.4xlarge, shared_buffers   parameters  SUM({DBInstanceClassMemory/24076},-50003)Amazon OpenSearch Service r6g.2хlarge.search, mod-authtoken CPU - 1024, okapi CPU-1536, nginx-okapi CPU-1536Completed
7.All workflows, high-loadAdjasted task count to 4 for services: mod-permissions, mod-search, mod-patron, mod-inventory, mod-inventory-storage, mod-circulation, mod-circulation-storage, mod-order, mod-order-storage, mod-invoice, mod-invoice-storage, mod-users and task count 6 for mod-authtoken. Database r6g.4xlarge, shared_buffers   parameters  SUM({DBInstanceClassMemory/24076},-50003)Amazon OpenSearch Service r6g.2хlarge.search, mod-authtoken CPU - 1024, okapi CPU-1536, nginx-okapi CPU-1536Completed with errors from data export
8.All no-acquisition workflows + Fiscal year rollover  30 tenantsAdjasted task count to 4 for services: mod-permissions, mod-search, mod-patron, mod-inventory, mod-inventory-storage, mod-circulation, mod-circulation-storage, mod-order, mod-order-storage, mod-invoice, mod-invoice-storage, mod-users and task count 6 for mod-authtoken. Database r6g.4xlarge, shared_buffers   parameters  SUM({DBInstanceClassMemory/24076},-50003)Amazon OpenSearch Service r6g.2хlarge.search, mod-authtoken CPU - 1024, okapi CPU-1536, nginx-okapi CPU-1536Completed
9.All no-acquisition workflows + Fiscal year rollover  60 tenantsAdjasted task count to 4 for services: mod-permissions, mod-search, mod-patron, mod-inventory, mod-inventory-storage, mod-circulation, mod-circulation-storage, mod-order, mod-order-storage, mod-invoice, mod-invoice-storage, mod-users and task count 6 for mod-authtoken. Database r6g.4xlarge, shared_buffers   parameters  SUM({DBInstanceClassMemory/24076},-50003)Amazon OpenSearch Service r6g.2хlarge.search, mod-authtoken CPU - 1024, okapi CPU-1536, nginx-okapi CPU-1536Completed with errors from data import

Test Results

Test №1

WorkflowAverage response time (milliseconds)Errors
AIE_TC: Create Invoices226010
AIE_TC: Invoices Approve221070
AIE_TC: Paying Invoices226620
CICO_TC_Check-In Controller47240
CICO_TC_Check-Out Controller78420
CSI_TC:Share local instance164910
DE_Exporting MARC Bib records custom workflow3380850
DE_Exporting MARC Bib records workflow3335040
EVA_TC: View Account18380
ILR_TC: Create ILR37400
MSF_TC: mod search by auth query120440
MSF_TC: mod search by boolean query33650
MSF_TC: mod search by contributors58410
MSF_TC: mod search by filter query33320
MSF_TC: mod search by keyword query33760
MSF_TC: mod search by subject query51070
MSF_TC: mod search by title query64250
OPIH_/oai/records?verb=ListRecords&apikey=[APIKey]&resumptionToken=[resumptionToken] tenant-cs000000017420
POO_TC: Add Order Lines1057210
POO_TC: Approve Order886830
POO_TC Create Order564420
RTAC_TC: edge-rtac27350
SDIC_Single Record Import (Create)214590
SDIU_Single Record Import (Update)892330
TC: Receiving-an-Order-Line1678430
Serials-Receiving-Workflow1413270
Unreceiving-a-Piece595000
ULR_TC: Users loan Renewal Transaction61190
TOTAL18810

Test №2

WorkflowAverage response time (milliseconds)Errors
AIE_TC: Create Invoices80060
AIE_TC: Invoices Approve70350
AIE_TC: Paying Invoices68570
CICO_TC_Check-In Controller22540
CICO_TC_Check-Out Controller40370
CSI_TC:Share local instance159450
DE_Exporting MARC Bib records custom workflow439970
DE_Exporting MARC Bib records workflow428150
EVA_TC: View Account4750
ILR_TC: Create ILR15050
MSF_TC: mod search by auth query5440
MSF_TC: mod search by boolean query1630
MSF_TC: mod search by contributors3890
MSF_TC: mod search by filter query2790
MSF_TC: mod search by keyword query2800
MSF_TC: mod search by subject query4060
MSF_TC: mod search by title query10400
OPIH_/oai/records8490
POO_TC: Add Order Lines517760
POO_TC: Approve Order403090
POO_TC Create Order287080
RTAC_TC: edge-rtac24110
SDIC_Single Record Import (Create)114910
SDIU_Single Record Import (Update)192590
TC: Receiving-an-Order-Line881780
Serials-Receiving-Workflow839770
Unreceiving-a-Piece292050
ULR_TC: Users loan Renewal Transaction32560
TOTAL482.840

Test №3

WorkflowAverage response time (milliseconds)Errors
AIE_TC: Create Invoices32530
AIE_TC: Invoices Approve39410
AIE_TC: Paying Invoices48750
CICO_TC_Check-In Controller17280
CICO_TC_Check-Out Controller30550
CSI_TC:Share local instance158160
DE_Exporting MARC Bib records custom workflow419010
DE_Exporting MARC Bib records workflow518280
EVA_TC: View Account4140
ILR_TC: Create ILR10980
MSF_TC: mod search by auth query5570
MSF_TC: mod search by boolean query1680
MSF_TC: mod search by contributors3980
MSF_TC: mod search by filter query2870
MSF_TC: mod search by keyword query2890
MSF_TC: mod search by subject query4130
MSF_TC: mod search by title query10500
OPIH_/oai/records11490
POO_TC: Add Order Lines62810
POO_TC: Approve Order25430
POO_TC Create Order27340
RTAC_TC: edge-rtac16930
SDIC_Single Record Import (Create)54490
SDIU_Single Record Import (Update)115000
TC: Receiving-an-Order-Line93220
Serials-Receiving-Workflow96830
Unreceiving-a-Piece27860
ULR_TC: Users loan Renewal Transaction24310
TOTAL103.990

Test №4

WorkflowAverage response time (milliseconds)Errors
AIE_TC: Create Invoices48480
AIE_TC: Invoices Approve41920
AIE_TC: Paying Invoices43720
CICO_TC_Check-In Controller15500
CICO_TC_Check-Out Controller28610
CSI_TC:Share local instance158530
DE_Exporting MARC Bib records custom workflow392510
DE_Exporting MARC Bib records workflow352150
EVA_TC: View Account3890
ILR_TC: Create ILR10230
MSF_TC: mod search by auth query5800
MSF_TC: mod search by boolean query1720
MSF_TC: mod search by contributors4130
MSF_TC: mod search by filter query2980
MSF_TC: mod search by keyword query2960
MSF_TC: mod search by subject query4270
MSF_TC: mod search by title query10620
OPIH_/oai/records5730
POO_TC: Add Order Lines282680
POO_TC: Approve Order209760
POO_TC Create Order159100
RTAC_TC: edge-rtac13550
SDIC_Single Record Import (Create)58580
SDIU_Single Record Import (Update)133910
TC: Receiving-an-Order-Line474920
Serials-Receiving-Workflow460400
Unreceiving-a-Piece158080
ULR_TC: Users loan Renewal Transaction22390
TOTAL328.120

Test №5


WorkflowAverage response time (milliseconds)Errors
AIE_TC: Create Invoices24980
AIE_TC: Invoices Approve30740
AIE_TC: Paying Invoices38340
CICO_TC_Check-In Controller13480
CICO_TC_Check-Out Controller23110
CSI_TC:Share local instance157200
DE_Exporting MARC Bib records custom workflow356990
DE_Exporting MARC Bib records workflow353790
EVA_TC: View Account3640
ILR_TC: Create ILR8170
MSF_TC: mod search by auth query5490
MSF_TC: mod search by boolean query1630
MSF_TC: mod search by contributors3910
MSF_TC: mod search by filter query2830
MSF_TC: mod search by keyword query2850
MSF_TC: mod search by subject query4070
MSF_TC: mod search by title query10340
OPIH_/oai/records5440
POO_TC: Add Order Lines49390
POO_TC: Approve Order20210
POO_TC Create Order21820
RTAC_TC: edge-rtac12820
SDIC_Single Record Import (Create)43100
SDIU_Single Record Import (Update)103500
TC: Receiving-an-Order-Line78730
Serials-Receiving-Workflow81560
Unreceiving-a-Piece22950
ULR_TC: Users loan Renewal Transaction18960
TOTAL83.140

Test №6 longevity test


WorkflowAverage response time (milliseconds)Errors
AIE_TC: Create Invoices

9601


AIE_TC: Invoices Approve8468
AIE_TC: Paying Invoices8429
CICO_TC_Check-In Controller2818
CICO_TC_Check-Out Controller5302
CSI_TC:Share local instance15913
DE_Exporting MARC Bib records custom workflow70668
DE_Exporting MARC Bib records workflow85667
EVA_TC: View Account619
ILR_TC: Create ILR1887
MSF_TC: mod search by auth query1338
MSF_TC: mod search by boolean query295
MSF_TC: mod search by contributors697
MSF_TC: mod search by filter query490
MSF_TC: mod search by keyword query510
MSF_TC: mod search by subject query897
MSF_TC: mod search by title query2125
OPIH_/oai/records4621
POO_TC: Add Order Lines60980
POO_TC: Approve Order45081
POO_TC Create Order35638
RTAC_TC: edge-rtac2578
SDIC_Single Record Import (Create)13536
SDIU_Single Record Import (Update)22836
TC: Receiving-an-Order-Line100855
Serials-Receiving-Workflow104166
Unreceiving-a-Piece35176
ULR_TC: Users loan Renewal Transaction3704
TOTAL

Test №7 High load test

WorkflowAverage response time (milliseconds)errors
AIE_TC: Create Invoices225990
AIE_TC: Invoices Approve211730
AIE_TC: Paying Invoices216550
CICO_TC_Check-In Controller42350
CICO_TC_Check-Out Controller73860
CSI_TC:Share local instance14032
0
DE_Exporting MARC Bib records custom workflow36440523
DE_Exporting MARC Bib records workflow35678631
EVA_TC: View Account9139 - 0.22% from 4055
ILR_TC: Create ILR26970
MSF_TC: mod search by auth query9060
MSF_TC: mod search by boolean query2760
MSF_TC: mod search by contributors6000
MSF_TC: mod search by filter query4040
MSF_TC: mod search by keyword query4070
MSF_TC: mod search by subject query7490
MSF_TC: mod search by title query15480
OPIH_/oai/records11040
POO_TC: Add Order Lines1029210
POO_TC: Approve Order790360
POO_TC Create Order578370
RTAC_TC: edge-rtac110280
SDIC_Single Record Import (Create)26095
0
SDIU_Single Record Import (Update)374000
TC: Receiving-an-Order-Line1476190
Serials-Receiving-Workflow1439940
Unreceiving-a-Piece507470
ULR_TC: Users loan Renewal Transaction61760
OPFH12710
TOTAL1279data export issues


Test №8 Fiscal year rollover (30 tenants)

On the tenant cs00000001_0001 was performed test without other workflows and only 1 fiscal year rollover, duration was 1:24:52.

FYR30 tenantsordersRolloverStatusoverallRolloverStatusfinancialRolloverStatubudgetsClosingRolloverStatus
Average FYR time3:21:51



cs00000001_00022:54:30SuccessSuccessSuccessSuccess
cs00000001_00033:37:00SuccessSuccessSuccessSuccess
cs00000001_00042:53:22SuccessSuccessSuccessSuccess
cs00000001_00053:45:51SuccessSuccessSuccessSuccess
cs00000001_00062:55:25SuccessSuccessSuccessSuccess
cs00000001_00070:00:00 *Not StartedNot StartedNot StartedNot Started
cs00000001_00083:36:40SuccessSuccessSuccessSuccess
cs00000001_00092:56:24SuccessSuccessSuccessSuccess
cs00000001_00102:57:10SuccessSuccessSuccessSuccess
cs00000001_00113:35:20SuccessSuccessSuccessSuccess
cs00000001_00123:37:20SuccessSuccessSuccessSuccess
cs00000001_00133:34:23SuccessSuccessSuccessSuccess
cs00000001_00143:48:25SuccessSuccessSuccessSuccess
cs00000001_00153:47:25SuccessSuccessSuccessSuccess
cs00000001_00163:47:25SuccessSuccessSuccessSuccess
cs00000001_00173:36:27SuccessSuccessSuccessSuccess
cs00000001_00183:01:12SuccessSuccessSuccessSuccess
cs00000001_00193:46:49SuccessSuccessSuccessSuccess
cs00000001_00212:58:25SuccessSuccessSuccessSuccess
cs00000001_00223:44:58SuccessSuccessSuccessSuccess
cs00000001_00233:00:47SuccessSuccessSuccessSuccess
cs00000001_00242:58:20SuccessSuccessSuccessSuccess
cs00000001_00253:45:31SuccessSuccessSuccessSuccess
cs00000001_00262:59:31SuccessSuccessSuccessSuccess
cs00000001_00273:44:23SuccessSuccessSuccessSuccess
cs00000001_00283:33:36SuccessSuccessSuccessSuccess
cs00000001_00292:59:34SuccessSuccessSuccessSuccess
cs00000001_00302:57:58SuccessSuccessSuccessSuccess
cs00000001_00313:32:05SuccessSuccessSuccessSuccess
cs00000001_00583:07:29SuccessSuccessSuccessSuccess

 * - for tenant cs00000001_0007 FYR was not started properly(mechanical mistake due to manual start). Database was restored from snapshot for the next test with 60 tenants and finished successful for all tenants.



FYR 30errors
CICO_TC_Check-In Controller22540
CICO_TC_Check-Out Controller40040
CSI_TC:Share local instance159210
DE_Exporting MARC Bib records custom workflow491950
DE_Exporting MARC Bib records workflow551580
EVA_TC: View Account4510.02%
ILR_TC: Create ILR14730
MSF_TC: mod search by auth query4980
MSF_TC: mod search by boolean query1500
MSF_TC: mod search by contributors3660
MSF_TC: mod search by filter query2620
MSF_TC: mod search by keyword query2610
MSF_TC: mod search by subject query4250
MSF_TC: mod search by title query10270
OPIH_/oai/records13870
RTAC_TC: edge-rtac21760
SDIC_Single Record Import (Create)216840
SDIU_Single Record Import (Update)451740
ULR_TC: Users loan Renewal Transaction30780
TOTAL3090

Test №9 Fiscal year rollover (60 tenants)


FYR60 tenantsordersRolloverStatusoverallRolloverStatusfinancialRolloverStatus
budgetsClosingRolloverStatus
Average FYR time6:26:33



cs00000001_00026:20:54SuccessSuccessSuccessSuccess
cs00000001_00036:28:36SuccessSuccessSuccessSuccess
cs00000001_00045:16:45SuccessSuccessSuccessSuccess
cs00000001_00056:09:05SuccessSuccessSuccessSuccess
cs00000001_00066:30:16SuccessSuccessSuccessSuccess
cs00000001_00075:19:39SuccessSuccessSuccessSuccess
cs00000001_00086:14:02SuccessSuccessSuccessSuccess
cs00000001_00096:32:53SuccessSuccessSuccessSuccess
cs00000001_00106:16:17SuccessSuccessSuccessSuccess
cs00000001_00116:25:58SuccessSuccessSuccessSuccess
cs00000001_00126:48:33SuccessSuccessSuccessSuccess
cs00000001_00136:47:37SuccessSuccessSuccessSuccess
cs00000001_00146:49:36SuccessSuccessSuccessSuccess
cs00000001_00156:46:31SuccessSuccessSuccessSuccess
cs00000001_00166:49:23SuccessSuccessSuccessSuccess
cs00000001_00176:51:49SuccessSuccessSuccessSuccess
cs00000001_00186:31:28SuccessSuccessSuccessSuccess
cs00000001_00196:29:45SuccessSuccessSuccessSuccess
cs00000001_00215:52:25SuccessSuccessSuccessSuccess
cs00000001_00226:49:04SuccessSuccessSuccessSuccess
cs00000001_00236:50:44SuccessSuccessSuccessSuccess
cs00000001_00245:51:44SuccessSuccessSuccessSuccess
cs00000001_00255:51:54SuccessSuccessSuccessSuccess
cs00000001_00266:54:53SuccessSuccessSuccessSuccess
cs00000001_00276:30:05SuccessSuccessSuccessSuccess
cs00000001_00286:54:06SuccessSuccessSuccessSuccess
cs00000001_00296:54:57SuccessSuccessSuccessSuccess
cs00000001_00306:29:03SuccessSuccessSuccessSuccess
cs00000001_00315:52:42SuccessSuccessSuccessSuccess
cs00000001_00326:46:42SuccessSuccessSuccessSuccess
cs00000001_00336:46:17SuccessSuccessSuccessSuccess
cs00000001_00346:53:40SuccessSuccessSuccessSuccess
cs00000001_00356:27:10SuccessSuccessSuccessSuccess
cs00000001_00366:52:56SuccessSuccessSuccessSuccess
cs00000001_00375:53:08SuccessSuccessSuccessSuccess
cs00000001_00386:51:47SuccessSuccessSuccessSuccess
cs00000001_00396:43:38SuccessSuccessSuccessSuccess
cs00000001_00406:50:57SuccessSuccessSuccessSuccess
cs00000001_00416:50:25SuccessSuccessSuccessSuccess
cs00000001_00425:51:07SuccessSuccessSuccessSuccess
cs00000001_00436:49:32SuccessSuccessSuccessSuccess
cs00000001_00446:24:14SuccessSuccessSuccessSuccess
cs00000001_00455:50:48SuccessSuccessSuccessSuccess
cs00000001_00466:24:16SuccessSuccessSuccessSuccess
cs00000001_00476:48:19SuccessSuccessSuccessSuccess
cs00000001_00485:49:26SuccessSuccessSuccessSuccess
cs00000001_00495:49:01SuccessSuccessSuccessSuccess
cs00000001_00506:39:57SuccessSuccessSuccessSuccess
cs00000001_00516:22:53SuccessSuccessSuccessSuccess
cs00000001_00526:21:09SuccessSuccessSuccessSuccess
cs00000001_00536:37:53SuccessSuccessSuccessSuccess
cs00000001_00546:37:42SuccessSuccessSuccessSuccess
cs00000001_00556:21:08SuccessSuccessSuccessSuccess
cs00000001_00566:36:46SuccessSuccessSuccessSuccess
cs00000001_00576:19:53SuccessSuccessSuccessSuccess
cs00000001_00586:43:31SuccessSuccessSuccessSuccess
cs00000001_00596:35:42SuccessSuccessSuccessSuccess
cs00000001_00606:42:28SuccessSuccessSuccessSuccess
cs00000001_00615:44:17SuccessSuccessSuccessSuccess
cs00000001_00625:45:11SuccessSuccessSuccessSuccess



FYR 60errors
CICO_TC_Check-In Controller23100
CICO_TC_Check-Out Controller40650
CSI_TC:Share local instance16022
0
DE_Exporting MARC Bib records custom workflow642820
DE_Exporting MARC Bib records workflow589080
EVA_TC: View Account4790.05%
ILR_TC: Create ILR15610
MSF_TC: mod search by auth query5160
MSF_TC: mod search by boolean query1540
MSF_TC: mod search by contributors3670
MSF_TC: mod search by filter query2660
MSF_TC: mod search by keyword query2630
MSF_TC: mod search by subject query4280
MSF_TC: mod search by title query10490
OPIH_/oai/records12630
RTAC_TC: edge-rtac22450
SDIC_Single Record Import (Create)844630.27%
SDIU_Single Record Import (Update)1747800.12%
ULR_TC: Users loan Renewal Transaction10220
TOTAL4000

Comparison of the test results with tuned and not tuned environment

The following diagram compares all test results of MOBIUS Baseline Tests: CI/CO.


Baseline (milliseconds)Tuned with Receiving: downloading (milliseconds)Tuned without Receiving: downloading (milliseconds)

db.r6g.4xlargeErrors

Test №1

db.r6g.4xlarge

2 tasks for all of the modules

Errors

Test №2

db.r6g.4xlarge

Test №4

db.r6g.8xlarge-configs for 8xlarge db

ErrorsDelta 4xlarge and 8xlarge db

Test №3

db.r6g.4xlarge

Test №5

db.r6g.8xlarge -configs for 8xlarge db

ErrorsDelta 4xlarge and 8xlarge db
AIE_TC: Create Invoices347300226010800648480-39.45325324980-23.21
AIE_TC: Invoices Approve331300221070703541920-40.41394130740-22.00
AIE_TC: Paying Invoices311190226620685743720-36.24487538340-21.35
CICO_TC_Check-In Controller6420147240225415500-31.23172813480-21.99
CICO_TC_Check-Out Controller10520478420403728610-29.13305523110-24.35
CSI_TC:Share local instance110184316491015945158530-0.5815816157200-0.61
DE_Exporting MARC Bib records custom workflow53296038085043997392510-10.7941901356990-14.80
DE_Exporting MARC Bib records workflow36563033504042815352150-17.7551828353790-31.74
EVA_TC: View Account-21183804753890-18.114143640-12.08
ILR_TC: Create ILR5085237400150510230-32.0310988170-25.59
MSF_TC: mod search by auth query
1880 (average for all search flows)
52
12044054458006.625575490-1.44
MSF_TC: mod search by boolean query3365016317205.521681630-2.98
MSF_TC: mod search by contributors5841038941306.173983910-1.76
MSF_TC: mod search by filter query3332027929806.812872830-1.39
MSF_TC: mod search by keyword query3376028029605.712892850-1.38
MSF_TC: mod search by subject query5107040642705.174134070-1.45
MSF_TC: mod search by title query642501040106202.12105010340-1.52
OPIH_/oai/records--74208495730-32.5111495440-52.65
POO_TC: Add Order Lines185765415(API- the same in UI)105721051776282680-45.40628149390-21.37
POO_TC: Approve Order146352088683040309209760-47.96254320210-20.53
POO_TC Create Order99937056442028708159100-44.58273421820-20.19
RTAC_TC: edge-rtac-027350241113550-43.80169312820-24.28
SDIC_Single Record Import (Create)30395442145901149158580-49.02544943100-20.90
SDIU_Single Record Import (Update)96046389233019259133910-30.4711500103500-10.00
TC: Receiving-an-Order-Line3072710167843088178474920-46.14932278730-15.54
Serials-Receiving-Workflow2823360141327083977460400-45.18968381560-15.77
Unreceiving-a-Piece106148059500029205158080-45.87278622950-17.62
ULR_TC: Users loan Renewal Transaction8023661190325622390-31.23243118960-22.01
TOTAL--18810482.84328.120-32.04103.9983.140-20.05

Service CPU Utilization

It did not exceed 95% for all of the modules.

Service Memory Utilization

Here we can't see any sign of memory leaks on every module. Memory shows stable trend.

DB CPU Utilization

DB CPU was 98% average with ERW: Exporting Receiving Information to CSV and 75% without.

DB Connections

DB connections maximum 5700.

Resource utilization for Test #4

Service CPU Utilization

It did not exceed 95% for all of the modules.

Service Memory Utilization

Here we can't see any sign of memory leaks on every module. Memory shows stable trend.

DB CPU Utilization

DB CPU was 38% average.

DB Connections

DB connections were up to 5420.

Resource utilization for Test #5

Service CPU Utilization

It did not exceed 95% for all of the modules.

Service Memory Utilization

Here we can't see any sign of memory leaks on every module. Memory shows stable trend.

DB CPU Utilization

DB CPU was 38% average.


DB Connections

DB connections were up to 5210.


Resource utilization for Test #6 longevity


Service CPU Utilization

Test completed successfully without sudden fails and/or modules restart. All modules are stable.

CPU utilisation didn't exceed 90%. (most used module is mod-permissions). 

Only module that has spikes in CPU usage is mod-pubsub. (may be related to background jobs)


Service Memory Utilization

No memory leaks found. 

All modules behaviour is stable.

DB CPU Utilization


DB Connections

Db used ±6K connections during whole duration of a test

 

Resource utilization for Test #7 High load


Instance CPU Utilization

CPU utilization didn't exceed 55%. 

Service CPU Utilization

CPU utilization didn't exceed 110%. 


Service Memory Utilization

It was observed an issue for mod-data-export PERF-927 - Getting issue details... STATUS

All modules' behavior is stable except mod-data-export.

DB CPU Utilization


DB Connections

Db used up to 7K connections


Open Search Resources utilization

Kafka Resources utilization

Resource utilization for Test #8 FYR (30 tenants)

Instance CPU Utilization

It did not exceed 26%.

Service CPU Utilization

It did not exceed 85% for all of the modules.

Service Memory Utilization

All modules' behavior is stable.

DB CPU Utilization

DB CPU was 99.8% average.

DB Connections

Db used up to 5K connections

DB Freeable Memory

During the test, it was not less than 35G of freeable memory.

Resource utilization for Test #9 FYR (60 tenants)

Instance CPU Utilization

It did not exceed 27%.

Service CPU Utilization

It did not exceed 100% for all of the modules.


Service Memory Utilization

All modules' behavior is stable.

DB CPU Utilization

DB CPU was 99.8% average.

DB Connections

Db used up to 5K connections


Appendix

Infrastructure

PTF - environment mcpt

  • 14 m6g.2xlarge EC2 instances located in US East (N. Virginia)us-east-1
  • 1 database instance, writer

    one of

    NameMemory GIBvCPUs

    db.r6g.4xlarge

    128 GiB16 vCPUs
    db.r6g.8xlarge256 GiB32 vCPUs
  • Amazon OpenSearch Service: ptf-test
    • Data nodes
      Instance type-r6g.2xlarge.search
      Number of nodes-4
    • Dedicated master nodes
      Instance type-r6g.large.search
      Number of nodes-3
  • MSK ptf-mobius-testing2
    • 2 m5.2xlarge brokers in 2 zones
    • Apache Kafka version 2.8.0

    • EBS storage volume per broker 300 GiB

    • auto.create.topics.enable=true
    • log.retention.minutes=480
    • default.replication.factor=2


Modules memory and CPU parameters:

db.r6g.4xlarge

Module
mcpt-pvt
Thu May 16 07:29:57 UTC 2024
Task Def. RevisionModule VersionTask CountMem Hard LimitMem Soft limitCPU unitsXmxMetaspaceSizeMaxMetaspaceSize
mod-remote-storage18579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-remote-storage:3.0.124920447210243960512512
mod-ncip12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-ncip:1.14.42102489612876888128
mod-finance-storage14579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-finance-storage:8.5.041024896102470088128
mod-agreements17579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-agreements:6.0.2015921488128000
mod-ebsconet12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-ebsconet:2.1.1212481024128700128256
edge-sip212579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-sip2:3.1.12102489612876888128
mod-consortia18579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-consortia:1.0.325136477610244416384512
mod-organizations12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-organizations:1.8.02102489612876888128
mod-settings17579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-settings:1.0.22102489620076888128
edge-dematic15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-dematic:2.1.11102489612876888128
mod-data-import15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-data-import:3.0.71204818442561292384512
mod-search18579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-search:3.0.5425922480204814405121024
mod-tags12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-tags:2.1.02102489612876888128
mod-authtoken22579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-authtoken:2.14.1614401152102492288128
edge-courses12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-courses:1.3.02102489612876888128
edge-inventory6579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-inventory:1.4.02102489612876888128
mod-inventory-update12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-inventory-update:3.2.12102489612876888128
mod-notify12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-notify:3.1.02102489612876888128
mod-configuration13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-configuration:5.9.24102489612876888128
mod-orders-storage13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-orders-storage:13.6.04102489651270088128
edge-caiasoft12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-caiasoft:2.1.02102489612876888128
mod-login-saml15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-login-saml:2.7.22102489612876888128
mod-erm-usage-harvester7579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-erm-usage-harvester:4.4.12102489612876888128
mod-password-validator12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-password-validator:3.1.0214401298128768384512
mod-gobi13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-gobi:2.7.12102489612876888128
mod-licenses15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-licenses:5.0.22248023121281792384512
mod-fqm-manager12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-fqm-manager:1.0.32102489612876888128
edge-dcb9579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-dcb:1.0.22102489612876888128
mod-bulk-operations18579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-bulk-operations:1.1.923072260010241536384512
mod-graphql12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-graphql:1.12.00102489612876888128
mod-finance12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-finance:4.8.04102489612876888128
mod-erm-usage7579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-erm-usage:4.6.02102489612876888128
mod-lists15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-lists:1.0.52102489612876888128
mod-copycat12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-copycat:1.5.02102489612876888128
mod-permissions26579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-permissions:6.4.04168415445121024384512
mod-entities-links17579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-entities-links:2.0.4225922480400144001024
pub-edge6579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/pub-edge:2023.06.142102489612876800
mod-orders13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-orders:12.7.142048144010241024384512
edge-patron14579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-patron:5.0.0.1582102489625676888128
edge-ncip12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-ncip:1.9.22102489612876888128
mod-users-bl12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-users-bl:7.6.021440115251292288128
edge-ea-data-export7579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-ea-data-export:4.1.02102489612876888128
mod-invoice13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-invoice:5.7.241440115251292288128
mod-inventory-storage19579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-inventory-storage:27.0.444096369020483076384512
mod-user-import12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-user-import:3.8.02102489612876888128
mod-sender12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-sender:1.11.02102489612876888128
edge-oai-pmh15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-oai-pmh:2.7.121512136010241440384512
mod-data-export-worker15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-data-export-worker:3.1.223072280010242048384512
mod-rtac12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-rtac:3.5.02102489612876888128
mod-task-list7579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-task-list:1.9.22102489612876888128
mod-circulation-storage20579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-circulation-storage:17.1.742880259215361814384512
mod-calendar13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-calendar:2.5.02102489612876888128
mod-source-record-storage21579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-source-record-storage:5.7.525600500020483500384512
mod-event-config12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-event-config:2.6.02102489612876888128
mod-courses12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-courses:1.4.82102489612876888128
mod-circulation-item9579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-circulation-item:1.0.02102489612876888128
mod-inventory19579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-inventory:20.1.642880259210241814384512
mod-email12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-email:1.16.02102489612876888128
mod-circulation20579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-circulation:24.0.1142880259215361814384512
mod-pubsub16579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-pubsub:2.11.32153614401024922384512
mod-di-converter-storage17579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-di-converter-storage:2.1.52102489612876888128
edge-rtac15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-rtac:2.6.22102489612876888128
edge-orders15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-orders:2.9.12102489612876888128
mod-template-engine12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-template-engine:1.19.12102489612876888128
mod-users17579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-users:19.2.24102489612876888128
mod-patron-blocks14579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-patron-blocks:1.9.021024896102476888128
mod-audit13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-audit:2.8.02102489612876888128
edge-fqm13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-fqm:1.0.12102489612876888128
mod-source-record-manager18579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-source-record-manager:3.7.725600500020483500384512
nginx-edge6579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/nginx-edge:2023.06.1421024896128000
mod-quick-marc16579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-quick-marc:5.0.11228821761281664384512
nginx-okapi9579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/nginx-okapi:2023.06.14210248961536000
okapi-b8579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/okapi:5.1.23168414401536922384512
mod-feesfines12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-feesfines:19.0.02102489612876888128
mod-invoice-storage13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-invoice-storage:5.7.041872153610241024384512
edge-users6579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-users:1.2.02102489612876888128
mod-dcb9579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-dcb:1.0.02102489612876888128
mod-service-interaction15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-service-interaction:3.0.22204818442561290384512
mod-data-export17579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-data-export:4.8.711024896102476888128
mod-patron12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-patron:6.0.04102489612876888128
mod-oai-pmh16579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-oai-pmh:3.12.824096369020483076384512
edge-connexion12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-connexion:1.1.12102489612876888128
mod-kb-ebsco-java12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-kb-ebsco-java:4.0.02102489612876888128
mod-notes13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-notes:5.1.021024896128952384512
mod-data-export-spring15579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-data-export-spring:3.0.21204818442561536384512
mod-login12579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-login:7.10.12144012981024768384512
mod-organizations-storage13579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-organizations-storage:4.6.04102489612876888128
pub-okapi6579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/pub-okapi:2023.06.142102489612876800
edge-erm7579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/edge-erm:1.0.02102489612876888128
mod-eusage-reports7579891902283.dkr.ecr.us-east-1.amazonaws.com/folio/mod-eusage-reports:2.0.02102489612876888128

Methodology/Approach

MOBIUS Tests: scenarios were started by carrier.io or from load generator instance in the same (us-east-1) AWS region. 

The database contains five times more generated data for large tenant IDs compared to small tenant IDs. The table below displays the average count of generated instances and items for both small and large tenants..

tenantinstancesitems
Small84754103137
Large416176543428

The attached file contains full info about generated data per tenant.

  • large tenants IDs = 0042, 0024, 0051, 0006

  1. Run data preparation script before test
  2. Create artifacts and upload them to carrier-io or to load generator instance in the same (us-east-1) AWS region
  3. Change parameters and run tests
  4. Executed one workflow per minute concurrently (2 for 4 large tenants).

Discussions

At the initial stage of testing, there were numerous errors from various workflows, most notably those involving search. While investigating the cause of the errors, it was found that there was insufficient CPU capacity (100% utilization) on the data nodes of the OpenSearch cluster. Initially, testing was done with r6g.large.search, then increased to r6g.4xlarge.search, but it was too large and only utilized 40% CPU. Therefore, it was downsized to r6g.2xlarge.search, with the number of containers (tasks) increased to 4 for mod-search.

However, after identifying the issue related to search, a problem with the database persisted, such as OOM (Out of Memory). Two options were tested to address this issue: increasing the database size to db.r6g.8xlarge and adjusting the shared_buffers configuration to SUM({DBInstanceClassMemory/24076},-50003) for the size of db.r6g.4xlarge. Both tests showed promising results; however, in both cases, there were errors related to an insufficient number of connections to the database in the logs ("remaining connection slots are reserved for non-replication superuser and rds_superuser connections"). To address this, the max_connections configuration was set to LEAST({DBInstanceClassMemory/9531392},9000) for both sizes of the database, increasing the upper limit of connections to the database to 9000.

All of these measures helped to eliminate errors, but response times remained high, especially for check-in and check-out. To improve response time, we increased the number of containers for mod-authtoken to 4, which yielded very good results. Additionally, we improved response times for all circulation workflows by setting 4 containers for each: mod-permissions, mod-patron, mod-inventory, mod-inventory-storage, mod-circulation, mod-circulation-storage


To improve the performance of acquisition workflows, the number of containers for mod-order, mod-order-storage, mod-invoice, mod-invoice-storage, and mod-users was increased to 4. However, this resulted in significantly increased load on mod-authtoken, causing other workflows to slow down again. Therefore, the number of containers for mod-authtoken was increased to 6 to alleviate the load.
The next issue we're facing is the operation of the "Receiving: downloading" workflow. Due to its design, it's processed by the frontend and sends frequent requests to the database in a very large quantity. When under a load of 70% of tenants simultaneously, this causes significant degradation in the performance of all other workflows. Therefore, results are provided in tables with additional tests conducted with this workflow and without it. The CPU usage by the database increases by more than 25% with this workflow and reaches 99%.