[ https://issues.apache.org/jira/browse/GEODE-8726?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dale Emery updated GEODE-8726: ------------------------------ Labels: GeodeOperationAPI (was: ) > NetstatFunction throws OutOfMemoryError > --------------------------------------- > > Key: GEODE-8726 > URL: https://issues.apache.org/jira/browse/GEODE-8726 > Project: Geode > Issue Type: Bug > Components: gfsh > Affects Versions: 1.14.0 > Reporter: Dale Emery > Priority: Major > Labels: GeodeOperationAPI > > If the output of {{lsof}} is very large, {{NetstatFunction}} throws > {{OutOfMemoryError}}. > An upcoming commit runs distributed tests in parallel outside of docker. If > {{lsof}} executes while many tests are running on the same machine, its > output is very large. {{NetstatFunction}} tries to append this output onto a > {{StringBuilder}} one line at a time. When the {{StringBuilder}} attempts to > increase the size of its internal buffer, not enough memory is available. > This is essentially a recurrence of GEODE-2488. The fix for that ticket made > {{NetstatFunction}} more memory efficient, but running the tests in parallel > creates an extreme environment where even that added efficiency is not enough. > One possible fix: Write the {{lsof}} output to a file instead of to an > in-memory {{StringBuilder}}. > Example failure: > {noformat} > java.lang.AssertionError: Suspicious strings were written to the log during > this run.Fix the strings or use IgnoredException.addIgnoredException to > ignore.-----------------------------------------------------------------------Found > suspect string in 'dunit_suspect-vm2.log' at line 566 > [fatal 2020/11/17 01:53:38.221 UTC <ClientHealthMonitor Thread> tid=86] > Uncaught exception in thread Thread[ClientHealthMonitor Thread,5,RMI > Runtime]java.lang.OutOfMemoryError: Java heap space at > java.base/java.util.Arrays.copyOf(Arrays.java:3745) at > java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172) > at > java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538) > at java.base/java.lang.StringBuilder.append(StringBuilder.java:174) at > org.apache.geode.management.internal.cli.functions.NetstatFunction.executeLsof(NetstatFunction.java:178) > at > org.apache.geode.management.internal.cli.functions.NetstatFunction.executeCommand(NetstatFunction.java:227) > at > org.apache.geode.management.internal.cli.functions.NetstatFunction.execute(NetstatFunction.java:80) > at > org.apache.geode.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:201) > at > org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:376) > at > org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:441) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at > org.apache.geode.distributed.internal.ClusterOperationExecutors.runUntilShutdown(ClusterOperationExecutors.java:446) > at > org.apache.geode.distributed.internal.ClusterOperationExecutors.doFunctionExecutionThread(ClusterOperationExecutors.java:381) > at > org.apache.geode.distributed.internal.ClusterOperationExecutors$$Lambda$240/0x000000084078f040.invoke(Unknown > Source) at > org.apache.geode.logging.internal.executors.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:120) > at > org.apache.geode.logging.internal.executors.LoggingThreadFactory$$Lambda$230/0x000000084078c840.run(Unknown > Source) at java.base/java.lang.Thread.run(Thread.java:834) > -----------------------------------------------------------------------Found > suspect string in 'dunit_suspect-vm2.log' at line 587 > [fatal 2020/11/17 01:53:38.222 UTC <Function Execution Processor2> tid=88] > Uncaught exception in thread Thread[Function Execution Processor2,10,RMI > Runtime]java.lang.OutOfMemoryError: Java heap space at > java.base/java.util.Arrays.copyOf(Arrays.java:3745) at > java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172) > at > java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538) > at java.base/java.lang.StringBuilder.append(StringBuilder.java:174) at > org.apache.geode.management.internal.cli.functions.NetstatFunction.executeLsof(NetstatFunction.java:178) > at > org.apache.geode.management.internal.cli.functions.NetstatFunction.executeCommand(NetstatFunction.java:227) > at > org.apache.geode.management.internal.cli.functions.NetstatFunction.execute(NetstatFunction.java:80) > at > org.apache.geode.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:201) > at > org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:376) > at > org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:441) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at > org.apache.geode.distributed.internal.ClusterOperationExecutors.runUntilShutdown(ClusterOperationExecutors.java:446) > at > org.apache.geode.distributed.internal.ClusterOperationExecutors.doFunctionExecutionThread(ClusterOperationExecutors.java:381) > at > org.apache.geode.distributed.internal.ClusterOperationExecutors$$Lambda$240/0x000000084078f040.invoke(Unknown > Source) at > org.apache.geode.logging.internal.executors.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:120) > at > org.apache.geode.logging.internal.executors.LoggingThreadFactory$$Lambda$230/0x000000084078c840.run(Unknown > Source) at java.base/java.lang.Thread.run(Thread.java:834) > -----------------------------------------------------------------------Found > suspect string in 'dunit_suspect-vm2.log' at line 608 > [error 2020/11/17 01:53:38.245 UTC <Cache Server Acceptor > 0.0.0.0/0.0.0.0:43349 local port: 43349> tid=87] Cache server: Unexpected > IOException from acceptjava.net.SocketException: Socket closed at > java.base/java.net.PlainSocketImpl.socketAccept(Native Method) at > java.base/java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:458) > at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:565) at > java.base/java.net.ServerSocket.accept(ServerSocket.java:533) at > org.apache.geode.internal.cache.tier.sockets.AcceptorImpl.accept(AcceptorImpl.java:1277) > at > org.apache.geode.internal.cache.tier.sockets.AcceptorImpl.run(AcceptorImpl.java:1216) > at java.base/java.lang.Thread.run(Thread.java:834) > -----------------------------------------------------------------------Found > suspect string in 'dunit_suspect-vm2.log' at line 618 > [fatal 2020/11/17 01:53:38.247 UTC <Cache Server Acceptor > 0.0.0.0/0.0.0.0:43349 local port: 43349> tid=87] Uncaught exception in thread > Thread[Cache Server Acceptor 0.0.0.0/0.0.0.0:43349 local port: 43349,5,RMI > Runtime]java.lang.OutOfMemoryError: Java heap space at > java.base/java.util.Arrays.copyOf(Arrays.java:3745) at > java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172) > at > java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538) > at java.base/java.lang.StringBuilder.append(StringBuilder.java:174) at > org.apache.geode.management.internal.cli.functions.NetstatFunction.executeLsof(NetstatFunction.java:178) > at > org.apache.geode.management.internal.cli.functions.NetstatFunction.executeCommand(NetstatFunction.java:227) > at > org.apache.geode.management.internal.cli.functions.NetstatFunction.execute(NetstatFunction.java:80) > at > org.apache.geode.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:201) > at > org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:376) > at > org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:441) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at > org.apache.geode.distributed.internal.ClusterOperationExecutors.runUntilShutdown(ClusterOperationExecutors.java:446) > at > org.apache.geode.distributed.internal.ClusterOperationExecutors.doFunctionExecutionThread(ClusterOperationExecutors.java:381) > at > org.apache.geode.distributed.internal.ClusterOperationExecutors$$Lambda$240/0x000000084078f040.invoke(Unknown > Source) at > org.apache.geode.logging.internal.executors.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:120) > at > org.apache.geode.logging.internal.executors.LoggingThreadFactory$$Lambda$230/0x000000084078c840.run(Unknown > Source) at java.base/java.lang.Thread.run(Thread.java:834) > -----------------------------------------------------------------------Found > suspect string in 'dunit_suspect-vm0.log' at line 781 > [error 2020/11/17 01:53:50.295 UTC <RMI TCP Connection(5)-10.128.0.33> > tid=94] Could not execute "netstat --with-lsof=true > --file=/tmp/junit6368474235553216207/junit14401048426744114153/command.log.txt".java.lang.ClassCastException: > class org.apache.geode.cache.execute.FunctionInvocationTargetException > cannot be cast to class > org.apache.geode.management.internal.cli.functions.NetstatFunction$NetstatFunctionResult > (org.apache.geode.cache.execute.FunctionInvocationTargetException and > org.apache.geode.management.internal.cli.functions.NetstatFunction$NetstatFunctionResult > are in unnamed module of loader 'app') at > org.apache.geode.management.internal.cli.commands.NetstatCommand.netstat(NetstatCommand.java:149) > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:566) at > org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282) > at > org.apache.geode.management.internal.cli.remote.CommandExecutor.callInvokeMethod(CommandExecutor.java:151) > at > org.apache.geode.management.internal.cli.remote.CommandExecutor.invokeCommand(CommandExecutor.java:161) > at > org.apache.geode.management.internal.cli.remote.CommandExecutor.execute(CommandExecutor.java:88) > at > org.apache.geode.management.internal.cli.remote.CommandExecutor.execute(CommandExecutor.java:71) > at > org.apache.geode.management.internal.cli.remote.OnlineCommandProcessor.executeCommand(OnlineCommandProcessor.java:135) > at > org.apache.geode.management.internal.cli.remote.OnlineCommandProcessor.executeCommandReturningJson(OnlineCommandProcessor.java:141) > at > org.apache.geode.management.internal.beans.MemberMBeanBridge.processCommand(MemberMBeanBridge.java:1237) > at > org.apache.geode.management.internal.beans.MemberMBean.processCommand(MemberMBean.java:424) > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:566) at > sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) at > jdk.internal.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:566) at > java.base/sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:260) at > java.management/com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:193) > at > java.management/com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:175) > at > java.management/com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:117) > at > java.management/com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:54) > at > java.management/com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237) > at > java.management/com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138) > at > java.management/com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252) > at > java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809) > at > java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) > at > java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468) > at > java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466) > at > java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307) > at > java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399) > at > java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:827) > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:566) at > java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359) > at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) at > java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) at > java.base/java.security.AccessController.doPrivileged(Native Method) at > java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) at > java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562) > at > java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796) > at > java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677) > at java.base/java.security.AccessController.doPrivileged(Native Method) at > java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at java.base/java.lang.Thread.run(Thread.java:834) > at org.junit.Assert.fail(Assert.java:89) at > org.apache.geode.test.dunit.internal.DUnitLauncher.closeAndCheckForSuspects(DUnitLauncher.java:408) > at > org.apache.geode.test.dunit.rules.ClusterStartupRule.after(ClusterStartupRule.java:185) > at > org.apache.geode.test.dunit.rules.ClusterStartupRule.access$100(ClusterStartupRule.java:69) > at > org.apache.geode.test.dunit.rules.ClusterStartupRule$1.evaluate(ClusterStartupRule.java:140) > at org.junit.rules.RunRules.evaluate(RunRules.java:20) at > org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at > org.junit.runners.ParentRunner.run(ParentRunner.java:413) at > org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) > at > org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) > at > org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) > at > org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) > at > org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) > at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at > jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:566) at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) > at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) > at > org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) > at > org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) > at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) at > org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:118) > at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at > jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:566) at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) > at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) > at > org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:175) > at > org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:157) > at > org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) > at > org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) > at > org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at > org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) > at java.lang.Thread.run(Thread.java:834) > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)