8202392: [TESTBUG] open source vm testbase heapdump tests

Reviewed-by: sspitsyn, mseledtsov
This commit is contained in:
Igor Ignatyev 2018-05-15 11:28:29 -07:00
parent ce4698fadb
commit f575533a17
25 changed files with 1396 additions and 0 deletions

View File

@ -123,4 +123,7 @@ vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses023/TestDescrip
vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005/TestDescription.java 8068225 generic-all
vmTestbase/nsk/jdi/stress/ClassPrepareEvents/ClassPrepareEvents001/ClassPrepareEvents001.java 6426321 generic-all
vmTestbase/heapdump/JMapHeapCore/TestDescription.java 8023376,8001227,8051445 generic-all
vmTestbase/heapdump/JMapMetaspaceCore/TestDescription.java 8023376,8001227,8051445 generic-all
#############################################################################

View File

@ -1150,3 +1150,14 @@ vmTestbase_nsk_jdi_quick = \
vmTestbase/nsk/jdi/StackFrame/getArgumentValues/getArgumentValues002/getArgumentValues002.java \
vmTestbase/nsk/jdi/StackFrame/getArgumentValues/getArgumentValues003/getArgumentValues003.java
# Heap dump tests
vmTestbase_vm_heapdump = \
vmTestbase/heapdump/
vmTestbase_vm_heapdump_quick = \
vmTestbase/heapdump/OnOOMToFile/TestDescription.java \
vmTestbase/heapdump/OnOOMToFileMetaspace/TestDescription.java \
vmTestbase/heapdump/OnOOMToPath/TestDescription.java \
vmTestbase/heapdump/JMapHeapCore/TestDescription.java \
vmTestbase/heapdump/JMapMetaspace/TestDescription.java

View File

@ -0,0 +1,23 @@
#
# Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
exclusiveAccess.dirs=.

View File

@ -0,0 +1,43 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
*
* @summary converted from VM testbase heapdump/JMapHeap.
* VM testbase keywords: [heapdump, feature_heapdump, nonconcurrent, jdk]
* VM testbase readme:
* DESCRIPTION
* This test verifies that heap dump created by JMap is able to be
* parsed by HprofParser. It fills the heap with objects of different types
* till OutOfMemoryError, then uses JMap to create heap dump and then
* verifies created heap dump with HprofParser.
*
* @library /vmTestbase
* /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @build jdk.test.lib.hprof.HprofParser
* heapdump.share.EatMemory
* @run shell/timeout=300 run.sh
*/

View File

@ -0,0 +1,51 @@
#!/bin/sh
# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
. $TESTSRC/../share/common.sh
JAVA_OPTS="${JAVA_OPTS} -XX:-UseGCOverheadLimit -Xmx1G"
DUMPFILE=heap.bin
rm -f ${DUMPFILE}
JMAP_DUMP_OPT="-dump:format=b,file=${DUMPFILE}"
${JAVA} ${JAVA_OPTS} heapdump.share.EatMemory -exec "${JMAP} ${JMAP_DUMP_OPT} %p"
status=$?
if [ $status -ne 0 ]; then
fail "Java exited with exit status: $status"
fi
if [ ! -f "${DUMPFILE}" ]; then
fail "Dump file was not created: $DUMPFILE"
fi
verify_heapdump ${DUMPFILE}
if [ $? -ne 0 ]; then
fail "Verification of heap dump failed"
fi
pass

View File

@ -0,0 +1,45 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
*
* @summary converted from VM testbase heapdump/JMapHeapCore.
* VM testbase keywords: [heapdump, feature_heapdump, nonconcurrent.jdk, quick, quarantine]
* VM testbase comments: JDK-8023376 JDK-8001227 JDK-8051445
* VM testbase readme:
* DESCRIPTION
* This test verifies that heap dump created by jhsdb is able to be
* parsed by HprofParser. It fills the heap with objects of different types
* till OutOfMemoryError, forces core dump, then uses jhsdb on core file
* to create heap dump and then verifies created heap dump with HprofParser.
*
* @library /vmTestbase
* /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @build jdk.test.lib.hprof.HprofParser
* heapdump.share.EatMemory
* @run shell/timeout=300 run.sh
*/

