[英]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.