2011-05-13 403 views
2

嗨 我想製作一個使用java和tomcat服務器的網站。 該網站將爲每個用戶設置其服務器上所有進程的cpu和內存限制。例如,對於每個用戶%3 cpu和100mb內存限制。如何在java中設置cpu和內存限制?

我該怎麼做? 謝謝

+0

可以通過給每個用戶一個內存限制,讓他們擁有自己的tomcat進程,但這不會限制CPU使用率。 – 2011-05-13 17:14:24

+1

通常,限制CPU是與應用程序對應的OS設置。我認爲操作系統上的軟件總是儘可能多地使用處理能力。我從來沒有聽說過Java能夠限制它自己的用法。看看你的tomcat設置或操作系統設置將是我的第一個猜測。 – 2011-05-13 20:20:56

+0

我一直在尋找這個近2年。到目前爲止我還沒有找到一個好的解決方案。我甚至問過如何在JVM中實現一個JVM,但是已經放棄了它的項目。所以,我會讓你的問題最喜歡:) – mschonaker 2011-05-17 19:22:18

回答

1

這是不可能的一個Tomcat進程。您需要產生多個子進程,每個進程都有自己的(-Xmx100m或OS特定的內存配額)和OS特定的設置來控制CPU配額。

根據您的用戶可能變得多麼惡劣,您還可能會限制可用文件描述符的數量,端口範圍,磁盤配額等。最後,可能需要將每個用戶的進程放入虛擬機和/或監獄。

0

在Java中沒有可用於強制限制線程資源使用率的機制。唯一可以做到這一點的方法是讓底層操作系統執行此操作,這很可能會要求您爲每個限制生成一個單獨的JVM,並且它不會跨平臺移植。

請注意,您可以對函數調用(使用Executor)設置超時限制,並且大部分操作都會中斷。這對你來說可能夠好了。如果您需要更多,則需要操作系統介入。