View File

@ -0,0 +1,88 @@
#!/bin/sh
#
# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
. $TESTSRC/../share/common.sh
JAVA_OPTS="${JAVA_OPTS} -XX:-UseGCOverheadLimit -XX:-TransmitErrorReport"
if [ $CORE_SUPPORTED -eq 0 ]; then
pass "Core dump is not supported"
fi
DUMPFILE=heap.bin
rm -f ${DUMPFILE}
ulimit -c unlimited || true
echo "Below 'Unexpected error' is actually expected - JVM is forced to dump core"
${JAVA} ${JAVA_OPTS} heapdump.share.EatMemory -core &
pid=$!
wait $pid
status=$?
if [ $status -eq 0 ]; then
pass "Java exited with exit status: $status"
fi
for CORE in core* /cores/core.$pid; do
[ -e "$CORE" ] && break;
done
if [ ! -f "$CORE" ]; then
fail "Java exited with exit status: $status, but core file was not created"
fi
echo "Found core file: $CORE"
JMAP_DUMP_OPT="--binaryheap --dumpfile=${DUMPFILE}"
EXE_OPT="--exe"
CORE_OPT="--core"
JHSDB_OPT="jmap"
${JHSDB} ${JHSDB_OPT} ${JMAP_DUMP_OPT} ${EXE_OPT} ${JAVA} ${CORE_OPT} ${CORE}
status=$?
if [ $status -ne 0 ]; then
fail "jmap exited with exit status $status"
fi
if [ ! -f "${DUMPFILE}" ]; then
fail "Dump file was not created: $DUMPFILE"
fi
verify_heapdump ${DUMPFILE}
if [ $? -ne 0 ]; then
fail "Verification of heap dump failed"
fi
if [ "$TEST_CLEANUP" != "false" ]; then
rm -f ${CORE}
rm -f hs_err_pid*
fi
pass

View File

@ -0,0 +1,23 @@
#
# Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
exclusiveAccess.dirs=.

View File

@ -0,0 +1,43 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
*
* @summary converted from VM testbase heapdump/JMapMetaspace.
* VM testbase keywords: [heapdump, feature_heapdump, nonconcurrent, jdk, quick]
* VM testbase readme:
* DESCRIPTION
* This test verifies that heap dump created by JMap is able to be
* parsed by HprofParser. It fills metaspace with classes till OutOfMemoryError,
* then uses JMap to create heap dump and then verifies created heap dump with HprofParser.
*
* @library /vmTestbase
* /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @build jdk.test.lib.hprof.HprofParser
* heapdump.share.EatMemory
* @run shell/timeout=300 run.sh
*/

View File

@ -0,0 +1,53 @@
#!/bin/sh
#
# Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
. $TESTSRC/../share/common.sh
JAVA_OPTS="${JAVA_OPTS} -XX:-UseGCOverheadLimit -XX:MaxMetaspaceSize=64m"
DUMPFILE=heap.bin
rm -f ${DUMPFILE}
JMAP_DUMP_OPT="-dump:format=b,file=${DUMPFILE}"
${JAVA} ${JAVA_OPTS} heapdump.share.EatMemory -metaspace -exec "${JMAP} ${JMAP_DUMP_OPT} %p"
status=$?
if [ $status -ne 0 ]; then
fail "Java exited with exit status: $status"
fi
if [ ! -f "${DUMPFILE}" ]; then
fail "Dump file was not created: ${DUMPFILE}"
fi
verify_heapdump ${DUMPFILE}
if [ $? -ne 0 ]; then
fail "Verification of heap dump failed"
fi
pass

View File

@ -0,0 +1,23 @@
#
# Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
exclusiveAccess.dirs=.

View File

