我有一個Web應用程序,它記錄來自各個門戶的數據。 這是一個使用mongo db作爲數據庫服務器的java應用程序。 我的應用程序速度不夠快,但是我面臨的問題是Tomcat在每個應用程序服務器上都吃掉了太多Ram內存。我必須每隔兩個小時重新啓動一次tomcat以釋放此內存,否則它將無法響應。我運行netstat -n |每臺服務器上的wc -l和每臺服務器上的平均輸出量爲1000。 我在我的servlet和mongo dao中引入了System.gc以強制GC釋放內存,但它將CPU使用率提高到了100%。 請問你可以建議任何方式如何解決這個內存問題。JVM在服務器中使用的內存太多
0
A
回答
0
我使用以下方法在Java中查找內存泄漏。我已經使用jProfiler獲得了巨大的成功,但我相信任何具有圖形功能的專業工具(差異圖形更易於分析)都可以工作。
啓動應用程序並等到它變爲「穩定」狀態,此時所有初始化完成並且應用程序處於空閒狀態。 運行懷疑會產生內存泄漏的操作幾次,以允許任何緩存,DB相關的初始化發生。 運行GC並記錄內存快照。 再次運行該操作。取決於操作的複雜性和處理的數據的大小,操作可能需要運行多次或多次。 運行GC並記錄內存快照。 爲2張快照運行差異並分析它。 基本上,分析應該從最大的正面差異開始,比如說對象類型,並找出導致這些額外對象粘在內存中的原因。
對於在多個線程中處理請求的Web應用程序分析變得更加複雜,但仍然適用一般方法。
我做了很多專門用於減少應用程序內存佔用的項目,這種通用方法與一些應用程序特定的調整和技巧一直運行良好。
相關問題
- 1. 瘦服務器佔用太多的內存(導軌)
- 2. 服務需要太多內存
- 3. VNC服務器使用多少內存?
- 4. Java遊戲服務器佔用太多內存!
- 5. 在C/NDK中使用太多內存?
- 6. 仿真器使用太多內存
- 7. 在android中使用太多內存的服務導致強制停止
- 8. 如何在運行時檢查服務器的「JVM/CPU /內存」?
- 9. Solr使用太多內存
- 10. SBT使用太多內存
- 11. PHP使用太多內存
- 12. JVM和內存使用 - JRun服務器沒有使用完整的PSPermGen分配?
- 13. SSRS存儲過程(定時?)。使用太多鏈接服務器?
- 14. JBOSS服務器日誌在服務器中佔用更多內存
- 15. 內存錯誤JVM啓動的Minecraft服務器
- 16. 使用Redis的與許多密鑰而不是在服務器上(PHP)太多的內存
- 17. 在多於一臺服務器的內存中緩存圖像
- 18. iPhone:多少內存使用量太多?
- 19. Kubernetes莢使用太多內存在較大的機器
- 20. 使用太多內存的Hibernate關聯
- 21. curl_multi_exec()使用太多的內存
- 22. Scribble使用太多的內存?
- 23. UIimageView動畫使用的內存太多
- 24. MFMailComposeViewController使用太多的內存
- 25. SQLServer使用太多的內存
- 26. itertools產品使用太多的內存
- 27. 使用太多內存的OpenCL程序
- 28. SQL Server CE使用太多的內存
- 29. MongoDB使用的內存太多
- 30. 在瀏覽器中緩存對象時,多少內存太多?
在特定時間創建轉儲並分析它。 – Kick
我以30分鐘的時間間隔創建了堆轉儲,但始終沒有增加順序的某些對象的確定模式。我發現有很多創建的字符串對象。 – viren
您是否看到內存使用量接近飽和且GC啓動的證據?與此同時,「netstat -n | wc -l」獲得1000個聽起來很多。在我的機器上,我回到了100左右。難道連接沒有正確關閉? – neurite