What you need is a PHP code profiler.
This thing analyzes code and shows slow parts. Below is a typical callgraph and call diagram for a sample Magento 2 page:
By analyzing a callgraph you can find a slow code part.
Magento 2 comes with a built-in profiler but it's functionality is limited. You can enable Magento 2 profiler with a following CLI command:
bin/magento dev:profiler:enable html
Then disable it when a need be:
bin/magento dev:profiler:disable
You can try an online profiler (tideways, new relic or similar, just google for them), they are better than a built-in one.
Also, from my experience providing optimization service, I came across lots of slow Magento 2 sites. In most of the cases it's some 3rd-party plugin that slows the site down.
What you can try is a 3rd-party extension audit. Try turning off all extensions and see if it makes a speed difference. If it does - turn them on one by one and see which module(s) breaks performance.
Last but not least, try switching to a Luma theme. If it speeds thing up - then you know your theme is a problem and it needs to be further investigated.
Good luck!