项目场景:
学习rocketMQ时遇见的问题。
问题描述:
不多bb,都遇见这个报错了,前因后果咱就不多说了。
Java HotSpot(TM) Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap
原因分析:
这个报错里面包含两个警告和一个错误:
(前两个警告不用管,各位都在windows上学校rocketmq了,这些应该对我们都影响不大)
1.第一个警告是关于使用的垃圾收集器的问题。通常情况下,CMS(Concurrent Mark-Sweep)垃圾收集器与DefNew年轻代收集器一起使用。然而,在未来的版本中,这种组合将被废弃并可能被删除。建议您考虑使用其他垃圾收集器组合。
2.第二个警告是关于使用的CMSCompactAtFullCollection选项的问题。这个选项已被废弃并可能在将来的版本中删除。建议您不要使用这个选项。
3.最后一个错误是关于为对象堆分配足够空间的问题。您在试图启动JVM时没有足够的空间来分配一个2,097,152KB的对象堆。您可以尝试减少JVM的最大堆大小,或者释放其他系统资源以提供足够的空间。
解决方案:
将选中的两个文件的后缀改成txt然后打开
将runserver.cmd中的一段改为
原本这段代码应该是Xms2g 改为 512m
set "JAVA_OPT=%JAVA_OPT% -server -Xms512m -Xmx512m
-Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
将runbroker.cmd中的
也是2g变512m
set "JAVA_OPT=%JAVA_OPT% -server -Xms512m -Xmx512m"
问题描述
然后你启动Broker 有会报错
Invalid maximum direct memory size:
-XX:MaxDirectMemorySize=15g
The specified size exceeds the maximum representable size.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
最大直接内存大小无效:
-XX:最大直接内存大小=15g
指定的大小超过最大可表示大小。
错误:无法创建 Java 虚拟机。
错误:发生致命异常。程序将退出。
原因分析:
在您的命令行中,您尝试设置了一个无效的最大直接内存大小。指定的大小(15g)超过了可表示的最大大小。直接内存是在堆外分配的内存,它通过使用ByteBuffer等类提供更直接的访问,并且通常用于处理大量数据的情况。
要解决这个问题,您可以尝试减少最大直接内存大小,以使其符合可表示的范围。例如,您可以将其减小到适当的大小,例如8g或4g。请注意,具体的大小可能会因您的系统配置和可用内存而有所不同。(以上是屁话)
解决方案:
将runbroker.cmd文件的后缀改成txt然后打开
删除包含 -XX:MaxDirectMemorySize=15g
这一行话就解决了
意思就是删除了这个警告 里面警告挺多的 也挺离谱的 有兴趣的大家自行查看。