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

How do I visualize the histogram? #187

Open
swaranga-netflix opened this issue Mar 17, 2023 · 8 comments
Open

How do I visualize the histogram? #187

swaranga-netflix opened this issue Mar 17, 2023 · 8 comments

Comments

@swaranga-netflix
Copy link

Running a load test from the commandline generates a report like:

{
  "report": {
    "beginInstant": "2023-03-17T02:19:35.460735978Z",
    "completeInstant": "2023-03-17T02:20:35.723580110Z",
    "recordingDuration": 59927,
    "availableProcessors": 4,
    "averageCPUPercent": 18.12186327810192,
    "requestRate": 99.99645797985681,
    "responseRate": 99.70362162675781,
    "sentBytesRate": 19841.020703724804,
    "receivedBytesRate": 564521.9056507027,
    "failures": 0,
    "1xx": 0,
    "2xx": 5975,
    "3xx": 0,
    "4xx": 0,
    "5xx": 0,
    "histogram": "1679019575.307,192.168.1.1,HISTFAAAAup42kVTzY7kNBD2VqprPF6P1+M2GctEWa83m4mi0GpaCDggYA8IcUZIcOIBVhw4ckW8Ac+zD8FbcETiwpHP6UXkz66qrz47rq+G334/KsU/q+vVvRv+xOfun6+/V1/8dfW8/fUJ/UKKDnRP+NxRB4PoBm+bqOvNHTdI1yCwRbWpIiZmxc0E5HZPEWbqmp9Y2BoyLFqENByGuROB6Yg0HhGjNZzCYgEgK1ZbLbaN2ihtDCDakm0za4zVLMZ4yzZ72NqIMyY744y1LuiovbfWJBPJRpPEpdD72HvX9yH12VkbbaohjsGGPg6pjzml3oUx+BxjDSnkGgIAQ9/XMXlfy5JqTsO8rGWo8zQP/bDWYY1zfxq3MmU31iWVskzLVOs6n8u81XG7XOb80Wlcz+sGx3retvP22TZP45e1XJa61vOlXMZ0ms7nqZTTPF/On6+n5eNPSy5pKYu7bOWU57VWpM+XU4hLmoZxLHOZwmkMQ/IVW/UlpSHkMPQxzANG/Gu0Procs8dB+pzH4GKIzjudfbLei9OImOI9OwnBOG9D8FbasRkces9uBwX22mgyxvS6Vc8YRkWsRBdEO20cozIhMIqqPYoSGABplwZAiETjYtTQEIgY1TVevNZKjOWWpowoJEIvjR7pgAOrnBY24CEBhJs0VNuG1tRkBm6AiPEoA0cTom5qhdKwLFOTmWrSsx0EylAxsAjvEuamV0U30nS6yxwpjU+6Xeu7dOUq/ybQHU9QcpM3XZMRbW5WVxSrRt3EDsJ3HcJg+98WwW7QD4q14sPeZ3S791Trl4d9G//R7oG9xfaOA8MBKc/o+j7sS95iTkf06jNMj/QCv3hHH2D+DX/XuvaRv0VIwUEHfiB6heB7gLxPT+E/4n5Jz3euDugr8107jXsMz/menvKH9BXA9wj/TYjfYJHXMBX9QO1Ub+kThAGmR+Qe6I9D+49XSHr7BMDXWO5H+qllvgDq2Lix5ZeYPYLhDf0LamtC/A==\n"
  },
  "config": {
    "threads": 25,
    "warmupIterationsPerThread": 0,
    "iterationsPerThread": 1,
    "runFor": 60,
    "usersPerThread": 1,
    "channelsPerUser": 128,
    "resourceRate": 100,
    "rateRampUpPeriod": 0,
    "scheme": "http",
    "host": "metacat.dyntest.netflix.net",
    "port": 7001,
    "transport": {
      "type": "http/1.1",
      "selectors": 1
    },
    "resource": {
      "method": "GET",
      "path": "...",
      "requestLength": 0,
      "responseLength": 0,
      "requestHeaders": {},
      "resources": []
    },
    "maxRequestsQueued": 1024,
    "connectBlocking": true,
    "connectTimeout": 5000,
    "idleTimeout": 15000
  }
}

How do I visualize the histogram data?

@olamy
Copy link
Member

olamy commented Mar 17, 2023

Can you explain how you are running via commandline?

@swaranga-netflix
Copy link
Author

Running it via the uber jar:

java -jar jetty-load-generator-starter-3.1.4-uber.jar \
  --host host --port port \
  --stats-file /tmp/stats.log \
  --display-stats true \
  --resource-json-path resource.json \
  -rt 1 -rtu m -t 25 -rr 100

@olamy
Copy link
Member

olamy commented Mar 17, 2023

