jstack, jconsole, jinfo, jmap, jdb, jstat
-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime
java -verbose:gc -Xms20m -Xmx20m -Xmn10m -XX:SurvivorRatio=8 -XX:+PrintGCD
etails MinorGCTest
-XX:PretenureSizeThreshold
//allocate directly on Old Generaion, good for big object
-XX:MaxTenuringThreshold -XX:PrintTenuringDistribution
-XX:HandlePromotionFailure
public class MinorGCTest {
/**
* -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime
*/
public static void main(String[] args) {
System.out.println(_1MB*3);
//MinorGCTest.testAllocation();
//MinorGCTest.testPretenureSizeThreshold();
MinorGCTest.testOutMomery();
}
private static final int _1MB = 1024*1024;
/**
* -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:+PrintGCDetails
*/
public static void testAllocation() {
byte[] allocation1, allocation2, allocation3, allocation4;
allocation1 = new byte[2 * _1MB];
allocation2 = new byte[2 * _1MB];
allocation3 = new byte[2 * _1MB];
allocation4 = new byte[4 * _1MB];
}
/**
* -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=3145728 -XX:+PrintGCDetails
*/
public static void testPretenureSizeThreshold() {
byte[] allocation;
allocation = new byte[4 * _1MB];
}
/**
* -verbose:gc -Xms10M -Xmx10M -Xmn5M -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:ErrorFile=C:/temp/yw04009/D_YW/code/java_error_%p.log
*/
public static void testOutMomery() {
byte[] allocation;
allocation = new byte[10 * _1MB];
}
}
如果有一个严重的错误引起Java进程非正常退出,我们叫Crash,这时候会产生一个日志文件。缺省情况下,这个
文件会产生在工作目录下。但是,可以在Java启动参数通过下面的设置,来改变这个文件的位置和命名规则。例如:
java -XX:ErrorFile=/var/log/java/java_error_%p.log
就将这个错误文件放在/var/log/java下,并且以java_error_pid.log的形式出现。
看jvm的gc日志,在catalina.sh文件中加入jvm参数:
-Xloggc:gclog.vgc -XX:+PrintGCTimeStamps -XX:-PrintGCDetails -XX:+UseConcMarkSweepGC