JDK1.8u222 的cpu获取方式
int OSContainer::active_processor_count() {
int quota_count = 0, share_count = 0;
int cpu_count, limit_count;
int result;
cpu_count = limit_count = os::Linux::active_processor_count();
int quota = cpu_quota();
int period = cpu_period();
int share = cpu_shares();
if (quota > -1 && period > 0) {
quota_count = ceilf((float)quota / (float)period);
if (PrintContainerInfo) {
tty->print_cr("CPU Quota count based on quota/period: %d", quota_count);
}
}
if (share > -1) {
share_count = ceilf((float)share / (float)PER_CPU_SHARES);
if (PrintContainerInfo) {
tty->print_cr("CPU Share count based on shares: %d", share_count);
}
}
// If both shares and quotas are setup results depend
// on flag PreferContainerQuotaForCPUCount.
// If true, limit CPU count to quota
// If false, use minimum of shares and quotas
if (quota_count !=0 && share_count != 0) {
if (PreferContainerQuotaForCPUCount) {
limit_count = quota_count;
} else {
limit_count = MIN2(quota_count, share_count);
}
} else if (quota_count != 0) {
limit_count = quota_count;
} else if (share_count != 0) {
limit_count = share_count;
}
result = MIN2(cpu_count, limit_count);
if (PrintContainerInfo) {
tty->print_cr("OSContainer::active_processor_count: %d", result);
}
return result;
}
JDK1.8u131 的cpu获取方式
int os::active_processor_count() {
// Linux doesn't yet have a (official) notion of processor sets,
// so just return the number of online processors.
int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
assert(online_cpus > 0 && online_cpus <= processor_count(), "sanity check");
return online_cpus;
}
容器场景需要注意jdk版本,造成的线程数不一致,机器负载太高等情况
本文分享自微信公众号 - 云服务圈(heidcloud)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。