@ -0,0 +1,45 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
*
* @summary converted from VM testbase heapdump/JMapMetaspaceCore.
* VM testbase keywords: [heapdump, feature_heapdump, nonconcurrent, jdk, quarantine]
* VM testbase comments: JDK-8023376 JDK-8001227 JDK-8051445
* VM testbase readme:
* DESCRIPTION
* This test verifies that heap dump created by jhsdb is able to be
* parsed by HprofParser. It fills metaspace with classes till OutOfMemoryError,
* forces core dump, then uses jhsdb one core file to create heap dump
* and then verifies created heap dump with HprofParser.
*
* @library /vmTestbase
* /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @build jdk.test.lib.hprof.HprofParser
* heapdump.share.EatMemory
* @run shell/timeout=300 run.sh
*/

View File

@ -0,0 +1,90 @@
#!/bin/sh
#
# Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
. $TESTSRC/../share/common.sh
JAVA_OPTS="${JAVA_OPTS} -XX:-UseGCOverheadLimit -XX:MaxMetaspaceSize=64m -XX:-TransmitErrorReport"
if [ $CORE_SUPPORTED -eq 0 ]; then
pass "Core dump is not supported"
fi
DUMPFILE=heap.bin
rm -f ${DUMPFILE}
ulimit -c unlimited || true
echo "Below 'Unexpected error' is actually expected - JVM is forced to dump core"
${JAVA} ${JAVA_OPTS} heapdump.share.EatMemory -metaspace -core &
pid=$!
wait $pid
status=$?
if [ $status -eq 0 ]; then
pass "Java exited with exit status: $status"
fi
for CORE in core* /cores/core.$pid; do
[ -e "$CORE" ] && break;
done
if [ ! -f "$CORE" ]; then
fail "Java exited with exit status $status, but core file was not created"
fi
echo "Found core file: $CORE"
JMAP_DUMP_OPT="--binaryheap --dumpfile=${DUMPFILE}"
EXE_OPT="--exe"
CORE_OPT="--core"
JHSDB_OPT="jmap"
${JHSDB} ${JHSDB_OPT} ${JMAP_DUMP_OPT} ${EXE_OPT} ${JAVA} ${CORE_OPT} ${CORE}
status=$?
if [ $status -ne 0 ]; then
fail "jmap exited with exit status $status"
fi
if [ ! -f "${DUMPFILE}" ]; then
fail "Dump file was not created: $DUMPFILE"
fi
verify_heapdump ${DUMPFILE}
if [ $? -ne 0 ]; then
fail "Verification of heap dump failed"
fi
if [ "$TEST_CLEANUP" != "false" ]; then
rm -f ${CORE}
rm -f hs_err_pid*
fi
pass

View File

@ -0,0 +1,23 @@
#
# Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
exclusiveAccess.dirs=.

View File

@ -0,0 +1,45 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
*
* @summary converted from VM testbase heapdump/OnOOMToFile.
* VM testbase keywords: [heapdump, feature_heapdump, nonconcurrent, jdk, quick]
* VM testbase readme:
* DESCRIPTION
* This test verifies -XX:+HeapDumpOnOutOfMemory VM option. It
* fills the heap with objects of different types till OutOfMemoryError
* and then verifies created heap dump with HprofParser.
* COMMENTS
* This test uses -XX:HeapDumpPath= option pointing to file.
*
* @library /vmTestbase
* /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @build jdk.test.lib.hprof.HprofParser
* heapdump.share.EatMemory
* @run shell/timeout=300 run.sh
*/

View File

@ -0,0 +1,53 @@
#!/bin/sh
#
# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
. $TESTSRC/../share/common.sh
JAVA_OPTS="${JAVA_OPTS} -XX:-UseGCOverheadLimit"
DUMPFILE=${DUMPBASE}/java.hprof
rm -f ${DUMPFILE}
JAVA_OPTS="${JAVA_OPTS} -Xmx`get_max_heap_size $JAVA_OPTS`"
${JAVA} ${JAVA_OPTS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DUMPFILE} heapdump.share.EatMemory
status=$?
if [ $status -ne 0 ]; then
fail "Java command exited with exit status $status"
fi
if [ ! -f "${DUMPFILE}" ]; then
fail "Dump file was not created: ${DUMPFILE}"
fi
verify_heapdump ${DUMPFILE}
if [ $? -ne 0 ]; then
fail "Verification of heap dump failed"
fi
pass

