我一直在使用检测类“SizeOfAgent”来计算我的 play 2.0.4 环境的内存需求。为了做到这一点,我将“-javaagent:lib\sizeof.jar”放在文件 framework\build.bat 中的 java 命令行上。这个 jar 文件有一个清单文件,其中包含对 sizeof.agent 的预主类配置。 SizeOfAgent 这工作正常,我一直在我的应用程序的某些组件上使用 fullSizeOf 方法。
升级到play 2.1.0版本后,此功能不再起作用。我收到错误消息:play.api.UnexpectedException:意外异常 [IllegalStateException:无法访问检测环境。请检查是否在 java 的“-javaagent”命令行参数中指定了包含 SizeOfAgent 类的 jar 文件。]
生成此错误是因为“静态 Instrumentation inst”返回 null:
public static long sizeOf(Object o, boolean print) {
if(inst == null) {
throw new IllegalStateException("Can not access instrumentation environment.\n" +
"Please check if jar file containing SizeOfAgent class is \n" +
"specified in the java's \"-javaagent\" command line argument.");
}
if (print) {
System.out.println(o.getClass().getName() + " : " + inst.getObjectSize(o));
}
return inst.getObjectSize(o);
}
有没有人尝试使用带有 play 2.1.0 的仪器类?