【问题标题】:Java classes are consuming lots of memory in linux server?Java 类在 Linux 服务器中消耗大量内存?
【发布时间】:2013-03-24 18:21:42
【问题描述】:

我正在研究一种类似于 SMTP 的协议,我在 java 中制作并成功运行。它在我的笔记本电脑中消耗了大约 20 到 30 MB。后来我决定让协议在互联网上上线。我购买了服务器(VPS),域。这让我付出了很多。但是当我试图在该服务器上运行我的程序时,我感到非常震惊,以至于我运行的每个类的程序消耗了大约 800 到 900 MB。我认为这可能是我的编程错误,我尝试了很多从问题中恢复,但我不能。后来我的一个朋友建议我在同一台服务器上测试一个简单的 Hello word 程序,我非常震惊,甚至那个程序也占用了我高达 900 MB 的总内存。

这会是什么问题? 是这些服务器的问题,还是它们的操作系统和内核版本的问题? 是带有 Linux 内核还是较旧的 linux 内核的 JVM 的问题。 我什至尝试过使用较旧的 JVM,但没有用。 :(

我尝试了大多数流行的 Linux 风格,但它的工作原理相同,并且在所有 Linux 风格上都存在完全相同的问题。在所有情况下都在吃巨大的内存。 (他们都有 Linux 内核 2.6.xx)

但它运行得非常顺利,并且消耗了我笔记本电脑中的预期内存。 (大约 30 到 50 Mb)。我在笔记本电脑上使用 Linux。但不同的是我的内核在 3.1.xx 以上。可能是问题吗?我对我的服务器的行为感到非常失望,并且在其中损失了很多钱。请任何人告诉我可能的解决方案,是Linux内核的问题还是我的编程问题。

【问题讨论】:

  • 使用量取决于 JVM、您使用的参数和 how much memory you have on the system 等。是否提供特定的 -Xmx/-Xms 参数?
  • 这可能是 JVM 的保留内存,而不是您的应用消耗的实际内存。
  • 您是否在笔记本电脑上尝试过java -server?请参阅here,但重点是,在服务器模式下运行会在正常服务器操作下收回一些开销。 (另一个想法)
  • 致asslias:不,我不提供任何此类参数
  • 至 m0skit0 :如果它只是 JVM 占用的内存,那么我认为它不会为该程序的每个实例一次又一次地占用相同的内存。

标签: java linux vps


【解决方案1】:

您的笔记本电脑是否运行 Windows?我会假设答案是肯定的。您在 Windows 任务管理器中看到的内存值并不是 Linux 报告的总驻留内存值。

我不相信 Hello World 占用了 900 MB。如果是,则表明报告的是 JVM 内存,而不是您的应用程序。

您是否在 Tomcat 或 JBOSS 等 Java EE 应用服务器上运行此应用?这确实会产生很大的不同。

最好的建议是在 SO 中搜索其他问题,这些问题展示了如何使用 Linux 工具(如 nmap)来确定内存消耗的位置。

【讨论】:

  • 不,我在笔记本电脑上使用 Linux。对于相同的程序,我的笔记本电脑大约需要 30 到 40 MB,但在服务器上需要超过 700 到 800 MB。是的,即使我看到 Hello word 程序的响应也很震惊.. 但它确实占用了大约 900 MB
  • 您是否为笔记本电脑和计算机都打开了 -server 选项?
  • 我知道一个在 Red Hat Linux 上运行并打开 -server 的 Web 应用程序会消耗 2.8GB 的​​总驻留内存。它在 JBOSS 5.1.1 上运行。如果我对其进行分析,我发现该应用程序使用的内存很少。它是 JBOSS,它映射到常驻内存、线程等的 JAR。还有比你的应用程序更多的事情。相同的应用程序在 Tomcat 6.x 上运行,占用 JBOSS 5.1.1 总内存的 40%。
  • 不,我确实打开了服务器选项。在这种情况下这有关系吗?
猜你喜欢
  • 1970-01-01
  • 2012-04-09
  • 2018-04-27
  • 2022-01-16
  • 2014-01-04
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多