View File

@ -0,0 +1,23 @@
#
# Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
exclusiveAccess.dirs=.

View File

@ -0,0 +1,45 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
*
* @summary converted from VM testbase heapdump/OnOOMToFileMetaspace.
* VM testbase keywords: [heapdump, feature_heapdump, nonconcurrent, jdk, quick]
* VM testbase readme:
* DESCRIPTION
* This test verifies -XX:+HeapDumpOnOutOfMemory VM option. It fills
* metaspace with classes till OutOfMemoryError is thrown and then
* verifies create heap dump with HprofParser.
* COMMENTS
* This test uses -XX:HeapDumpPath= option pointing to file.
*
* @library /vmTestbase
* /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @build jdk.test.lib.hprof.HprofParser
* heapdump.share.EatMemory
* @run shell/timeout=300 run.sh
*/

View File

@ -0,0 +1,53 @@
#!/bin/sh
#
# Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
. $TESTSRC/../share/common.sh
JAVA_OPTS="${JAVA_OPTS} -XX:-UseGCOverheadLimit -XX:MaxMetaspaceSize=64m"
DUMPFILE=${DUMPBASE}/java.hprof
rm -f ${DUMPFILE}
JAVA_OPTS="${JAVA_OPTS} -Xmx`get_max_heap_size $JAVA_OPTS`"
${JAVA} ${JAVA_OPTS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DUMPFILE} heapdump.share.EatMemory -metaspace
status=$?
if [ $status -ne 0 ]; then
fail "Java command exited with exit status $status"
fi
if [ ! -f "${DUMPFILE}" ]; then
fail "Dump file was not created: ${DUMPFILE}"
fi
verify_heapdump ${DUMPFILE}
if [ $? -ne 0 ]; then
fail "Verification of heap dump failed"
fi
pass

View File

@ -0,0 +1,23 @@
#
# Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
exclusiveAccess.dirs=.

View File

@ -0,0 +1,46 @@
/*
* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
*
* @summary converted from VM testbase heapdump/OnOOMToPath.
* VM testbase keywords: [heapdump, feature_heapdump, nonconcurrent, jdk, quick]
* VM testbase readme:
* DESCRIPTION
* This test verifies -XX:+HeapDumpOnOutOfMemory VM option. It
* fills the heap with objects of different types till OutOfMemoryError
* and then verifies created heap dump with HprofParser.
* COMMENTS
* This test uses -XX:HeapDumpPath= option pointing to directory in which
* heap dump file should be created.
*
* @library /vmTestbase
* /test/lib
* @run driver jdk.test.lib.FileInstaller . .
* @build jdk.test.lib.hprof.HprofParser
* heapdump.share.EatMemory
* @run shell/timeout=300 run.sh
*/

View File

@ -0,0 +1,57 @@
#!/bin/sh
#
# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
. $TESTSRC/../share/common.sh
JAVA_OPTS="${JAVA_OPTS} -XX:-UseGCOverheadLimit"
DUMPPATH=${DUMPBASE}/dumps
rm -rf ${DUMPPATH}
mkdir -p ${DUMPPATH}
JAVA_OPTS="${JAVA_OPTS} -Xmx`get_max_heap_size $JAVA_OPTS`"
${JAVA} ${JAVA_OPTS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DUMPPATH} heapdump.share.EatMemory
status=$?
if [ $status -ne 0 ]; then
fail "Java command exited with exit status $status"
fi
DUMPFILE=`ls ${DUMPPATH}/*`
if [ ! -f "${DUMPFILE}" ]; then
fail "Dump file was not created: $DUMPPATH/\*"
fi
verify_heapdump ${DUMPFILE}
if [ $? -ne 0 ]; then
fail "Verification of heap dump failed"
fi
pass

View File

