簡體   English   中英

限制Java CPU和內存使用率

[英]Limit Java CPU and Memory usage

我想創建一個Java應用程序,該應用程序可以限制每個線程的CPU內存使用率。 假設它是一個Rest API,並且在每個請求和響應之間都有一個過程。 我想限制他們。 是否可以通過代碼動態地做到這一點?

下一個相關的問題是,如果我有一台分布式計算機,並且想再次對每個進程應用此CPU和內存限制,該怎么辦?

也許您可以推薦一些與此高級主題相關的書籍或博客。

謝謝

您不能僅在Java層上執行此操作,您需要深入研究虛擬機。

我建議使用一些簡單的虛擬機(如JamVM)的源代碼,並嘗試構建以了解它。 在某些情況下,設置限制的可能性比整體性能更重要。

OpenJDK將為您提供相當近期的代碼庫,但顯然要復雜得多。 可可可能介於兩者之間。

或者,您可以嘗試在並行運行的多個Java虛擬機之間對應用程序進行分區。 當然,不是每個應用程序都可以通過這種方式進行分區,但是可以編寫專用的應用程序。 如果要采用這種方式,請尋找JPPF之類的現有項目。

您可以使用JVM(Java虛擬機)參數來部分實現它-您可以設置線程的堆棧大小和JVM的堆大小。 但是不可能限制每個線程的內存。 有沒有辦法在Java中的每個線程上設置最大內存使用限制?

也無法限制CPU使用率限制Java應用程序的內存和cpu使用率

您可以通過Thread類中的setPriority()在Java程序中設置線程優先級-但這很糟糕而且實際上沒有效果。

您還可以生成現在作為單獨進程(不是單獨線程)線程化的事物-具有固定的堆大小和自定義進程優先級(CPU使用率)。 但是您必須使多進程通信有效,而這需要一些知識(不要自己編寫,請使用一些已經經過測試的消息系統)。 該解決方案可能需要對當前代碼進行巨大的更改。

以下是個人意見

每當您有需要通過某種魔術(手動或通過代碼)設置優先級的應用程序時,應用程序體系結構就有99%的機會被設計破壞。

但為什么?

好吧,使JVM的人們花費了數年時間來開發最有效的線程管理解決方案。 您應該承認JVM更了解如何處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM