Как найти нагрузку на процессор и загрузку процесса приложения с помощью Java? - PullRequest
1 голос
/ 01 ноября 2011

Я хотел бы развернуть веб-приложение видеопроигрывателя на сервере Tomcat и выяснить загрузку ЦП для каждого запроса пользователя, чтобы ограничить количество пользователей.Я могу узнать нагрузку на процессор, однако я не уверен, как рассчитать нагрузку на процессор для каждого запроса.Может кто-нибудь сообщить мне, если у нас есть какие-либо API с открытым исходным кодом, или любые другие идеи будут высоко оценены?

Я разработал веб-приложение с использованием Adobe Flex и развернул его на сервере Apache Tomcat.

1 Ответ

0 голосов
/ 29 августа 2013

Я бы попробовал следующее:

В веб-приложении вы можете рассчитать использование ЦП для каждого запроса (потока), вычитая общее время потока ЦП при вводе сервлета в общее время потока ЦП при выходе из сервлета.

Примерно так:

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));
  }
}

Но учтите, что если бизнес-логика, выполняемая в сервлете, недостаточно тяжелая, из-за принципа неопределенности вы можете получить странные результаты.

...