@ -0,0 +1,38 @@
Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation.
This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
version 2 for more details (a copy is included in the LICENSE file that
accompanied this code).
You should have received a copy of the GNU General Public License version
2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
or visit www.oracle.com if you need additional information or have any
questions.
heapdump/JMapHeap
test for heapdump for jmap on live process
heapdump/JMapHeapCore
test for heap for jmap on core file
heapdump/JMapMetaspace
test for heapdump for jmap on live process, fills metaspace with classes
heapdump/JMapMetaspaceCore
test for heap for jmap on core file, fills metaspace with classes
heapdump/OnOOMToFile
test for -XX:+HeapDumpOnOutOfMemoryError and -XX:HeapDumpPath option
for file. This test fills heap with objects of different types.
heapdump/OnOOMToFileMetaspace
the same test as OnOOMToFile, but it fills metaspace with classes
heapdump/OnOOMToPath
the same test as OnOOMToFile for -XX:HeapDumpPath option that points to directory
heapdump/OnOOMRun
test for -XX:OnOutOfMemoryError option

View File

@ -0,0 +1,262 @@
/*
* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package heapdump.share;
import java.util.List;
import java.util.ArrayList;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Random;
import vm.share.ProcessUtils;
import java.util.LinkedList;
import nsk.share.gc.gp.classload.GeneratedClassProducer;
/**
* This test eats memory by generating random garbage.
* <p>
* This program can eat either heap or metaspace using
* interned strings depending on parameter metaspace. After this, it
* can also force JVM to show dump, dump core or execute some command.
* The following command line switches are supported:
* <p>
* "-sleepTime" time to sleep
* "-signal" show dump after OOM
* "-metaspace" eat metaspace
* "-core" dump core after OOM
* "-exec command" execute command after OOM
*/
public class EatMemory {
private long sleepTime;
private boolean signal;
private boolean metaspace;
private boolean core;
private String exec;
private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
private long initialFactor = 50;
private long minChunk = 1000;
private long factor = 5;
private long chunk;
private Runtime runtime = Runtime.getRuntime();
private int n = 0;
private final int arrayExtraSize = 12;
private final int stringLength = 128;
private byte[] reserved = new byte[(int) (runtime.maxMemory() / 20)];
private List storage = new ArrayList();
private List strings = new ArrayList();
/**
* @param sleepTime time to sleep
* @param signal true if need to force JVM to show dump (Ctrl-Break / Ctrl-/) after OOM
* @param metaspace true if need to eat metaspace
* @param core true if need to force JVM to dump core
* @param exec command to execute after OOM
*/
public EatMemory(long sleepTime, boolean signal, boolean metaspace, boolean core, String exec) {
this.sleepTime = sleepTime;
this.signal = signal;
this.metaspace = metaspace;
this.core = core;
this.exec = exec;
}
private int getSize(long chunk, long factor) {
return (int) Math.min(Integer.MAX_VALUE, (chunk - arrayExtraSize) / factor);
}
private Object create(long chunk) {
switch (++n % 8) {
case 0:
return new byte[getSize(chunk, 1)];
case 1:
return new short[getSize(chunk, 2)];
case 2:
return new char[getSize(chunk, 2)];
case 3:
return new boolean[getSize(chunk, 1)];
case 4:
return new long[getSize(chunk, 8)];
case 5:
return new float[getSize(chunk, 4)];
case 6:
return new double[getSize(chunk, 8)];
case 7:
return new Object[getSize(chunk, 16)];
default:
// Should never happen
return null;
}
}
public void eatHeap() {
try {
int[][] arrays = new int[Integer.MAX_VALUE / 2][];
for (int i = 0; ; ++i) {
arrays[i] = new int[Integer.MAX_VALUE / 2];
}
} catch (OutOfMemoryError x) {
reserved = null;
}
}
public void eatMetaspace() {
try {
System.out.println("Starting eating metaspace...");
GeneratedClassProducer gp = new GeneratedClassProducer();
List<Class> lst = new LinkedList<Class>();
System.out.println("... Oh, so tasty!");
while (true) {
lst.add(gp.create(0));
}
} catch (OutOfMemoryError e) {
}
}
public void eatMemory() throws IOException {
if (metaspace)
eatMetaspace();
else
eatHeap();
reserved = null;
}
/**
* Sleep some time to give system time to process a signal, start
* process, etc.
*/
private void sleepSome() {
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
}
}
/**
* Throws an exception if execution was not successful.
*/
private void execute() throws IOException, InterruptedException {
int pid = ProcessUtils.getPid();
if (pid < 0) {
throw new RuntimeException("Negative pid " + pid + "; Failed to executed " + exec);
}
exec = exec.replaceAll("%p", Integer.toString(pid));
System.out.println("Executing " + exec);
Process process = Runtime.getRuntime().exec(exec);
sleepSome();
process.waitFor();
StringBuilder sb = copy(process.getInputStream(), System.out);
sb.append(copy(process.getErrorStream(), System.out));
if (process.exitValue() != 0) {
// trying provide as much informative failure string
// hoping, it will be the last line in the error stream...
String failureCause = "Unknown";
String allTheOutput = sb.toString();
String[] lines = allTheOutput.split(System.getProperty("line.separator"));
for (int i = lines.length - 1; i >= 0; i--) {
// Check that string is not empty
if (!lines[i].trim().equals("")) {
failureCause = lines[i];
break;
}
}
throw new RuntimeException(failureCause);
}
}
private StringBuilder copy(InputStream in, OutputStream out) throws IOException {
byte[] buff = new byte[1000];
StringBuilder sb = new StringBuilder();
while (in.available() != 0) {
n = in.read(buff, 0, buff.length);
out.write(buff, 0, n);
sb.append(new String(buff, 0, n));
}
return sb;
}
public void run() throws Exception {
eatMemory();
if (signal) {
ProcessUtils.sendCtrlBreak();
sleepSome();
}
if (exec != null) {
execute();
}
if (core) {
/*
* We try to dump core here.
* On Unix systems a signal is sent to the process. We need to wait some time
* to give time to process it. On Windows systems, core dump is not supported
* and we just do not do anything in this case.
*/
boolean res = ProcessUtils.dumpCore();
if (res) {
sleepSome();
throw new RuntimeException("Signal sent, but core was not dumped");
}
}
}
public static void main(String[] args) throws Exception {
long sleepTime = 5000;
boolean signal = false;
boolean metaspace = false;
boolean core = false;
String exec = null;
for (int i = 0; i < args.length; ++i) {
if (args[i].equalsIgnoreCase("-sleepTime")) {
if (++i < args.length) {
long time = Long.parseLong(args[i]);
if (time != 0)
sleepTime = time;
} else
throw new RuntimeException("Argument expected after -sleepTime");
}
if (args[i].equalsIgnoreCase("-signal"))
signal = true;
if (args[i].equalsIgnoreCase("-metaspace"))
metaspace = true;
if (args[i].equalsIgnoreCase("-core"))
core = true;
if (args[i].equalsIgnoreCase("-exec")) {
if (++i < args.length)
exec = args[i];
else
throw new RuntimeException("Argument expected after -exec");
}
}
new EatMemory(sleepTime, signal, metaspace, core, exec).run();
}
}

