Statistical Profiling Kotlin (on production server)

Our server software (web with mongoDB) is written in kotlin.

I would like to do statistical profiling to find bottlenecks.

Can you recommend me tools?

New Relic and AppDynamics are expensive.

Maybe there are simpler solutions?

Zipkin with spring boot could be an option
176 releases seems stable and trustworthy
Zipkin GitHub

There’s a long list of different APM solutions.

The direct alternatives to New Relic and AppDynamics are tools like DripStat, Instana, and SignalFx. These are based on the instrumentation agents so usually you don’t have to integrate anything into your application.

On the other hand, Zipkin or Jaeger might be a good alternative. However, you might need to use their client API to send the traces to the collector. There are java agents for these tools available, but it depends on your application if you can use them or not.

2 Likes

Thank you for this long list. Unfortunately I don’t have the time to test all items of the list.

Which one of them are open source and can run on-prem?

Zipkin or Jaeger are good option to look at.
Also javamelody for crafting out the dashboards with telemetry data.

Do Zipkin or Jaeger support Statistical Profiling?

Zipkin and Jaeger are for tracing rather. And you can add the figures to traces to see, what part of the request was slower.
To display stats, you’d need to process the traces yourself and probably make a dashboard to visualize the data you’re are interested in. Graphana might be a good fit for that.

Thank you very much for your kind help.

How does “you can add the figures to traces” work?

For me tracing know only the http requests. It does not know about method calls.

In my case I am interested in the method calls inside the http requests.

With Zipkin & Jaeger kind of systems, AFAIK, you can use their API to report the custom “spans”. Meaning, you would have to integrate it in your code, which isn’t always the preferred way for some users, but it is possible.

Custom “spans”. I think I could implement this. But it feels like being on the wrong track.

How do other people do statistical profiling in the context of kubernetes?