Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kafka.server.KafkaServerStartable-java.lang.OutOfMemoryError:java堆空间_Java_Maven_Out Of Memory_Apache Kafka - Fatal编程技术网

kafka.server.KafkaServerStartable-java.lang.OutOfMemoryError:java堆空间

kafka.server.KafkaServerStartable-java.lang.OutOfMemoryError:java堆空间,java,maven,out-of-memory,apache-kafka,Java,Maven,Out Of Memory,Apache Kafka,我正在尝试使用以下代码启动Kafka服务器: public class MockKafkaServer { private static final String LOCALHOST = "127.0.0" + ".1"; private static final int CONSUMER_TIMEOUT_MS = 5000; private static final int CONSUMER_BUFFER_SIZE = 64 * 1024; private s

我正在尝试使用以下代码启动Kafka服务器:

public class MockKafkaServer {

    private static final String LOCALHOST = "127.0.0" + ".1";
    private static final int CONSUMER_TIMEOUT_MS = 5000;
    private static final int CONSUMER_BUFFER_SIZE = 64 * 1024;
    private static final int PRODUCER_SLEEP_INTERVAL = 100;

    private final KafkaServerStartable broker;
    private final MockZooKeeper mockZooKeeper;

    private KafkaProducer<byte[], byte[]> kafkaProducer;
    private SimpleConsumer simpleConsumer;

    private final int port;


    public MockKafkaServer() throws IOException, InterruptedException {

        this.mockZooKeeper = new MockZooKeeper();
        final int zkPort = mockZooKeeper.start();

        this.port = getAvailablePort();

        final File logDirectory = Files.createTempDir();
        logDirectory.deleteOnExit();

        final Properties properties = new Properties();
        properties.put("zookeeper.connect", LOCALHOST + ":" + zkPort);
        properties.put("broker.id", "0");
        properties.put("num.partitions", "1");
        properties.put("host.name", "localhost");
        properties.put("port", String.valueOf(port));
        properties.put("log.dir", logDirectory.getAbsolutePath());
        properties.put("auto.create.topics.enable", "true");

        this.broker = new KafkaServerStartable(new KafkaConfig(properties));
    }

    public void start() throws IOException, InterruptedException {
        broker.startup();
    }

    public void stop() {
        broker.shutdown();
        broker.awaitShutdown();
        mockZooKeeper.stop();
    }

   }
公共类MockKafkaServer{
私有静态最终字符串LOCALHOST=“127.0.0”+“.1”;
专用静态最终整数消费者超时=5000;
私有静态最终整数消费者缓冲区大小=64*1024;
私有静态最终整数生产者睡眠间隔=100;
私人最终卡夫卡经纪人;
私人最终MockZooKeeper MockZooKeeper;
私人卡夫卡制作人卡夫卡制作人;
私人简单消费者简单消费者;
私人最终国际港口;
public MockKafkaServer()引发IOException,InterruptedException{
this.mockZooKeeper=新的mockZooKeeper();
final int zkPort=mockZooKeeper.start();
this.port=getAvailablePort();
最终文件logDirectory=Files.createTempDir();
logDirectory.deleteOnExit();
最终属性=新属性();
properties.put(“zookeeper.connect”,LOCALHOST+:“+zkPort);
不动产卖出价(“经纪人id”、“0”);
属性。put(“num.partitions”、“1”);
properties.put(“host.name”、“localhost”);
properties.put(“port”,String.valueOf(port));
properties.put(“log.dir”,logDirectory.getAbsolutePath());
properties.put(“auto.create.topics.enable”、“true”);
this.broker=新的KafkaServerStartable(新的Kafkanconfig(属性));
}
public void start()引发IOException、InterruptedException{
broker.startup();
}
公共停车场(){
broker.shutdown();
broker.waitshutdown();
mockzookeper.stop();
}
}
对于每个单元测试用例的执行,单元测试用例都调用start()和stop()。我观察到的是,在启动和停止几次后,我得到以下错误:

 7790 [main] FATAL kafka.server.KafkaServerStartable  - Fatal error during KafkaServerStartable startup. Prepare to shutdown
    java.lang.OutOfMemoryError: Java heap space
    at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
    at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
    at kafka.log.SkimpyOffsetMap.<init>(OffsetMap.scala:44)
    at kafka.log.LogCleaner$CleanerThread.<init>(LogCleaner.scala:196)
    at kafka.log.LogCleaner$$anonfun$2.apply(LogCleaner.scala:86)
    at kafka.log.LogCleaner$$anonfun$2.apply(LogCleaner.scala:86)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.Range.foreach(Range.scala:141)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at kafka.log.LogCleaner.<init>(LogCleaner.scala:86)
    at kafka.log.LogManager.<init>(LogManager.scala:66)
    at kafka.server.KafkaServer.createLogManager(KafkaServer.scala:647)
    at kafka.server.KafkaServer.startup(KafkaServer.scala:209)
    at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:39)
    at com.viper.mockkafkaj.MockKafkaServer.start(MockKafkaServer.java:87)
    at com.viper.project.restj.RestControllerTest.setUp(RestControllerTest.java:68)
    at junit.framework.TestCase.runBare(TestCase.java:139)
    at junit.framework.TestResult$1.protect(TestResult.java:122)
    at junit.framework.TestResult.runProtected(TestResult.java:142)
    at junit.framework.TestResult.run(TestResult.java:125)
    at junit.framework.TestCase.run(TestCase.java:129)
    at junit.framework.TestSuite.runTest(TestSuite.java:255)
    at junit.framework.TestSuite.run(TestSuite.java:250)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:272)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:236)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:310)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:261)
