Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Where do the waiting transactions accumulate? #13

Open
hkayabilisim opened this issue Jan 3, 2022 · 0 comments
Open

Where do the waiting transactions accumulate? #13

hkayabilisim opened this issue Jan 3, 2022 · 0 comments

Comments

@hkayabilisim
Copy link

I've successfully installed TeaStore and done some benchmark tests using HTTP-Load-Generator; no problems. However, I came accross a peculiar case where I couldn't understand the mechanism of accumulated transactions.

In the following scenario, I've delibaretly decreased the capacity of teastore-webui to the extend that TeaStore is still functional but successfull transactions are generally lower than the Load Intensity. In my tests, Director does not report Failed or Dropped transactions. But I assume that the transactions should start accumulate and I should observe some failed or dropped transactions after some time. But I couldn't find evidence (number of increasing threads, increasing memory etc) of this accumulation. In other words: where exactly are those "waiting" transactions are waiting? I checked "netstat -pantul": the number of connections is always 128. I checked the stack trace of java process in the generator: it stays fixed around 1000. The number of threads ("ps -eLf") of the generator is also not increasing.

Director output
java -jar httploadgenerator.jar director --ip 10.27.44.100 --load constantLoad_100tps.csv --lua teastore_browse.lua Here is the output.

Jan 03, 2022 10:03:35 AM tools.descartes.dlim.httploadgenerator.runner.Director executeDirector
WARNING: No power measurements
Jan 03, 2022 10:03:35 AM tools.descartes.dlim.httploadgenerator.runner.Director executeDirector
INFO: Load Generator Thread Count set to 128
Jan 03, 2022 10:03:35 AM tools.descartes.dlim.httploadgenerator.runner.Director executeDirector
INFO: URL connection timout set to 0 ms
Jan 03, 2022 10:03:35 AM tools.descartes.dlim.httploadgenerator.runner.Director executeDirector
INFO: Using Lua Script: teastore_browse.lua
Jan 03, 2022 10:03:35 AM tools.descartes.dlim.httploadgenerator.runner.Director process
INFO: Read 86401 Arrival Rate Tuples
Load Generator sent: ok
Jan 03, 2022 10:03:35 AM tools.descartes.dlim.httploadgenerator.runner.Director process
INFO: Arrival Rates sent to Load Generator(s).
Load Generator sent: ok
Jan 03, 2022 10:03:35 AM tools.descartes.dlim.httploadgenerator.runner.Director process
INFO: Thread Count sent to Load Generator(s): 128
Load Generator sent: ok
Load Generator sent: ok
Jan 03, 2022 10:03:35 AM tools.descartes.dlim.httploadgenerator.runner.Director process
INFO: Contents of script sent to Load Generator: teastore_browse.lua
Jan 03, 2022 10:03:35 AM tools.descartes.dlim.httploadgenerator.runner.Director process
INFO: Starting Load Generation
Beginning Run @1641193415722(03.01.2022;10:03:35722)
Target Time = 0.5; Load Intensity = 100.0; #Success = 14; #Failed = 0; #Dropped = 0
Target Time = 1.5; Load Intensity = 100.0; #Success = 184; #Failed = 0; #Dropped = 0
Target Time = 2.5; Load Intensity = 100.0; #Success = 101; #Failed = 0; #Dropped = 0
Target Time = 3.5; Load Intensity = 100.0; #Success = 81; #Failed = 0; #Dropped = 0
Target Time = 4.5; Load Intensity = 100.0; #Success = 67; #Failed = 0; #Dropped = 0
Target Time = 5.5; Load Intensity = 100.0; #Success = 55; #Failed = 0; #Dropped = 0
Target Time = 6.5; Load Intensity = 100.0; #Success = 26; #Failed = 0; #Dropped = 0
 ...
