In some purpose it is needed to make JVM
think about it runs on machine with N
cores on board instead of real number of cores (e.g. 4
c
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