2012-09-04 33 views
2

我正在尋找運行時解決方案來查找Web應用程序的內存使用情況。 我提供了一個框架,其中包括不同的客戶端部署幾個Web應用程序的Tomcat。有時他們中的一個會消耗大量的內存,從而粉碎整個過程。 我想有一個經理的Web應用程序(如tomcat的經理),將檢測到這一點,也許取消部署\重新部署有問題的Web應用程序。 另一個解決方案(我認爲這不可能)是分別爲每個Web應用程序分配一部分堆。如何在tomcat中管理webapps足跡?

要求客戶更改現有的網絡應用程序是可能的,但我寧願不要。

有什麼想法?

+1

爲什麼不在一個單獨的tomcat實例中運行每一個,以使流氓應用程序不會影響其他人?你可以運行一個Apache作爲這些單獨的tomcat實例的代理。 – Vikdor

+0

在我的tomcat上有6個webapps,我們無法消化6個新進程的開銷。 – iGili

+0

然後部署2個Tomcat與3個webapps,或3個Tomcat與2個webapps或其他組合。無論如何,情況會更好。 –

回答

3

您無法攔截每個webapp中的分配,也沒有垃圾回收器的回調,因此您無法知道每個webapp使用多少內存。我認爲你最好部署多個Tomcat實例,這樣一個「流氓」web應用程序不會殺死所有其他應用程序(每個web應用程序最多一個Tomcat,但是也可以創建組來限制實例的數量,具體取決於批評情況你的不同應用程序)。

+0

不幸的是,我認爲「你不能」是正確的答案...... – iGili

1

Tomact運行作爲單一java程序,所以很難分配每個應用程序的內存。您只能增加MaxPermSize,-Xmx

您可以檢查leak detector for Tomcat,但由於您無法更改其他應用程序的源代碼,所以它幾乎無法幫助您。

+0

我可以改變代碼(我只是不想......),泄漏檢測器不會解決這個問題,因爲它是靜態的,我需要一個運行時的解決方案,2.它正在查看燙髮內存,並且我很短堆。 – iGili

+0

然後我猜你可以使用tomcat的[Jprofiler](http://www.ej-technologies.com/products/jprofiler/java-profiler-JEE.html)和修復問題來進行性能分析。如果你認爲這是很長的一段時間,然後在固定時間後重新啓動tomcat :) –