JMeter - 在 JDBC 请求中检索百万条记录时出现 OutOfMemoryError
JMeter - OutOfMemoryError when retrieving million records in JDBC request
当我试图在 JDBC 请求中获得超过百万条记录时,我得到一个 OutOfMemoryError
:
ERROR o.a.j.JMeter: Uncaught exception:
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source) ~[?:1.8.0_191]
at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source) ~[?:1.8.0_191]
at java.lang.AbstractStringBuilder.append(Unknown Source) ~[?:1.8.0_191]
at java.lang.StringBuilder.append(Unknown Source) ~[?:1.8.0_191]
at java.lang.StringBuilder.append(Unknown Source) ~[?:1.8.0_191]
at org.apache.jmeter.protocol.jdbc.AbstractJDBCTestElement.getStringFromResultSet(AbstractJDBCTestElement.java:563) ~[ApacheJMeter_jdbc.jar:5.1.1 r1855137]
at org.apache.jmeter.protocol.jdbc.AbstractJDBCTestElement.execute(AbstractJDBCTestElement.java:175) ~[ApacheJMeter_jdbc.jar:5.1.1 r1855137]
at org.apache.jmeter.protocol.jdbc.sampler.JDBCSampler.sample(JDBCSampler.java:84) ~[ApacheJMeter_jdbc.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]
JDBC有这样的限制吗?是应该因相关错误而停止执行的 JMeter 错误吗?
例如,对于较小的记录,它 returns
Response too large to be displayed. Size: 26848889 > Max: 10485760, Start of message:
内存不足不是 JMeter 错误...这意味着您的 JMeter 进程内存不足。
如果使用 Windows,请查看 jmeter.bat
中的以下部分
if not defined HEAP (
rem See the unix startup file for the rationale of the following parameters,
rem including some tuning recommendations
set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
)
您可能还想搜索 Whosebug 以及 JMeter 堆的问题 space - 例如:
JMeter OutOfMemoryError
请注意,"Results Tree View" 并非设计用于显示数百万条记录,而是用于脚本(也称为测试计划)开发。就我而言,我会参数化记录数并使用少量用于开发,只使用较大的数字进行实际测试(非 gui 模式等)。
打开bin/jmeter.sh on linux或bin/jmeter.bat on windows,找到这一行并从注释行中删除:
JVM_ARGS="-Xms512m -Xmx512m"
此变量在启动时作为参数传递给 jmeter。像这样增加默认堆大小:
JVM_ARGS="-Xms1024m -Xmx1024m"
如果您需要更多,可以添加更多 space。
当我试图在 JDBC 请求中获得超过百万条记录时,我得到一个 OutOfMemoryError
:
ERROR o.a.j.JMeter: Uncaught exception:
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source) ~[?:1.8.0_191]
at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source) ~[?:1.8.0_191]
at java.lang.AbstractStringBuilder.append(Unknown Source) ~[?:1.8.0_191]
at java.lang.StringBuilder.append(Unknown Source) ~[?:1.8.0_191]
at java.lang.StringBuilder.append(Unknown Source) ~[?:1.8.0_191]
at org.apache.jmeter.protocol.jdbc.AbstractJDBCTestElement.getStringFromResultSet(AbstractJDBCTestElement.java:563) ~[ApacheJMeter_jdbc.jar:5.1.1 r1855137]
at org.apache.jmeter.protocol.jdbc.AbstractJDBCTestElement.execute(AbstractJDBCTestElement.java:175) ~[ApacheJMeter_jdbc.jar:5.1.1 r1855137]
at org.apache.jmeter.protocol.jdbc.sampler.JDBCSampler.sample(JDBCSampler.java:84) ~[ApacheJMeter_jdbc.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]
JDBC有这样的限制吗?是应该因相关错误而停止执行的 JMeter 错误吗?
例如,对于较小的记录,它 returns
Response too large to be displayed. Size: 26848889 > Max: 10485760, Start of message:
内存不足不是 JMeter 错误...这意味着您的 JMeter 进程内存不足。 如果使用 Windows,请查看 jmeter.bat
中的以下部分 if not defined HEAP (
rem See the unix startup file for the rationale of the following parameters,
rem including some tuning recommendations
set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
)
您可能还想搜索 Whosebug 以及 JMeter 堆的问题 space - 例如: JMeter OutOfMemoryError
请注意,"Results Tree View" 并非设计用于显示数百万条记录,而是用于脚本(也称为测试计划)开发。就我而言,我会参数化记录数并使用少量用于开发,只使用较大的数字进行实际测试(非 gui 模式等)。
打开bin/jmeter.sh on linux或bin/jmeter.bat on windows,找到这一行并从注释行中删除:
JVM_ARGS="-Xms512m -Xmx512m"
此变量在启动时作为参数传递给 jmeter。像这样增加默认堆大小:
JVM_ARGS="-Xms1024m -Xmx1024m"
如果您需要更多,可以添加更多 space。