Target Time = 6586.5; Load Intensity = 100.0; #Success = 80; #Failed = 0; #Dropped = 0
Target Time = 6587.5; Load Intensity = 100.0; #Success = 113; #Failed = 0; #Dropped = 0
Target Time = 6588.5; Load Intensity = 100.0; #Success = 91; #Failed = 0; #Dropped = 0
Target Time = 6589.5; Load Intensity = 100.0; #Success = 62; #Failed = 0; #Dropped = 0
Target Time = 6590.5; Load Intensity = 100.0; #Success = 99; #Failed = 0; #Dropped = 0
Target Time = 6591.5; Load Intensity = 100.0; #Success = 75; #Failed = 0; #Dropped = 0
Target Time = 6592.5; Load Intensity = 100.0; #Success = 95; #Failed = 0; #Dropped = 0
Target Time = 6593.5; Load Intensity = 100.0; #Success = 101; #Failed = 0; #Dropped = 0
Target Time = 6594.5; Load Intensity = 100.0; #Success = 87; #Failed = 0; #Dropped = 0
Target Time = 6595.5; Load Intensity = 100.0; #Success = 80; #Failed = 0; #Dropped = 0
Target Time = 6596.5; Load Intensity = 100.0; #Success = 107; #Failed = 0; #Dropped = 0

Director output (visualized)
I've also visualized the previous output. "Waiting" refers to the cumulated sum of (load intensity-success-failed-dropped). As you see the successfull transactions oscillate around 100 but it is generally below zero. There is no failed or dropped transactions reported. So there should be some transactions waiting somewhere. And this "waiting" transactions are increasing linearly with time.

This is an image

Director Side

Generator Side
java -jar httploadgenerator.jar loadgenerator

constantLoad_100tps.csv

0.5,100
1.5,100
2.5,100
3.5,100
...
86397.5,100
86398.5,100
86399.5,100
86400.5,100

teastore_browse.lua
I've only changed prefix = "http://teastore.apps.company/tools.descartes.teastore.webui/"

teastore-webui deployment
Here is the output of oc get deployment/teastore-webui -o yaml:
Please note that I deliberately set CATALINA_OPTS=-Xmx300M, replicas=1, and cpu limit to 500m to reduce the capacity of the teastore-webui container.

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "719"
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"teastore-webui","namespace":"teastore"},"spec":{"replicas":2,"selector":{"matchLabels":{"app":"teastore","run":"teastore-webui"}},"template":{"metadata":{"labels":{"app":"teastore","run":"teastore-webui"}},"spec":{"containers":[{"env":[{"name":"USE_POD_IP","value":"true"},{"name":"REGISTRY_HOST","value":"teastore-registry"},{"name":"RABBITMQ_HOST","value":"teastore-kieker-rabbitmq"},{"name":"CATALINA_OPTS","value":"-Xmx500M"}],"image":"default-route-openshift-image-registry.apps.company/teastore/teastore-webui","name":"teastore-webui","ports":[{"containerPort":8080}],"resources":{"limits":{"cpu":"500m"}}}]}}}}
  creationTimestamp: "2021-07-25T17:54:56Z"
  generation: 796
  name: teastore-webui
  namespace: teastore
  resourceVersion: "65487249"
  selfLink: /apis/apps/v1/namespaces/teastore/deployments/teastore-webui
  uid: d8fa2d7d-673e-4e79-91ec-f7739c2a6a0a
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: teastore
      run: teastore-webui
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: teastore
        run: teastore-webui
    spec:
      containers:
      - env:
        - name: USE_POD_IP
          value: "true"
        - name: REGISTRY_HOST
          value: teastore-registry
        - name: RABBITMQ_HOST
          value: teastore-kieker-rabbitmq
        - name: CATALINA_OPTS
          value: -Xmx300M
        image: default-route-openshift-image-registry.apps.company/teastore/teastore-webui
        imagePullPolicy: Always
        name: teastore-webui
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          limits:
            cpu: 500m
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 1
  conditions:
  - lastTransitionTime: "2021-12-04T20:43:55Z"
    lastUpdateTime: "2021-12-04T20:43:55Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2021-07-25T17:54:56Z"
    lastUpdateTime: "2021-12-04T21:00:15Z"
    message: ReplicaSet "teastore-webui-6b5b98b79f" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 796
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1`

Versions

  • OpenShift 4.7 with CoreOS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant