Java JAR占用了高CPU使用率和内存消耗

问题描述 投票:0回答:2

我在具有16 GB RAM的ubuntu系统上运行一个jar文件。我在开发应用程序时使用了Spring引导框架,JPA。我观察到应用程序启动后内存和CPU使用率不断增加。一致性可能导致CPU使用率和内存增加的原因是什么?

什么是操作通过应用程序 - >更新文本文件

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

和阅读操作

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

以一分钟的频率更新文件。

我尝试运行jar以及在tomcat服务器上部署war文件,在这两种情况下它的行为相同。

主要内容是创建原始缓冲区文本文件。我已经添加了

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

所以每分钟这个方法都会触发并更新文本文件。

我暴露了另一个API。

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

这个API会在每分钟调用两次。文件大小将小于1 MB。

在最初几个小时,应用程序正常运行,但在几小时后,当CPU使用率增加15%时,它将急剧增加并触及100%。

java spring-boot ubuntu protocol-buffers cpu-usage
2个回答
0
投票

我建议你找一个占用CPU的线程;你可以用阿里巴巴的Arthas开源工具做到这一点


0
投票

在您的情况下,创建和(自动)垃圾收集大对象可以导致更高的CPU使用率,而不是使用较少的大对象。此外,当I-O性能较差时,如果I-O操作繁重,它还会降低higher的CPU使用率。

但大多数无法使用的代码会导致高CPU使用率。检查您的代码,或找到Java Profiler的瓶颈。我可以推荐YourKit,因为它免费且易于使用。但是还有许多其他工具可以达到相同的效果。使用分析器运行应用程序时,您将看到导致高CPU使用率的函数/方法。

© www.soinside.com 2019 - 2024. All rights reserved.