Java JAR занял высокое использование ЦП и потребление памяти - PullRequest
0 голосов
/ 18 апреля 2019

Я использую файл jar в системе Ubuntu с 16 ГБ ОЗУ.Я использовал весеннюю загрузочную среду JPA при разработке приложения.Я заметил, что использование памяти и процессора продолжает расти после запуска приложения.

Что может быть причиной постоянного увеличения использования процессора и памяти?

Какие операции выполняет приложение -> Обновить текстовый файл с помощью

    File file = new File(file path);
    OutputStream os = new FileOutputStream(file.getAbsoluteFile());

и операция чтения с помощью

    FileInputStream inputStream = new FileInputStream(file);
    InputStreamResource resource = new InputStreamResource(inputStream);

, обновляющего файл с частотой не более одной минуты.

Я попытался запустить jar, а также развернуть файл war на сервере Tomcat в обоих случаях, когда он ведет себяТо же самое.

Основная цель - создать текстовый файл с прото-буфером.Я добавил

@Scheduled(fixedDelay = 60000)
@RequestMapping(value = "/test")
public String generateProtoBuf(){
...
}  

, поэтому каждую минуту этот метод будет запускать и обновлять текстовый файл.

Я выставляю другой API.

@RequestMapping(path = "/getProtoBuf", method = RequestMethod.GET)
public ResponseEntity<Resource> getProtoBuf() throws IOException {
...
}

этот API будет вызывать каждыйдважды в мин.размер файла будет меньше 1 МБ.

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

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Я бы порекомендовал вам найти ветку, загружающую процессор;Вы можете сделать это с помощью Arthas инструмента с открытым исходным кодом от Alibaba

0 голосов
/ 18 апреля 2019

В вашем случае создание и (автоматически) сбор мусора больших объектов может привести к более высокой загрузке процессора, чем работа с менее крупными объектами. Кроме того, при плохой производительности ввода-вывода он также может замедлить higher использование вашего ЦП при тяжелых операциях ввода-вывода.

Но в большинстве случаев неиспользуемый код будет вызывать высокую загрузку процессора. Проверьте свой код или найдите узкие места с помощью профилировщика Java. Я могу рекомендовать YourKit , так как он бесплатный и простой в использовании. Но есть много других инструментов, которые достигают того же результата. При запуске приложения с помощью профилировщика вы увидите функции / методы, которые вызывают высокую загрузку ЦП.

...