繁体   English   中英

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

[英]Java JAR took High CPU Usage and Memory consumption

我在具有16 GB RAM的ubuntu系统上运行jar文件。 我在开发应用程序时使用了spring boot framework,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%。

在您的情况下,创建和(自动)垃圾收集大对象可以导致更高的CPU使用率,而不是使用较少的大对象。 此外,有一个糟糕的IO性能时,它也可以减缓higher CPU使用率,有沉重IO操作的时候。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM