minqi@2964: ## minqi@2964: ## @test @(#)test6941923.sh minqi@2964: ## @bug 6941923 minqi@2964: ## @summary test new added flags for gc log rotation minqi@2964: ## @author yqi minqi@2964: ## @run shell test6941923.sh minqi@2964: ## minqi@2964: minqi@2964: ## skip on windows minqi@2964: OS=`uname -s` minqi@2964: case "$OS" in coleenp@3985: SunOS | Linux | Darwin ) minqi@2964: NULL=/dev/null minqi@2964: PS=":" minqi@2964: FS="/" minqi@2964: ;; coleenp@4022: Windows_* | CYGWIN_* ) minqi@2964: echo "Test skipped for Windows" minqi@2964: exit 0 minqi@2964: ;; minqi@2964: * ) minqi@2964: echo "Unrecognized system!" minqi@2964: exit 1; minqi@2964: ;; minqi@2964: esac minqi@2964: minqi@2964: if [ "${JAVA_HOME}" = "" ] minqi@2964: then minqi@2964: echo "JAVA_HOME not set" minqi@2964: exit 0 minqi@2964: fi minqi@2964: kevinw@3777: $JAVA_HOME/bin/java ${TESTVMOPTS} -version > $NULL 2>&1 minqi@2964: minqi@2964: if [ $? != 0 ]; then minqi@2964: echo "Wrong JAVA_HOME? JAVA_HOME: $JAVA_HOME" minqi@2964: exit $? minqi@2964: fi minqi@2964: minqi@2964: # create a small test case minqi@2964: testname="Test" minqi@2964: if [ -e ${testname}.java ]; then minqi@2964: rm -rf ${testname}.* minqi@2964: fi minqi@2964: minqi@2964: cat >> ${testname}.java << __EOF__ minqi@2964: import java.util.Vector; minqi@2964: minqi@2964: public class Test implements Runnable minqi@2964: { minqi@2964: private boolean _should_stop = false; minqi@2964: minqi@2964: public static void main(String[] args) throws Exception { minqi@2964: minqi@2964: long limit = Long.parseLong(args[0]) * 60L * 1000L; // minutes minqi@2964: Test t = new Test(); minqi@2964: t.set_stop(false); minqi@2964: Thread thr = new Thread(t); minqi@2964: thr.start(); minqi@2964: minqi@2964: long time1 = System.currentTimeMillis(); minqi@2964: long time2 = System.currentTimeMillis(); minqi@2964: while (time2 - time1 < limit) { minqi@2964: try { minqi@2964: Thread.sleep(2000); // 2 seconds minqi@2964: } minqi@2964: catch(Exception e) {} minqi@2964: time2 = System.currentTimeMillis(); minqi@2964: System.out.print("\r... " + (time2 - time1)/1000 + " seconds"); minqi@2964: } minqi@2964: System.out.println(); minqi@2964: t.set_stop(true); minqi@2964: } minqi@2964: public void set_stop(boolean value) { _should_stop = value; } minqi@2964: public void run() { minqi@2964: int cap = 20000; minqi@2964: int fix_size = 2048; minqi@2964: int loop = 0; minqi@2964: Vector< byte[] > v = new Vector< byte[] >(cap); minqi@2964: while(!_should_stop) { minqi@2964: byte[] g = new byte[fix_size]; minqi@2964: v.add(g); minqi@2964: loop++; minqi@2964: if (loop > cap) { minqi@2964: v = null; minqi@2964: cap *= 2; minqi@2964: if (cap > 80000) cap = 80000; minqi@2964: v = new Vector< byte[] >(cap); minqi@2964: } minqi@2964: } minqi@2964: } minqi@2964: } minqi@2964: __EOF__ minqi@2964: minqi@2964: msgsuccess="succeeded" minqi@2964: msgfail="failed" minqi@2964: gclogsize="16K" minqi@2964: filesize=$((16*1024)) minqi@2964: $JAVA_HOME/bin/javac ${testname}.java > $NULL 2>&1 minqi@2964: minqi@2964: if [ $? != 0 ]; then minqi@2964: echo "$JAVA_HOME/bin/javac ${testname}.java $fail" minqi@2964: exit -1 minqi@2964: fi minqi@2964: minqi@2964: # test for 2 minutes, it will complete circulation of gc log rotation minqi@2964: tts=2 minqi@2964: logfile="test.log" minqi@2964: hotspotlog="hotspot.log" minqi@2964: minqi@2964: if [ -e $logfile ]; then minqi@2964: rm -rf $logfile minqi@2964: fi minqi@2964: minqi@2964: #also delete $hotspotlog if it exists minqi@2964: if [ -f $hotspotlog ]; then minqi@2964: rm -rf $hotspotlog minqi@2964: fi minqi@2964: minqi@2964: options="-Xloggc:$logfile -XX:+UseConcMarkSweepGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=$gclogsize" minqi@2964: echo "Test gc log rotation in same file, wait for $tts minutes ...." kevinw@3777: $JAVA_HOME/bin/java ${TESTVMOPTS} $options $testname $tts minqi@2964: if [ $? != 0 ]; then minqi@2964: echo "$msgfail" minqi@2964: exit -1 minqi@2964: fi minqi@2964: minqi@2964: # rotation file will be $logfile.0 minqi@2964: if [ -f $logfile.0 ]; then minqi@2964: outfilesize=`ls -l $logfile.0 | awk '{print $5 }'` minqi@2964: if [ $((outfilesize)) -ge $((filesize)) ]; then minqi@2964: echo $msgsuccess minqi@2964: else minqi@2964: echo $msgfail minqi@2964: fi minqi@2964: else minqi@2964: echo $msgfail minqi@2964: exit -1 minqi@2964: fi minqi@2964: minqi@2964: # delete log file minqi@2964: rm -rf $logfile.0 minqi@2964: if [ -f $hotspotlog ]; then minqi@2964: rm -rf $hotspotlog minqi@2964: fi minqi@2964: minqi@2964: #multiple log files minqi@2964: numoffiles=3 minqi@2964: options="-Xloggc:$logfile -XX:+UseConcMarkSweepGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=$numoffiles -XX:GCLogFileSize=$gclogsize" minqi@2964: echo "Test gc log rotation in $numoffiles files, wait for $tts minutes ...." kevinw@3777: $JAVA_HOME/bin/java ${TESTVMOPTS} $options $testname $tts minqi@2964: if [ $? != 0 ]; then minqi@2964: echo "$msgfail" minqi@2964: exit -1 minqi@2964: fi minqi@2964: minqi@2964: atleast=0 # at least size of numoffile-1 files >= $gclogsize minqi@2964: tk=0 minqi@2964: while [ $(($tk)) -lt $(($numoffiles)) ] minqi@2964: do minqi@2964: if [ -f $logfile.$tk ]; then minqi@2964: outfilesize=`ls -l $logfile.$tk | awk '{ print $5 }'` minqi@2964: if [ $(($outfilesize)) -ge $(($filesize)) ]; then minqi@2964: atleast=$((atleast+1)) minqi@2964: fi minqi@2964: fi minqi@2964: tk=$((tk+1)) minqi@2964: done minqi@2964: minqi@2964: rm -rf $logfile.* minqi@2964: rm -rf $testname.* minqi@2964: rm -rf $hotspotlog minqi@2964: minqi@2964: if [ $(($atleast)) -ge $(($numoffiles-1)) ]; then minqi@2964: echo $msgsuccess minqi@2964: else minqi@2964: echo $msgfail minqi@2964: exit -1 minqi@2964: fi