Я бы попробовал следующее:
В веб-приложении вы можете рассчитать использование ЦП для каждого запроса (потока), вычитая общее время потока ЦП при вводе сервлета в общее время потока ЦП при выходе из сервлета.
Примерно так:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ...
{
long iniCpuTime, endCpuTime, iniTs, endTs, threadId;
ThreadMXBean mxBean = ManagementFactory.getThreadMXBean();
if (mxBean.isThreadCpuTimeSupported()) {
threadId = Thread.currentThread().getId();
iniTs = System.currentTimeMillis();
iniCpuTime = mxBean.getThreadCpuTime(threadId);
}
// Business logic
....
if (mxBean.isThreadCpuTimeSupported()) {
endTs = System.currentTimeMillis();
endCpuTime = mxBean.getThreadCpuTime(threadId);
float cpu = (endCpuTime-iniCpuTime)/(float)((endTs-iniTs)*1000000);
System.out.println("Request CPU usage (%): "+(cpu*100));
}
}
Но учтите, что если бизнес-логика, выполняемая в сервлете, недостаточно тяжелая, из-за принципа неопределенности вы можете получить странные результаты.