请解释JVM中的使用Xms和Xmx参数.它们的默认值是什么?
我在构建Maven项目时遇到了这个错误,我增加了MAVEN_OPTS,但是我发现了一些类似的帖子,但是他们引用了其他的东西.我该如何解决?
The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at org.codehaus.plexus.compiler.javac.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:56)
at com.sun.tools.javac.comp.Annotate.<init>(Annotate.java:52)
at com.sun.tools.javac.comp.Annotate.instance(Annotate.java:36)
at com.sun.tools.javac.jvm.ClassReader.<init>(ClassReader.java:215)
at com.sun.tools.javac.jvm.ClassReader.instance(ClassReader.java:168)
at com.sun.tools.javac.main.JavaCompiler.<init>(JavaCompiler.java:293)
at com.sun.tools.javac.main.JavaCompiler.instance(JavaCompiler.java:72)
at com.sun.tools.javac.main.Main.compile(Main.java:340)
at com.sun.tools.javac.main.Main.compile(Main.java:279)
at com.sun.tools.javac.main.Main.compile(Main.java:270)
at com.sun.tools.javac.Main.compile(Main.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:420)
at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:141)
at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:493)
at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:114)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694) …Run Code Online (Sandbox Code Playgroud) 每个Java应用程序都将在特定的Java虚拟机实例中运行.我真的对以下方面感到困惑,谷歌搜索让我更加困惑.不同网站上的不同文章.
如果我有一个用java编写的Web服务,它将需要一个JVM实例来运行.那么JVM可以成为一个守护进程吗?
如果是,当我们运行任何其他Java应用程序时,它将使用此JVM实例或创建一个新实例?
任何机器中可用的主存储器都是不变的.当我们同时启动n个java进程而不提供任何初始堆大小时,堆大小如何在进程之间分配?
是否有任何进程可以管理n个JVM实例,还是由操作系统本身管理?
在GC期间发生停止世界时,其他JVM实例(我假设的不同线程)是否受到影响?
有没有什么好方法可以在运行时将剩余内存提供给JVM?这种情况的用例是让Web服务在接近其内存限制时优雅地失败,拒绝新连接时出现错误消息"太多人使用它,稍后再试",而不是突然死于OutOfMemory错误.
注意,这与预先计算/估计每个对象的成本无关.原则上,我可以估计我的对象占用了多少内存,并根据该估计拒绝新连接,但这似乎有点hacky/fragile.
我有一个在16G的机器上使用大约15G的Java应用程序.我不知道是否应该设置最大堆大小.
如果设置将jvm吃掉所有ram达到极限然后开始垃圾收集并停止一切,而它通过15G的堆对象搅拌?
如果没有,jvm会因为没有使用机器上所有可用的ram而损害性能.
我的具体vm是:Java HotSpot(TM)64位服务器VM(版本1.6.0_03-b05,混合模式).
谢谢
可能重复:
为什么空Java程序消耗内存?
为什么绝对空的Java应用程序会不断消耗内存?该应用程序:
public class Dummy {
public static void main(String[] args) throws IOException {
System.in.read();
}
}
Run Code Online (Sandbox Code Playgroud)
甚至:
public class Dummy {
public static void main(String[] args) throws InterruptedException {
synchronized (Thread.currentThread()) {
Thread.currentThread().wait();
}
}
}
Run Code Online (Sandbox Code Playgroud)
堆状态:

更新:IOException修复.
启动Kafka Connect(connect-standalone)后,我的任务在开始后立即失败:
java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:93)
at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)
at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:154)
at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:135)
at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:343)
at org.apache.kafka.common.network.Selector.poll(Selector.java:291)
at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:260)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:232)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:180)
at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureCoordinatorReady(AbstractCoordinator.java:193)
at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:248)
at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1013)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:979)
at org.apache.kafka.connect.runtime.WorkerSinkTask.pollConsumer(WorkerSinkTask.java:316)
at org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:222)
at org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:170)
at org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:142)
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:140)
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:175)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
在一些Kafka文档中提到了堆空间,告诉你使用"默认"进行尝试,只有在出现问题时才修改它,但是没有指令来修改堆空间.
我在春季启动中创建了一些服务,我有11个胖jar,并将它们部署在docker容器中,我的怀疑是每个jar都消耗了1到1.5 GB的RAM,而没有任何使用,我通过运行以下命令检查RAM:
docker stats containername
Run Code Online (Sandbox Code Playgroud)
起初我以为是Java容器,所以我尝试更改为使用alpine的容器,但没有任何变化,所以我认为唯一的问题是我的jar。有没有办法更改jar正在使用的RAM?还是这种行为是正常的,因为每个jar都有一个嵌入式的tomcat?或者将一些罐子放在一起作为战争来部署,并在一组“罐子”中仅使用一个tomcat更好?有人可以分享他/她的经验吗?,
提前致谢。
我的Java程序扔了一个OutOfMemoryError.如何调试并修复此问题?
Java的许多新手都在努力应对OutOfMemoryError.这是尝试创建一个规范问题,该问题将回答有关问题的最常见问题OutOfMemoryError.我正在创建这个新问题,而不是调整之前关于a的众多问题之一,OutOfMemoryError因为这些问题及其答案与一个人的特定问题紧密相关.
java ×9
jvm ×4
memory ×3
performance ×2
apache-kafka ×1
docker ×1
exception ×1
heap ×1
maven ×1
parameters ×1
permgen ×1
spring-boot ×1
web-services ×1