[ 
https://issues.apache.org/jira/browse/TEZ-3105?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15141826#comment-15141826
 ] 

Gopal V commented on TEZ-3105:
------------------------------

[~gss2002]: the final is still in the hot-path.

I recommend something along the lines of 

{code}
private static final Method getCommittedVirtualMemorySize = 
getMxBeanMethod("getCommittedVirtualMemorySize");
private static final Method getProcessCpuTime = 
getMxBeanMethod("getProcessCpuTime");

private static Method getMxBeanMethod(String string) {
    final String JAVA_VENDOR_NAME = System.getProperty("java.vendor");
    final boolean IBM_JAVA = JAVA_VENDOR_NAME.contains("IBM");
    try {
      final Class<?> mbeanClazz;
      if (IBM_JAVA) {
        mbeanClazz = Class.forName("com.ibm.management.OperatingSystemMXBean");
      } else {
        mbeanClazz = Class.forName("com.sun.management.OperatingSystemMXBean");
      }
      final Method vmemMethod = mbeanClazz
          .getMethod("getCommittedVirtualMemorySize");
      return vmemMethod;
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
  }

  @Override
  public long getCumulativeCpuTime() {
    if (getProcessCpuTime == null) {
      return -1;
    }

    try {
      // convert to milliseconds
      return TimeUnit.MILLISECONDS.convert(
          (Long) getProcessCpuTime.invoke(osBean), TimeUnit.NANOSECONDS);
    } catch (InvocationTargetException ite) {
      return -1;
    }
  }
{code}

So that the method lookup is out of the hot-path and the JIT will put a 
trampoline for the .invoke(), which will get compiled into native code after 
approx ~16 hits.

> Tez does not run on IBM JDK 7 or 8
> ----------------------------------
>
>                 Key: TEZ-3105
>                 URL: https://issues.apache.org/jira/browse/TEZ-3105
>             Project: Apache Tez
>          Issue Type: Bug
>    Affects Versions: 0.7.0
>            Reporter: Greg Senia
>            Assignee: Greg Senia
>              Labels: ibm, ibm-jdk
>         Attachments: TEZ-3105-2.patch, TEZ-3105.patch
>
>
> When testing Hive on Tez with IBM JDK 7 and 8. The following issue was 
> discovered:
> 2016-02-08 22:25:22,869 [ERROR] [main] |app.DAGAppMaster|: Error starting 
> DAGAppMaster
> java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
>       at 
> org.apache.hadoop.yarn.util.ResourceCalculatorProcessTree.getResourceCalculatorProcessTree(ResourceCalculatorProcessTree.java:225)
>       at 
> org.apache.tez.dag.app.DAGAppMaster.initResourceCalculatorPlugins(DAGAppMaster.java:347)
>       at 
> org.apache.tez.dag.app.DAGAppMaster.serviceInit(DAGAppMaster.java:371)
>       at 
> org.apache.hadoop.service.AbstractService.init(AbstractService.java:163)
>       at org.apache.tez.dag.app.DAGAppMaster$6.run(DAGAppMaster.java:2274)
>       at 
> java.security.AccessController.doPrivileged(AccessController.java:686)
>       at javax.security.auth.Subject.doAs(Subject.java:569)
>       at 
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
>       at 
> org.apache.tez.dag.app.DAGAppMaster.initAndStartAppMaster(DAGAppMaster.java:2271)
>       at org.apache.tez.dag.app.DAGAppMaster.main(DAGAppMaster.java:2086)
> Caused by: java.lang.reflect.InvocationTargetException
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:88)
>       at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57)
>       at java.lang.reflect.Constructor.newInstance(Constructor.java:436)
>       at 
> org.apache.hadoop.yarn.util.ResourceCalculatorProcessTree.getResourceCalculatorProcessTree(ResourceCalculatorProcessTree.java:221)
>       ... 9 more
> Caused by: java.lang.ClassCastException: 
> com.ibm.lang.management.ExtendedOperatingSystem incompatible with 
> com.sun.management.OperatingSystemMXBean
>       at 
> org.apache.tez.util.TezMxBeanResourceCalculator.<init>(TezMxBeanResourceCalculator.java:44)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to