我有兩個Java程序。在我的電腦上,其中一個使用9MB的RAM,另一個使用77MB。但是當我將它們上傳到服務器時,相同的程序使用382MB和186MB!有沒有辦法阻止這種情況發生?爲什麼Java在我的Linux服務器上使用更多內存?
回答
如何衡量每種情況下的內存使用情況?不同的操作系統對於「內存使用情況」有不同的概念。
由於增加了指針(Java引用的參數)大小,64位系統需要比32位系統更多的內存。您在臺式機上使用32位操作系統和JVM嗎?
您是否使用不同的JVM選項?中等活動的Java應用程序通常最終會使用
-Xmx
選項允許的所有內存,從而最大限度地減少垃圾收集所花費的CPU時間。此外,默認的最大堆空間是根據可用的物理內存來確定的 - 如果服務器有更多的內存,那麼Java應用程序也必然會使用更多的內存。服務器JVM(請參閱
-server
JVM選項)具有不同的設置並優於內存使用情況下的性能。-server
選項是64位系統上的默認選項。您是否完全確定這兩種情況下的應用程序負載是相同的?
應用程序在大塊中分配虛擬內存以提高性能和效率是很常見的。沒有人會因爲沒有效果而不願意優化這些東西。如果你實際上沒有問題,沒有什麼可以解決的。
虛擬內存不是稀缺資源。試圖減少vm的消耗是浪費精力。
這取決於你是否有足夠的磁盤空間 - 如果你的服務器資源有限,可能值得減少一點。 – Chii
@Chii:我完全不理解連接。永遠不會映射到駐留頁的虛擬內存不會佔用磁盤空間。 –
@Chii不,真的,虛擬內存只是數字。有很多數字。服務器可能對其他資源有限制,但它可以擁有儘可能多的數字。 –
你是如何測量這些數字的?
在Linux上比較Windows任務管理器和ps(1)的數量是徒勞的,因爲它們的計算方式不同。例如,共享庫和共享內存在兩個平臺上的屬性都不相同。內存管理也完全不同。
另一方面,如果您指的是通過Runtime
(或類似)從您的應用程序中收集的數字,那麼您必須查看JVM是如何以什麼參數啓動的。最重要的是參數-Xmx
和-Xms
,但您可以在java
或javaw
的文檔中查找其他幾個人。
點1相關:
How to measure actual memory usage of an application or process?
除非你明確地設置(例如命令行參數,像-Xmx128m)時,JVM depends on the amount of RAM available的默認最大堆大小。
- 1. 爲什麼jsvc在服務器中佔用更多內存?
- 2. Linux服務器用完java內存
- 3. 爲什麼我的Pentaho服務器在Linux上運行緩慢?
- 4. 爲什麼客戶端使用更多內存與不同的服務器?
- 5. RethinkDB:爲什麼rethinkdb服務使用這麼多內存?
- 6. 爲什麼java程序使用更多的內存比預期
- 7. 包含(../x.php)在我的Linux服務器上不起作用爲什麼?
- 8. 爲什麼使用更多的內存比我分配
- 9. 爲什麼我無法在共享服務器上使用node.js?
- 10. 爲什麼我不能在遠程服務器上使用webClient?
- 11. 報告內存和CPU使用情況 - matlab - 在多核linux服務器上
- 12. 適用於Java的內存SFTP服務器有什麼優點?
- 13. 在Linux服務器上認爲CPU使用率有多高
- 14. 什麼將使用更多的內存
- 15. 爲什麼不能在Linux服務器上託管ASP.NET?
- 16. 爲什麼我的腳本在使用mod_perl運行時使用更多內存?
- 17. 爲什麼我的會話ID在服務器場服務器上多次更改?
- 18. VNC服務器使用多少內存?
- 19. 爲什麼我的java進程使用內存(Linux RES)不斷增加?
- 20. 在linux服務器上運行java
- 21. 在linux服務器上安裝java
- 22. 在Linux上使用太多內存的Java?
- 23. 爲什麼在我的服務器上使用PHP Mysqli_fetch_row而不使用Mysqli_fetch_assoc?
- 24. 在Linux服務器上使用DNS
- 25. 爲什麼node.js服務器不能在我的子域上工作(在WHM服務器上使用cloudflare)?
- 26. 爲什麼我的matlab程序使用這麼多的內存?
- 27. 爲什麼我的Julia程序使用這麼多的內存?
- 28. 爲什麼我不能多次使用我的web服務?
- 29. Linux服務器上的「free」緩存內存?
- 30. 爲什麼我的代碼在Linux上比在RTOS上更快?
你說的是物理內存還是虛擬內存?如果虛擬內存 - 誰在乎?虛擬內存不是稀缺資源。 –
您是否嘗試了內存轉儲?你可以使用 - http://java.sun.com/developer/technicalArticles/Programming/HPROF.html – Pushkar
看到你的內存利用率你確定它只用了9MB的總量,我覺得很難相信嗎?在具有更多內存的機器上,最大內存會增加。這意味着使用更多的虛擬內存,但不是更多的常駐內存。 (這是你應該看的數字) –