2012-08-24 39 views
2

我的web應用程序在tomcat服務器上工作,但在som時間之後,內存使用量開始增長並增長,直到服務器停機。tomcat中的內存泄露

這種情況只發生在現場,當我嘗試在本地重現這種情況時,並沒有發生。我嘗試使用JProfiler進行遠程配置文件,並在服務器關閉之前發現了很多字節[]。服務器開始佔用越來越多的內存後,它會下降2-3分鐘,所以我不能在代碼中看到哪些項目使用byte [],因爲Heap漫步需要更多時間(Web應用程序非常大)。

我將不勝感激任何幫助或建議。

+1

將'-XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath =「/ tmp」'添加到您的'java'參數中,等待轉儲並導入JProfiler –

回答

0

建議:在您的類中放入少量內存使用量轉儲,其中包含HashMap,Vector(或這些集合的非同步版本)的緩存存儲字段,通常是那些保留引用。比我會把一個加url,這將轉儲我的變量,如:

Runtime.getRuntime()。callMemoryFunctionForgotName():使用的內存是270mb ...例如。 - 在這裏你應該看到WHEN正在增長,隨着時間的推移,有一些行動,其中一個已經泄露。

當偵測到action9的link43會產生內存泄漏不是很容易:)
  • 只需添加幾hashMap.count()或大小(
    • )(忘了這也笑)到LOGG,比你會看到20個藏品中的哪一個正在增加而不是減少。希望您有訪問服務器日誌的權限。

    所以我會分兩步做。