7790[main]kafka.server.KafkaServerStartable致命错误-KafkaServerStartable启动期间发生致命错误。准备关机
java.lang.OutOfMemoryError:java堆空间
位于java.nio.HeapByteBuffer。(HeapByteBuffer.java:57)
位于java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
在kafka.log.SkimpyOffsetMap.(OffsetMap.scala:44)
在kafka.log.LogCleaner$CleanerThread.(LogCleaner.scala:196)
在kafka.log.LogCleaner$$anonfun$2.apply上(LogCleaner.scala:86)
在kafka.log.LogCleaner$$anonfun$2.apply上(LogCleaner.scala:86)
位于scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
位于scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
位于scala.collection.immutable.Range.foreach(Range.scala:141)
位于scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
位于scala.collection.AbstractTraversable.map(Traversable.scala:105)
在kafka.log.LogCleaner.(LogCleaner.scala:86)
在kafka.log.LogManager.(LogManager.scala:66)
位于kafka.server.KafkaServer.createLogManager(KafkaServer.scala:647)
在kafka.server.KafkaServer.startup(KafkaServer.scala:209)
在kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:39)
位于com.viper.mockkafkaj.MockKafkaServer.start(MockKafkaServer.java:87)
位于com.viper.project.restj.RestControllerTest.setUp(RestControllerTest.java:68)
位于junit.framework.TestCase.runBare(TestCase.java:139)
位于junit.framework.TestResult$1.protect(TestResult.java:122)
位于junit.framework.TestResult.runProtected(TestResult.java:142)
运行(TestResult.java:125)
运行(TestCase.java:129)
位于junit.framework.TestSuite.runTest(TestSuite.java:255)
运行(TestSuite.java:250)
位于org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
位于org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
位于org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:272)
位于org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:236)
位于org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
位于org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:310)
位于org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:261)
我尝试为Maven测试插件设置以下值

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <argLine>-server -Xss128m -Xms64m -Xmx256m -XX:+UseCompressedOops -XX:+UseG1GC -XX:G1HeapWastePercent=50 -XX:+CMSClassUnloadingEnabled -XX:MaxGCPauseMillis=10 -XX:+CMSScavengeBeforeRemark </argLine>
    </configuration>
</plugin>

org.apache.maven.plugins
maven surefire插件
-服务器-Xss128m-Xms64m-Xmx256m-XX:+UseCompressedOops-XX:+UseG1GC-XX:g1heapwastecenter=50-XX:+cmsclasssunloadingerabled-XX:maxgcpausemilis=10-XX:+cmsscavengebeforemarke

因此,即使Xmx设置为1024m,我也得到了OutOfMemoryError。感谢您的帮助

卡夫卡0.10.2.0的日志清理器线程默认使用高内存,这是一个问题。我设置了以下值,不再看到堆空间错误

private static final long CLEANER_BUFFER_SIZE = 2 * 1024 * 1024L;

properties.put("log.cleaner.dedupe.buffer.size", CLEANER_BUFFER_SIZE);

如果是linux,请尝试使用
top
跟踪内存消耗以了解更多信息。是否启用了Kafka安全性?卡夫卡的版本是什么?