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