Overview
Test goal is to assess performance of circulation check-in functionality for items with 10 TLR (title-level requests) each.
Ticket: - PERF-450Getting issue details... STATUS
Summary
- Load tests showed that there is significant degradation (57-354%) in performance of check-in for items with 10 TLRs each and without it - see Response Time Comparison.
- Resource monitoring showed that:
- CPU consumption by several services increased significantly - see Service CPU Utilization 25 users comparison.
RDS CPU Utilization increased from 20% to 70% - see RDS CPU Utilization 25 users comparison.
Database load increased two times - see Database Load 25 users comparison.
Test Runs
Test # | Test Conditions | Duration | Load generator size (recommended) | Load generator Memory(GiB) (recommended) | Notes |
---|---|---|---|---|---|
1. | Baseline, Checkin with 1, 8, 25 users | 30 min | t3.medium | 3 | Without TLR |
2. | Verification, Checkin with 1, 8, 25 users | WIth 10 TLR per item |
Results
Response Times
Baseline (items without TLR)
Verification (items with 10 TLRs)
Response time comparison
Users quantity | Response time 95prc, sec | Degradation, sec | Degradation, % | |
---|---|---|---|---|
Baseline (items without TLR) | Verification (items with 10 TLR each) | |||
1 user | 0.607 | 0.953 | 0.346 | 57 |
8 users | 0.484 | 0.782 | 0.298 | 62 |
25 users | 0.441 | 2.001 | 1.56 | 354 |
Service CPU Utilization
Baseline (items without TLR)
Verification (items with 10 TLRs)
Service CPU Utilization 25 users comparison
Baseline (items without TLR)
Verification (items with 10 TLRs)
Modules | Average load | |
---|---|---|
Baseline | Verification | |
mod-users | 22.1 | 51.6 |
mod-circulation-storage | 3.3 | 7.2 |
mod-inventory-storage | 9 | 20.6 |
mod-circulation | 1.5 | 2.7 |
mod-okapi | 19.9 | 20.8 |
mod-feesfines | 7.1 | 8.7 |
mod-patron-blocks | 0.6 | 1.1 |
mod-pubsub | 5.8 | 5.9 |
mod-authtoken | 5.4 | 6.3 |
mod-configuration | 16.5 | 13.2 |
mod-remote-storage | 16.4 | 19.3 |
mod-inventory | 9.6 | 11.8 |
mod-inventory-storage | 9 | 20.6 |
Instance CPU Utilization
Baseline (items without TLR)
Verification (items with 10 TLRs)
Memory Utilization
Baseline (items without TLR)
Verification (items with 10 TLRs)
RDS CPU Utilization
Baseline (items without TLR)
Verification (items with 10 TLRs)
RDS CPU Utilization 25 users comparison
Baseline (items without TLR)
Verification (items with 10 TLRs)
RDS DB connections
Baseline (items without TLR)
Verification (items with 10 TLRs)
Database Load
Baseline (items without TLR)
Verification (items with 10 TLRs)
Database Load 25 users comparison
Baseline (items without TLR)
Verification (items with 10 TLRs)
Top SQL 25 users comparison
Baseline (items without TLR)
Verification (items with 10 TLRs)
Appendix
Infrastructure
PTF -environment ncp3
- 10 m6i.2xlarge EC2 instances located in US East (N. Virginia)us-east-1
- 2 instances of db.r6.xlarge database instances: Writer & reader instances
- MSK ptf-kakfa-3 [ kafka configurations]
- 4 kafka.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=3
Modules memory and CPU parameters:
Modules | Version | Task Definition | Running Tasks | CPU | Memory (Soft/Hard limits) | MaxMetaspaceSize | Xmx |
---|---|---|---|---|---|---|---|
okapi | 4.14.7 | 1 | 3 | 1024 | 1440/1684 | 512 | 922 |
mod-feesfines | 18.1.1 | 3 | 2 | 128 | 896/1024 | 128 | 768 |
mod-patron-blocks | 1.7.1 | 4 | 2 | 1024 | 896/1024 | 128 | 768 |
mod-pubsub | 2.7.0 | 4 | 2 | 1024 | 1440/1536 | 512 | 922 |
mod-authtoken | 2.12.0 | 3 | 2 | 512 | 1152/1440 | 128 | 922 |
mod-circulation-storage | 15.0.2 | 3 | 2 | 1024 | 1440/1536 | 512 | 896 |
mod-circulation | 23.3.2 | 3 | 2 | 1024 | 896/1024 | 128 | 768 |
mod-configuration | 5.9.0 | 3 | 2 | 128 | 896/1024 | 128 | 768 |
mod-users | 19.0.0 | 4 | 2 | 128 | 896/1024 | 128 | 768 |
mod-remote-storage | 1.7.1 | 3 | 2 | 128 | 1692/1872 | 512 | 1178 |
Methodology/Approach
- Run necessary commands to return the database to the initial state. Do this before each test run. Wait several minutes before the test start.
- Conduct check-out for the items with JMeter script Create_TLR.jmx (disable "Create_TLR" step).
- Conduct baseline - run check-in load tests with different number of users.
- Conduct verification - repeat tests with the same approach but before each test also generate 10 TLR for each item by running JMeter script (Create_TLR.jmx) - enable both Check-in and Create_TLR steps.
- Compare test results.
Note - make sure to use the same list of items for Create_TLR.jmx script and Check-in script. Also, items should be selected for those instances which have 1 item per instance.
Grafana dashboard
Verification (items with 10 TLRs):
1 user, 8 users
25 ysers
Please note that dashboards will expire in 6 weeks since test run.