View File

@ -0,0 +1,187 @@
#!/bin/bash
# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
# This script contains useful functions for testing heapdump
# feature of VM.
: ${JAVA:="$TESTJAVA/bin/java"}
: ${JAVA_OPTS:="$TESTJAVAOPTS $TESTVMOPTS -cp $TESTCLASSPATH"}
: ${CP:="$TESTCLASSPATH"}
: ${TEST_CLEANUP:="false"}
: ${JMAP:="$TESTJAVA/bin/jmap"}
: ${JHSDB:="$TESTJAVA/bin/jhsdb"}
export PATH=$PATH:$TESTNATIVEPATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TESTNATIVEPATH
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$TESTNATIVEPATH
if [ -z "${JAVA}" ]; then
echo JAVA variable is not set.
exit 1
fi
if [ -n "${testWorkDir}" ]; then
cd ${testWorkDir}
fi
if [ -z "${DUMPBASE}" ]; then
DUMPBASE=.
fi
if [ -z "$DEBUGGER_JAVA_OPTS" ]; then
DEBUGGER_JAVA_OPTS="$JAVA_OPTS"
fi
CORE_SUPPORTED=1
for opt in $DEBUGGER_JAVA_OPTS; do
case $opt in
-D*)
JMAP="$JMAP -J$opt"
;;
esac
done
export CORE_SUPPORTED
# Verify heap dump
# This function starts HprofParser and looks for message "Server is ready."
# in output, in which case heap dump is verified.
verify_heapdump() {
filename=$1
shift
echo Verifying ${filename}
echo ${JAVA} -cp $CP jdk.test.lib.hprof.HprofParser ${filename}
${JAVA} -cp $CP jdk.test.lib.hprof.HprofParser ${filename}
}
cleanup() {
result="$1"
if [ -n "$DUMPFILE" ]; then
if [ "$TEST_CLEANUP" != "false" ]; then
rm -f "$DUMPFILE"
else
gzip "$DUMPFILE" || true
fi
fi
}
fail() {
message="$1"
res=1
echo "$message"
echo "TEST FAILED"
cleanup $res
exit 1
}
pass() {
message="$1"
if [ -n "$message" ]; then
echo "$message"
fi
echo "TEST PASSED"
cleanup 0
exit 0
}
# Parse VM options that have size argument and return it's value in bytes.
# Function applicable to -Xmn, -Xms, -Xms and all possible -XX: options.
parse_heap_size() {
OPTION=$1
SIZE=0
MULTIPLIER=0
# On Solaris sed don't support '+' quantificator, so <smth><smth>* is used.
# There is no support for '?' too, so <smth>* is used instead.
# Generally speaking, there sed on Solaris support only basic REs.
case "$OPTION" in
-Xm*)
SIZE=`echo $OPTION | sed -e 's#-Xm[xns]\([0-9][0-9]*\).*#\1#'`
MULTIPLIER=`echo $OPTION | sed -e 's#-Xm[xns][0-9][0-9]*\([kKmMgG]*\)#\1#'`
;;
-XX*)
SIZE=`echo $OPTION | sed -e 's#[^=][^=]*=\([0-9][0-9]*\).*#\1#'`
MULTIPLIER=`echo $OPTION | sed -e 's#[^=][^=]*=[0-9][0-9]*\([kKmMgG]*\)#\1#'`
;;
esac
case "$MULTIPLIER" in
k|K)
SIZE=$(( SIZE * 1024 ))
;;
m|M)
SIZE=$(( SIZE * 1024 * 1024 ))
;;
g|G)
SIZE=$(( SIZE * 1024 * 1024 * 1024 ))
;;
esac
echo $SIZE
}
# Derivate max heap size from passed option list.
get_max_heap_size() {
MaxHeapSize=
InitialHeapSize=
MaxNewSize=
NewSize=
OldSize=
for OPTION in "$@"; do
case "$OPTION" in
-Xmx*|-XX:MaxHeapSize=*)
MaxHeapSize=`parse_heap_size $OPTION`
;;
-Xms*|-XX:InitialHeapSize=*)
InitialHeapSize=`parse_heap_size $OPTION`
;;
-Xmn*|-XX:MaxNewSize=*)
MaxNewSize=`parse_heap_size $OPTION`
;;
-XX:NewSize=*)
NewSize=`parse_heap_size $OPTION`
;;
-XX:OldSize=*)
OldSize=`parse_heap_size $OPTION`
;;
esac
done
if [ -n "$MaxHeapSize" ]; then
echo "$MaxHeapSize"
elif [ -n "$InitialHeapSize" ]; then
echo "$InitialHeapSize"
elif [ -n "$MaxNewSize" -a -n "$OldSize" ]; then
echo $(( MaxHeapSize + OldSize ))
elif [ -n "$NewSize" -a -n "$OldSize" ]; then
echo $(( 2 * NewSize + OldSize ))
elif [ -n "$OldSize" ]; then
echo $(( 2 * OldSize ))
elif [ -n "$MaxNewSize" ]; then
echo $(( 2 * MaxNewSize ))
elif [ -n "$NewSize" ]; then
echo $(( 3 * NewSize ))
else
echo "128M"
fi
}