perf-agent-lab - automated performance run

JPetStore Needs attention

commit c9a37f22 - Merge pull request #1197 from mybatis/renovate/actions-setup-java-6.x - run 20261018-080254 (UTC) - total 215.8 s - LLM: openai/gpt-oss-20b - findings by the LLM agent
Summary. 1 item(s) need attention; the most important is: Duplicate Order ID causing 500 errors on POST /order/new. 2 small latency difference(s) were within run-to-run noise and are not treated as findings.
Requests
51,577
250 users, 60 s
Throughput
861.86 req/s
p95 latency
38 ms
p50 4 / p99 74
Error rate
0.01%
7 failed
CPU (host)
44.4%
max 84.5%, Tomcat JVM avg 24.0%
Tomcat JVM memory
407 MB
peak RSS
Smoke test
passed
39 req
LLM tokens
20058

Pipeline

  1. CODEPull latest code1.12sok - c9a37f22 Merge pull request #1197 from mybatis/renovate/actions-setup
  2. CODEBuild and start the application41.75sok - build 30.7s, ready after 11.0s
  3. CODESanity (smoke) test20.27sok - last known-good script: 39 req, 0 failed, p95 118.8 ms
  4. AGENTSelf-heal the Locust script0sskipped - smoke test passed - no repair needed
  5. CODERun the load test (250 users, 60 s)60.4sok - 51577 requests, 59 resource samples
  6. CODEAnalyze results0.11sok - p95 38.5 ms, 0 spike(s), 1 error cluster(s), verdict healthy
  7. CODEInspect application and GC logs0.02sok - 945 lines, 2 exception type(s), 117 GC events
  8. AGENTCorrelate with logs, code and recent commits86.07sok - LLM agent with code/log tools (2 noise finding(s) dropped)
  9. CODEBuild report and publish0sok - reports/runs/20261018-080254/report.html

Results

Response time (ms)

02755821100s14s28s41s55sp50p95ms

Throughput & errors

027555082511000s14s28s41s55sreq/serrors/bucket

CPU (%)

02550751000s14s28s41s55shosttomcat jvmlocust%

Network (KB/s) & Tomcat JVM memory (MB RSS)

0273654728209109450s14s28s41s55snet KB/stomcat jvm RSS MB
EndpointReqFailavgp50p95p99maxvs baseline
POST /account/signon1041016867133159+229%
GET /account/signoff103901585996152+346%
GET /catalog/viewProduct926201044080118+327%
GET /catalog/viewItem926201043971119+332%
GET /catalog/viewCategory92630943971110+333%
GET /cart2074094366082+333%
GET /catalog92630943675139+306%
GET /cart/addItem3114095366290+310%
GET /catalog/searchProducts20610943679128+262%
POST /order/new (confirm)103971053460157+271%
GET /cart/checkout1040084325481+290%
GET /account (sign-on form)10410843074233+249%
GET /order/new1039084304876+315%
POST /order/new (billing)1039084306480+295%

Errors

EndpointStatusMessageCountFirst / last
POST /order/new (confirm)500HTTP 50071s / 23s

Logs

Application log

945 lines scanned - levels: SEVERE 9

  • HsqlException integrity constraint violation: unique constraint or index violation ; PK_ORDERS table: ORDERS x7 OrderService.insertOrder (OrderService.java:85)
  • ConnectException Connection refused x1
  • Servlet.service() for servlet [dispatcher] in context with path [/jpetstore] threw exception [Request processing failed; nested exception is (x7)
  • Could not contact [localhost:8205] (base port [8205] and offset [0]). Tomcat may not be running.
  • Error stopping Catalina

JVM garbage collection

117 events - total pause 349.6 ms - max 15.3 ms - full GCs 0 - heap after GC (max) 43 MB

Findings

Duplicate Order ID causing 500 errors on POST /order/new high

Suspected cause: Concurrent order creation attempts with same ORDERID

OrderService.java:85 insertOrder method

Recommendation: Implement idempotent order creation or pre-check for existing ORDERID before insert (recurring issue)

Improvement plan

#ImprovementExpected impactEffort
1Add pre-insert check or use auto-increment for ORDERID to avoid duplicate key violationsHigh – eliminates 500 errorsmedium

Token usage

LLM tokens this run: 20058. Deterministic steps (git, build, smoke, load, metrics, statistics, log parsing, report) never call the model.

LLM stepCallsPromptCompletion
correlate6159504108

Locust and the application ran on the same machine (a shared CI runner), so absolute numbers are indicative and CPU contention is expected; use this report to compare runs and spot regressions. Load: 250 users for 60 s after a 39-request smoke test.