容器中JVM获取真实的CPU核数
容器中JVM获取真实的CPU核数
基于 libsysconfcpus的方案,可以为各个版本的JDK提供一个通用的解决方案。
libsysconfcpus.so的原理是截获JVM获取CPU核数所用的系统调用sysconf(_SC_NPROCESSORS_CONF),改为读取环境变量LIBSYSCONFCPUS返回。
首先,从libsysconfcpus获取并编译so文件,放入镜像中。
然后,编写类似的脚本,完成两件事情:
- 定义环境变量LD_PRELOAD,将libsysconfcpus.so放在最前面达到截获的目的。 
- 我们的系统在部署容器的时候,会额外传入一个环境变量"CONTAINER_CORE_LIMIT"代表分配的CPU核数(需按自己的情况修改),脚本将其转换为libsysconfcpus所需的环境变量。 
注意:当JVM是以-server启动时,至少需要2核,否则在启动时会被死锁。
#!/bin/sh if [ "x$CONTAINER_CORE_REQUEST" != "x" ]; then
LIBSYSCONFCPUS="$CONTAINER_CORE_REQUEST"
if [ ${LIBSYSCONFCPUS} -lt ]; then
LIBSYSCONFCPUS=
fi
export LIBSYSCONFCPUS
fi
export LD_PRELOAD="/usr/local/lib/libsysconfcpus.so:$LD_PRELOAD"
dockerfile 中添加
RUN git clone https://github.com/obmarg/libsysconfcpus.git /opt/libsysconfcpus && \
cd /opt/libsysconfcpus && \
./configure && \
make && make install && rm -rf /opt/libsysconfcpus
容器中JVM获取真实的CPU核数的更多相关文章
- 容器中的JVM资源该如何被安全的限制?
		前言 Java与Docker的结合,虽然更好的解决了application的封装问题.但也存在着不兼容,比如Java并不能自动的发现Docker设置的内存限制,CPU限制. 这将导致JVM不能稳定服务 ... 
- 从Spring容器中获取Bean。ApplicationContextAware
		引言:我们从几个方面有逻辑的讲述如何从Spring容器中获取Bean.(新手勿喷) 1.我们的目的是什么? 2.方法是什么(可变的细节)? 3.方法的原理是什么(不变的本质)? 1.我们的目的是什么? ... 
- 获取Spring容器中的Bean
		摘要 SpringMVC框架开发中可能会在Filter或Servlet中用到spring容器中注册的java bean 对象,获得容器中的java bean对象有如下方法 Spring中的Applic ... 
- spring源码 — 二、从容器中获取Bean
		getBean 上一节中说明了容器的初始化,也就是把Bean的定义GenericBeanDefinition放到了容器中,但是并没有初始化这些Bean.那么Bean什么时候会初始化呢? 在程序第一个主 ... 
- 通过JNDI从服务器容器中获取资源_Spring JNDI+Mysql+Tomcat
		通过JNDI从服务器容器中获取DataSource资源 (由容器管理,不要关闭它,容器自己会处理)上一篇我们使用的是dbcp,这里使用JNDI: 使用JNDI连接数据: 在Spring可以注释 < ... 
- FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean
		前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ... 
- [十]SpringBoot 之 普通类获取Spring容器中的bean
		我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ... 
- springboot中spring.profiles.active来引入多个properties文件 & Springboot获取容器中对象
		1. 引入多个properties文件 很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据, ... 
- Spring:获取容器中的Bean
		某些情况下我们要获取 IOC 容器中指定注解.类型.名字的 Bean 要获取 IOC 容器中指定条件的 Bean 可以通过 ApplicationContext 相应的方法 @Autowired pr ... 
随机推荐
- Gradle学习笔记(1)创建简单的Java项目
			Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置.当前 ... 
- 分部类,分部方法 - 修饰符partial
			一.分部类 什么是部分类呢?简单来说就是将一个类型或方法拆分到两个或多个源文件中,每个源文件只包含类型定义的一部分. 当使用自动生成的源时,无须重新创建源文件便可将代码添加到类中.Visual Stu ... 
- ef学习一
			学习内容:https://www.cnblogs.com/5ishare/p/5801229.html 注意点: 1.NuGet程序包引入ef,使用DbSet<>必须引入ef.本例EFCo ... 
- VUE页面刷新问题
			1). location方式 location.reload() 缺点:刷新页面,卡白 2). router方式 this.$router.go(0) 缺点:同一问题,比一好点 3). provide ... 
- 关于wsgi协议的理解
			基础概念 首先要了解 WSGI 规范的概念,WSGI(Web Server Gateway Interface)规范描述了web server(Gunicorn,uWSGI等)如何与web appli ... 
- python之黏包和黏包解决方案
			黏包现象主要发生在TCP连接, 基于TCP的套接字客户端往服务端上传文件,发送时文件内容是按照一段一段的字节流发送的,在接收方看来,根本不知道该文件的字节流从何处开始,在何处结束. 两种黏包现象: 1 ... 
- React 入门学习笔记整理(三)—— 组件
			1.定义组件 1)函数组件 function GreateH(props){ return <div> <h2>hello,{props.name}</h2> &l ... 
- loadrunner 脚本开发-定义全局变量
			脚本开发-定义全局变量 by:授客 QQ:1033553122 如果参数是全局的,在脚本中的任何一个Action中都可以使用,变量一般是局部的,如果跨Action调用会出现未声明的错误. 打开Scri ... 
- TraceView工具的使用
			一.TraceView工具如何使用 TraceView有4种启动/关闭分析方式: (1) 第一种使用方法演示 1. 选择跟踪范围 在想要根据的代码片段之间使用以下两句代码 Debug.startMet ... 
- [iOS] KVC 和 KVO
			开发iOS经常会看见KVO和KVC这两个概念,特地了解了一下. 我的新博客wossoneri.com link KVC Key Value Coding KVC是一种用间接方式访问类的属性的机制.比如 ... 