uhm. actually I guess you get something such

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.

because the uber jar doesn't include any slf4j impl whereas we use slf4j as logging api and so to display the histogram...
As a workaround you can download manually slf4-simple from here https://repo.maven.apache.org/maven2/org/slf4j/slf4j-simple/2.0.6/slf4j-simple-2.0.6.jar
And start the uber jar as is (note you cannot use the option -jar as it is not possible to use more than one jar with this option) :

java -cp slf4j-simple-2.0.6.jar:jetty-load-generator-starter-3.1.4-uber.jar org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter \
  --host host --port port \
  --stats-file /tmp/stats.log \
  --display-stats true \
  --resource-json-path resource.json \
  -rt 1 -rtu m -t 25 -rr 100

The output should be something such:

[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - load generator config: Config[t=2,i=-1,u=1,c=128,r=2,rf=10s,https://host:port]
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - load generation begin
[main] WARN org.eclipse.jetty.util.ssl.SslContextFactory.config - Trusting all certificates configured for Client@44a3ec6b[provider=null,keyStore=null,trustStore=null]
[main] WARN org.eclipse.jetty.util.ssl.SslContextFactory.config - No Client EndPointIdentificationAlgorithm configured for Client@44a3ec6b[provider=null,keyStore=null,trustStore=null]
[LoadGenerator@15bfd87-sender-1] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - load generation complete
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - 
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - ----------------------------------------------------
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - -------------  Load Generator Report  --------------
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - ----------------------------------------------------
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - https://host:443 over http/1.1
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - resource tree     : 1 resource(s)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - begin date time   : 2023-03-17 16:15:47 AEST
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - complete date time: 2023-03-17 16:16:00 AEST
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - recording time    : 11.311 s
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - average cpu load  : 20.678/1600
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - 
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - histogram:
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  143 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  286 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  429 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  572 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  716 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  859 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -       @               _  1,002 ms (2, 11.11%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -                    @  _  1,145 ms (7, 38.89%) ^50%
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -       @               _  1,289 ms (2, 11.11%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  1,432 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -    @                  _  1,575 ms (1, 5.56%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -    @                  _  1,718 ms (1, 5.56%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  1,862 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  2,005 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -    @                  _  2,148 ms (1, 5.56%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -    @                  _  2,291 ms (1, 5.56%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -    @                  _  2,435 ms (1, 5.56%) ^85%
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - @                     _  2,578 ms (0, 0.00%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -    @                  _  2,721 ms (1, 5.56%)
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter -    @                  _  2,864 ms (1, 5.56%) ^95% ^99% ^99.9%
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - response times: 18 samples | min/avg/50th%/99th%/max = 924/1,511/1,145/2,864/2,864 ms
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - 
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - nominal resource rate (resources/s): 2.000
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - nominal request rate (requests/s)  : 2.000
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - request rate (requests/s)          : 1.999
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - response rate (responses/s)        : 1.591
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - send rate (bytes/s)                : 2716.275
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - receive rate (bytes/s)             : 379568.426
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - failures          : 0
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - response 1xx group: 0
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - response 2xx group: 18
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - response 3xx group: 0
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - response 4xx group: 0
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - response 5xx group: 0
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - ----------------------------------------------------
[main] INFO org.mortbay.jetty.load.generator.starter.LoadGeneratorStarter - load generator report saved to: /tmp/stats.log

you can probably customise the output by providing a file simplelogger.properties via -cp option see documentation here https://www.slf4j.org/api/org/slf4j/simple/SimpleLogger.html

@sbordet I guess we should add one slf4j impl in the uber jar to make easy to use.
WDYT? Which one?

@sbordet
Copy link
Member

sbordet commented Mar 21, 2023

I guess we should add one slf4j impl in the uber jar to make easy to use.

I'm not sure... If we add one, then those that want to use a different one would not be able to, right?

@olamy
Copy link
Member

olamy commented Mar 21, 2023

I guess we should add one slf4j impl in the uber jar to make easy to use.

I'm not sure... If we add one, then those that want to use a different one would not be able to, right?

Oh yes definitely that will be the problem.. 😀
I will at least change the README to explain how to have logging

@olamy
Copy link
Member

olamy commented Mar 21, 2023

@swaranga-netflix btw did my comment answer your question?

@swaranga-netflix
Copy link
Author

I will let you take the final call, but as a recent user, I expected the Uber jar to be batteries included and that included the logging stuff. I would not want to have an additional logger jar be a requirement. I think you can offer a system property that points to a logging properties file if I want to customize the format but otherwise taking a stance on the logging implementation and a default format seems pretty reasonable to me.

@swaranga-netflix
Copy link
Author

@olamy - yes it did. Thank you.

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

3 participants