簡體   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