I can share a result of our investigation.
The poor performance of Cucumber Test Result Plugin caused by the logic of displaying test results.
Each time when users are visiting Cucumber Test Result page, Cucumber plugin loads previous build results (for calculating age of failed tests).
In case if current build is success plugin load only one previous result, but in case if a build is failed Cucumber plugin will load previous recursively for calculating a Scenario fail age.
This behavior has issues:
1. Method getResult() is synchronized (This mean that only one user can load report for one job).
2. Cucumber plugin is trying to cache test result in WeakReference class field.
3. Calculating of fail age has not optimized algorithm. Cucumber plugin calculates fail age separately for each scenario. That's mean that for 10 failed scenarios in one build, the plugin will try to open (or read from a cached field) the XML results 10 times.
You can see here screenshot with visual VM. When I tried to open a report with 10 failed scenarios in a row Cucumber Plugin is used ~200mb and ~20% of CPU for GC. (Totally we have 868 scenarios)