【问题标题】:Dreaded Could not reserve enough space for object heap害怕无法为对象堆保留足够的空间
【发布时间】:2009-12-19 19:00:47
【问题描述】:

我试图让 Solr 启动并运行,起初我的 JDK.1.6 运行良好,然后 tomcat 也运行良好。第一次尝试运行 Solr 时突然出现错误消息:

[root@78 bin]# ./java -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

我删除了Tomcat,删除了JDK并重新安装了最新的JRE,但即使尝试获取Java的版本号,仍然会收到错误消息。

top - 18:47:15 up 207 days, 13:50,  1 user,  load average: 0.08, 0.03, 0.00
Tasks:  42 total,   1 running,  41 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.0%us,  0.2%sy,  0.0%ni, 94.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    786432k total,   376656k used,   409776k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

我得到的设置是:双 CPU 双核 AMD Opteron 512MB RAM 40GB HDD

我几乎是 UNIX 新手,所以任何帮助或建议都会非常有帮助,谢谢大家

编辑运行过程是:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      18   0 10332  636  600 S    0  0.1   0:08.28 init
 1752 psaadm    15   0  176m  29m  17m S    0  3.9   0:03.76 httpsd
 1785 psaadm    15   0  173m  24m  14m S    0  3.1   0:02.03 httpsd
 5308 psaadm    15   0  174m  32m  21m S    0  4.2   0:02.70 httpsd
 6107 apache    25   0  347m  47m 5616 S    0  6.2   1:48.26 httpd
11493 root      15  -4 12588  320  316 S    0  0.0   0:00.00 udevd
12105 root      15   0 60592 1224  676 S    0  0.2   0:00.00 sshd
13659 apache    15   0  345m  46m 4784 S    0  6.1   0:57.14 httpd
15855 root      15   0 21628  768  672 S    0  0.1   0:13.75 xinetd
15986 root      15   0 40848  592  536 S    0  0.1   0:00.38 couriertcpd
16086 root      18   0 33540 1184 1120 S    0  0.2   0:00.28 courierlogger
16117 root      21   0 40848  536  532 S    0  0.1   0:00.00 couriertcpd
16119 root      21   0 33544 1072 1068 S    0  0.1   0:00.00 courierlogger
16135 root      15   0 40848  592  536 S    0  0.1   0:03.09 couriertcpd
16137 root      18   0 33540 1184 1120 S    0  0.2   0:01.70 courierlogger
16154 root      18   0 40852  536  532 S    0  0.1   0:00.00 couriertcpd
16157 root      18   0 33540 1124 1120 S    0  0.1   0:00.00 courierlogger
16287 qmails    18   0  3832  512  428 S    0  0.1   2:03.49 qmail-send
16289 qmaill    18   0  3780  508  444 S    0  0.1   0:36.67 splogger
16290 root      18   0  3816  408  324 S    0  0.1   0:00.09 qmail-lspawn
16291 qmailr    17   0  3820  404  328 S    0  0.1   0:16.95 qmail-rspawn
16292 qmailq    18   0  3772  368  324 S    0  0.0   0:15.61 qmail-clean
17669 root      18   0 12592 1180  908 R    0  0.2   0:00.03 top
18190 root      15   0  318m  25m 9000 S    0  3.3   0:36.21 httpd
19687 apache    16   0  347m  47m 5764 S    0  6.2   1:10.59 httpd
19710 named     25   0  180m 2572 1744 S    0  0.3   0:03.06 named
19809 root      18   0 11908 1152 1148 S    0  0.1   0:00.01 mysqld_safe
20166 apache    15   0  347m  47m 5696 S    0  6.2   1:07.68 httpd
20340 mysql     15   0  303m  35m 5620 S    0  4.7 185:56.38 mysqld
23747 apache    15   0  412m  46m 5768 S    0  6.0   0:38.23 httpd
23791 root      15   0  166m 7504 4216 S    0  1.0   0:02.39 httpsd
23901 root      15   0 20836  616  548 S    0  0.1   3:37.38 crond
23926 root      18   0 46648  416  412 S    0  0.1   0:00.00 saslauthd
24084 root      18   0 46648  160  156 S    0  0.0   0:00.00 saslauthd
24297 root      15   0 96636 4032 3112 S    0  0.5   0:00.20 sshd
24302 root      18   0 12180 1804 1308 S    0  0.2   0:00.17 bash
24431 root      18   0  152m 1112  664 S    0  0.1   0:25.77 rsyslogd
24435 root      18   0  3784  336  332 S    0  0.0   0:00.00 rklogd
24537 apache    15   0  344m  45m 4364 S    0  5.9   0:35.93 httpd

顺便说一句,它是一个共享服务器。

free -m 给我:

             total       used       free     shared    buffers     cached
Mem:           768        367        400          0          0          0
-/+ buffers/cache:        367        400
Swap:            0          0          0

【问题讨论】:

  • 第一个建议是:不要以 root 身份登录!
  • 我的理解是你的机器有 768MB 的 RAM,没有交换 (?),还有 400MB 是空闲的。所以你肯定有足够的空间来启动一个 JVM。某处还有其他问题。
  • 不知道它可能是什么?我应该从这里去哪里?
  • 您为 Solr 采取的具体步骤是什么? Java究竟是在什么之后开始失败的?我不明白事情是如何工作并突然失败的,事情应该是一致的。如果可能,请尝试提供更多详细信息。
  • 先安装JDK,再安装Tomcat,都运行良好。然后简单地在 solr 示例文件夹中点击 java -jar start.jar 然后在启动中途失败,Java 从那以后一直是个哑巴,我现在删除了 Solr 文件夹,但不相信它会做任何事情

标签: java unix memory-leaks solr


【解决方案1】:

JVM 在启动时将需要一定数量的内存(通过 -Xms 配置 - 我相信默认为 32m)。如果它不能得到它,它就不会启动。

那么你的机器上还运行着什么?我怀疑您的机器上的可用虚拟内存很少。

【讨论】:

  • 我怎样才能知道以便告诉你?
  • 您可以运行 'top' 并按内存使用情况排序。不记得它是如何工作的,但“man top”应该会有所帮助。和/或 'ps -fe' 获取内存消耗的进程列表
  • 在 Java 5 之前,Sun 的 JVM 的默认 -Xms 值为 2MB。对于 Java 6,默认值是在运行时根据系统配置选择的。
【解决方案2】:

您是否设置了 $JAVA_OPTIONS?

echo $JAVA_OPTIONS

下面的命令运行没有错误吗?

java -Xmx8m -version

【讨论】:

  • java options aint set no, Ill set it but the java -Xmx8m -version command doesn't run
  • 不要设置JAVA_OPTIONS,我只是想知道你是否默认设置了一些参数。而且如果你不能启动一个8m的JVM,那你确实有问题,但我不知道发生了什么。
【解决方案3】:

只需要简单的重启,我这辈子都无法理解发生了什么或为什么。

【讨论】:

  • 有时这只是解决方案.. Java Gremlins!我没有完全看到答案的一件事是在启动时设置 xms 和 xmlx 设置的建议。如果我有一个专用服务器,我通常会设置这些,所以我知道我的应用程序在启动时会获得所有内存。
  • 将来,运行 SOLR 并为其提供一些额外的内存。 32M 远远不够小内存。我用至少 1024 运行我的。尝试使用 256 Mb。
猜你喜欢
  • 2014-02-28
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 2013-11-04
  • 2023-03-18
  • 2020-11-26
相关资源
最近更新 更多