Java Web App имеет высокий коэффициент использования процессора
Я новичок здесь, и я не очень хорош в потреблении процессора и многопоточности. Но мне было интересно, почему мое веб-приложение потребляет слишком много ресурсов процессора? Моя программа обновляет значения в фоновом режиме, чтобы пользователям не приходилось ждать обработки данных, а получать их нужно только по запросу. Процессы обновления являются запланированными задачами с использованием библиотеки executor, которая запускает 8 потоков каждые 5 секунд для обновления моих данных.
Теперь мне интересно, почему мое приложение потребляет слишком много ресурсов процессора. Это из-за плохого кода или из-за низкой спецификации сервера? (2 ядра с 2 базами данных и 1 основное приложение, запущенное с моим веб-приложением)
Большое спасибо за Вашу помощь.
2 ответа
Паула,
Кто-то здесь не может сказать, является ли проблема в том, что ваш код неэффективен или сервер не соответствует спецификации. Это может быть и то, и другое, или что-то еще.
Вам нужно будет провести собственное исследование:
Профилируйте код. Это позволит вам определить, где ваше веб-приложение проводит большую часть своего времени.
Посмотрите на статистику уровня ОС, которая доступна для вас. Это может сказать вам, что реальная проблема - использование памяти или дисковый ввод-вывод.
Посмотрите на производительность внутренней базы данных. Это использует много процессора?
После того как вы определили области, в которых используется процессор, вам необходимо выяснить, какова реальная причина проблемы, и решить, как ее устранить. И после того, как вы реализовали потенциальное исправление, вы можете повторно запустить профилирование и т. Д., Чтобы увидеть, что оно помогло.
Вам нужно профилировать свое приложение, чтобы узнать, где процессор фактически потребляется. В Java встроены некоторые базовые методы профилирования, или, если ваша среда это позволяет, вы можете запустить встроенный компилятор "hprof":
java -Xrunhprof...
(На самом деле, вы, вероятно, хотите установить некоторые дополнительные параметры: Google "hprof" для более подробной информации.)
Последнее проще в принципе, но я упоминаю о возможности добавления вашей собственной процедуры профилирования, потому что она более гибкая, и вы можете сделать это, например, в среде сервлетов, где запуск другого профилировщика является более громоздким.