Deceive the JVM about the number of available cores (on linux)

后端 未结 2 506
太阳男子
太阳男子 2020-12-15 23:37

In some purpose it is needed to make JVM think about it runs on machine with Ncores on board instead of real number of cores (e.g. 4 c

2条回答
  •  有刺的猬
    2020-12-15 23:46

    In order to make Runtime.getRuntime().availableProcessors() return whatever you want, you can override JVM_ActiveProcessorCount function using LD_PRELOAD trick. Here is a tiny program to do this:

    #include 
    #include 
    
    int JVM_ActiveProcessorCount(void) {
        char* val = getenv("_NUM_CPUS");
        return val != NULL ? atoi(val) : sysconf(_SC_NPROCESSORS_ONLN);
    }
    

    First, make a shared library of this:

    gcc -O3 -fPIC -shared -Wl,-soname,libnumcpus.so -o libnumcpus.so numcpus.c
    

    Then run Java as follows:

    $ LD_PRELOAD=/path/to/libnumcpus.so _NUM_CPUS=2 java AvailableProcessors
    

提交回复
热议问题