2011-12-19 252 views
5

我正在寫我打算利用彈性魔豆亞馬遜AWS部署一個Java servlet分配爲Tomcat Java堆。我的測試表明,使用Beanstalk使用的股票Tomcat AMI的Small EC2實例可以很好地運行。在EC2實例

我試圖找出如何合理分配Java堆空間,這個配置。一個小實例有1.7 GB的內存,所以我認爲一個1024MB的堆可以很好地工作。我意識到,即使這個實例唯一的「真正」目的是運行Tomcat,其他事情也需要內存。而且我也知道,標準的Sun/Oracle JVM實際上並不工作的地方有很多堆。

這是分配內存的合理方式嗎?我應該多用還是少用?我可以使用哪些工具來幫助確定最佳配置?

回答

2

1024似乎確定,也許有點多。

我不完全相信你的servlet在做什麼,而是給你一個想法,我有大約1000用戶日常2個小EC2實例中運行的電子商務應用軟件。 Tomcat負載通過mod_jk進行分配。

我沒有調整JVM在所有並保持默認設置。我也使用兵馬俑分佈式對象緩存,並且該過程似乎佔用了大部分內存。

你部署在基於Linux的操作系統或Windows? IMO,Linux在管理可用內存方面做得更好。

至於工具,我建議將應用程序部署的是一個小的EC2實例和使用像JMeter的工具進行壓力測試的應用程序。在壓力測試期間,您可以打開頂級實用程序(假設您的應用程序在Linux上並安裝了頂級)。

嘗試通過看它有多少負載處理打破你的應用程序。這就是ec2的美妙之處,您可以在幾分鐘內設置一個測試環境,然後立即丟棄它。

+0

感謝您的輸入。 我不會詳細介紹我們的應用程序。它允許用戶查看有關不同主題的信息,然後可能向他們添加更多信息。有關這些主題的一些信息是從數據庫中動態生成的,而其中大部分是靜態數據,我們從啓動時從文件中讀取並保存在我們自己的堆中的數據結構中。總而言之,這是大約250-300 MB的數據。我猜測,當我們真正運行時,我們每天會有幾萬個用戶。 – 2011-12-20 21:55:31

+0

在我以前的AWS項目上,我試圖控制一切。對於這個項目,我決定我需要花更多時間在「真正」的應用程序上,以及如何推銷它,而不是簡單的IT工作,所以我只是使用股票Beanstalk。這意味着使用他們的Linux的股票AMI和Elastic Load Balancer。有什麼理由你爲什麼使用mod_jk來分配負載而不是ELB? 因此,爲什麼你認爲1024有點太多了?這爲其他任何事情留下了700MB,這實際上不過是標準操作系統任務。我正確看着這個嗎? – 2011-12-20 21:55:52

+0

@SanderSmith我仍在使用ELB,但我正在使用它來平衡2個小型Apache Web服務器實例。然後使用mod_jk從我的apache web服務器實例分發負載到我的tomcat實例。 Apache更擅長服務靜態資源並更好地處理SSL,這就是爲什麼我使用它們。我想你能做的最好的事情就是測試負載並從那裏做出決定。如果您的應用程序預計每天會接收10k用戶,那麼無論您如何調整JVM,我都不認爲一個小的ec2實例就足夠了 – 2011-12-20 23:58:07

0

檢查newrelic for java以確定您的堆使用模式。