在这篇文章中,我们将带领您了解处理UNIX,Linux和Windows的内存限制和地址空间的全貌,包括linux内存管理方式的相关情况。同时,我们还将为您介绍有关java获取ip地址linux/uni
在这篇文章中,我们将带领您了解处理UNIX,Linux和Windows的内存限制和地址空间的全貌,包括linux内存管理方式的相关情况。同时,我们还将为您介绍有关java 获取 ip 地址 linux/unix/Windows、linux – Docker容器中的内存限制和CPU限制、Linux/UNIX和Window平台上安装Mysql、Linux/UNIX和Window平台上安装Mysql_MySQL的知识,以帮助您更好地理解这个主题。
本文目录一览:- 处理UNIX,Linux和Windows的内存限制和地址空间(linux内存管理方式)
- java 获取 ip 地址 linux/unix/Windows
- linux – Docker容器中的内存限制和CPU限制
- Linux/UNIX和Window平台上安装Mysql
- Linux/UNIX和Window平台上安装Mysql_MySQL
处理UNIX,Linux和Windows的内存限制和地址空间(linux内存管理方式)
解决方法
一个过程的地址空间分为两部分,
用户空间:在标准32位x86_64架构上,最大可寻址内存为4GB,其中0x00000000到0xbfffffff =(3GB)的地址用于代码,数据段.当用户进程在用户或内核模式下执行时,可以解决该区域.
内核空间:类似地,0xc0000000到0xffffffff =(1GB)的地址用于内核的虚拟地址空间,并且只能在进程在内核模式下执行时才能解决.
在x86上拆分的特定地址空间由PAGE_OFFSET的值决定.参考Linux 3.11.1v page_32_types.h和page_64_types.h,页面偏移定义如下,
#define __PAGE_OFFSET _AC(CONfig_PAGE_OFFSET,UL)
其中Kconfig定义了默认值0xC0000000,也可以使用其他地址分割选项.
同样对于64位,
#define __PAGE_OFFSET _AC(0xffff880000000000,UL).
在64位架构上,由于巨大的地址空间,3G / 1G分离不再存在.根据源代码,最新的Linux版本已将上述偏移量作为偏移量.
当我看到我的64位x86_64架构时,32位进程可以拥有整个4GB的用户地址空间,而内核将保持4GB以上的地址范围.有趣的是,在现代64位x86_64 cpu上,并非所有地址线都被启用(或地址总线不够大),无法为我们提供2 ^ 64 = 16艾字节的虚拟地址空间.也许AMD64 / x86架构分别启用48/42低位,导致2 ^ 48 = 256TB / 2 ^ 42 = 4TB的地址空间.现在这确实提高了大量RAM的性能,同时出现了如何通过操作系统限制有效管理它的问题.
java 获取 ip 地址 linux/unix/Windows
package com.ysma.jobs.util;
import com.ysma.jobs.common.component.RedisManager;
import com.ysma.jobs.common.constants.CacheKeyConstants;
import com.ysma.jobs.common.dingtalk.ChatbotSend;
import com.ysma.jobs.service.XxlService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.concurrent.TimeUnit;
/**
* IP地址获取工具
* @Date: 2019/6/17 14:26
* modified by ysma 2019-06-28
*/
@DependsOn(value = {"redisManager", "chatbotSend", "xxlService"})
@Component
@Slf4j
public class IpAdressUtil {
@Autowired
private ChatbotSend chatbotSend;
@Autowired
private XxlService xxlService;
@Autowired
private RedisManager redisManager;
/**定义一个static的ip变量,使得其全栈可见*/
private static volatile String MACHINE_IP;
private final String OS_WINDOWS = "windows";
private final String OS_MAC = "mac";
public String getServerIp(){
if(StringUtils.isEmpty(MACHINE_IP)){
log.error("IpAddressUtil.getServerIp 为获取到服务器ip,MACHINE_IP:{}", MACHINE_IP);
return null;
}
return MACHINE_IP;
}
/**
* 同步指定执行机器的ip地址到redis,以便所有机器共享此信息,进行协同
* @param ip ip地址
*/
private void setJobRunIP(String ip){
String key = CacheKeyConstants.JOB_DEFAULT_RUN_IP;
boolean result = redisManager.set(key, ip);
log.info("IpAddressUtil.setJobRunIP set job running ip runIp:{}, result:{}" , ip, result);
}
/**
* 获取本地IP地址
* 操作系统的判断仅能判断出是何种操作系统,但是操作系统的版本就会有偏差
* 本需求仅涉及ip故忽略操作系统版本的偏差继续使用
*/
@PostConstruct
public void initIp() {
//
Thread initIpThread = new Thread(() -> {
//1.本地ip地址初始化
boolean goOn = true;
do {
MACHINE_IP = getMachineIp();
try {
goOn = StringUtils.isEmpty(MACHINE_IP);
if(goOn){//钉钉告警直到获取到ip地址
chatbotSend.sendMsg("请注意,scheduler应用当前未获取到ip地址! 5秒后重试");
TimeUnit.SECONDS.sleep(5);
}
} catch (Exception ex) {
log.error("IpAddressUtil.initIp Exception V_V", ex);
}
} while (goOn);//直到获取到本地ip 停止
//2.分布式指定执行ip初始化
try {
String executeIps = xxlService.getExecuteIps();
String[] split = executeIps.split(",");
if(StringUtils.isEmpty(executeIps)){
log.error("IpAddressUtil.initIp xxl未配置指定运行的ip地址信息,此处默认指定本机ip,是以最后启动的机器ip将获得执行权限");
setJobRunIP(MACHINE_IP);
} else {
setJobRunIP(split[0]);
}
Object runIp = redisManager.get(CacheKeyConstants.JOB_DEFAULT_RUN_IP);
log.info("IpAddressUtil.initIp 本机ip:{}, 指定运行ip:{}", MACHINE_IP,
runIp == null ? "": runIp.toString());
} catch (Exception ex) {
log.error("IpAddressUtil.initIp Exception V_V", ex);
}
});
initIpThread.setName("init-ip-thread");
initIpThread.start();
}
/**
* 判断何种操作系统
*/
private boolean isThisOS(String prefixName) {
String osName = System.getProperty("os.name");
return osName.toLowerCase().startsWith(prefixName);
}
/**
* 获取机器的IP地址
*/
private String getMachineIp() {
String ipString = null;
try {
if(isThisOS(OS_WINDOWS)){
ipString = InetAddress.getLocalHost().getHostAddress();
log.info("IpAddressUtil.getMachineIp windows os, ip:{}", ipString);
} else {
Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
boolean findFlag = false;
while (netInterfaces.hasMoreElements()) {
if(findFlag){
break;
}
NetworkInterface ni = netInterfaces.nextElement();
Enumeration<InetAddress> ips = ni.getInetAddresses();
while (ips.hasMoreElements()) {
InetAddress address = ips.nextElement();
if( address.isSiteLocalAddress()
&& !address.isLoopbackAddress() //127.开头的都是lookback地址
&& !address.getHostAddress().contains(":")){
ipString = address.getHostAddress();
findFlag = true;
break;
}
}
}
log.info("IpAddressUtil.getMachineIp {} os, ip:{}",
isThisOS(OS_MAC) ? "Mac" : "linux/unix",
ipString);
}
} catch (Exception ex) {
log.error("IpAddressUtil.getMachineIp error", ex);
}
return ipString;
}
}
linux – Docker容器中的内存限制和CPU限制
更新:
在stackoverflow上发现了很多关于这个主题的问题和讨论.虽然它们被标记为接受并由数千名用户启动,但它们似乎不是正确的答案.
我运行了一个具有资源限制的docker(版本1.13.1,build 092cba3)容器,如下所示:
docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup -m 4096M --cpuset-cpus='0' --cpus=1 --cpu-shares=256 -p $IMAGE_NAME
主机系统(RHEL 7)有4个内核和8G内存.基本上我想限制容器的可用内存和cpu.在成功启动容器后,我打开了bash并试图从容器中找到限制信息.但我无法获得正确的信息.
我试过这个:
sudo cat /proc/meminfo
结果是:
主机系统
MemTotal:8008812 kB
MemFree:7416404 kB
MemAvailable:7537332 kB
Docker容器
MemTotal:8008812 kB
MemFree:7318052 kB
MemAvailable:7498764 kB
同样,我想获得cpu限制:
grep -c ^processor /proc/cpuinfo
结果是:
主机系统4
Docker Image 4
似乎容器不能看到容器强制执行的cpu和内存限制.我还试图查询cgroup信息.
mkdir -p /tmp/memory
mount -n -t cgroup -o memory cgroup /tmp/memory
然后我查看cgroup文件:
[root@engrlab memory]# cat /tmp/memory/memory.limit_in_bytes
9223372036854771712
此数字大于主机系统的实际内存.
有没有办法验证资源约束是否已在容器中正确设置?如何从容器中找到资源约束信息?感谢任何建议.
解决方法:
我尝试这个命令这个我的docker托管它工作
docker run -it -d -m 100M –cpuset-cpus =’0′–cpus = 1 –cpu-shares = 256 –name testing ubuntu / bin / bash
docker stats testing
Linux/UNIX和Window平台上安装Mysql
所有平台的MysqL下载地址为:MySQL 下载. 挑选你需要的 MysqL Community Server 版本及对应的平台。
一、Linux/UNIX上安装MysqL
Linux平台上推荐使用RPM包来安装MysqL,MysqL AB提供了以下RPM包的下载地址:
MysqL - MysqL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MysqL服务器。
MysqL-client - MysqL 客户端程序,用于连接并操作MysqL服务器。
MysqL-devel - 库和包含文件,如果你想要编译其它MysqL客户端,例如Perl模块,则需要安装该RPM包。
MysqL-shared - 该软件包包含某些语言和应用程序需要动态装载的共享库(libMysqLclient.so*),使用MysqL。
MysqL-bench - MysqL数据库服务器的基准和性能测试工具。
以下安装MysqL RMP的实例是在SuSE Linux系统上进行,当然该安装步骤也适合应用于其他支持RPM的Linux系统,如:Centos。
安装步骤如下:
使用root用户登陆你的Linux系统。
下载MysqL RPM包。
通过以下命令执行MysqL安装,rpm包为你下载的rpm包:
[root@host]# rpm -i MysqL-5.0.9-0.i386.rpm
以上安装MysqL服务器的过程会创建MysqL用户,并创建一个MysqL配置文件my.cnf。
你可以在/usr/bin和/usr/sbin中找到所有与MysqL相关的二进制文件。所有数据表和数据库将在/var/lib/MysqL目录中创建。
以下是一些MysqL可选包的安装过程,你可以根据自己的需要来安装:
[root@host]# rpm -i MysqL-client-5.0.9-0.i386.rpm [root@host]# rpm -i MysqL-devel-5.0.9-0.i386.rpm [root@host]# rpm -i MysqL-shared-5.0.9-0.i386.rpm [root@host]# rpm -i MysqL-bench-5.0.9-0.i386.rpm
二、Window上安装MysqL
Window上安装MysqL相对来说会较为简单,你只需要载 MysqL 下载中下载window版本的MysqL安装包,并解压安装包。
双击 setup.exe 文件,接下来你只需要安装默认的配置点击"next"即可,默认情况下安装信息会在C:\MysqL目录中。
接下来你可以通过"开始" =》在搜索框中输入 " cmd" 命令 =》 在命令提示符上切换到 C:\MysqL\bin 目录,并输入一下命令:
MysqLd.exe --console
如果安装成功以上命令将输出一些MysqL启动及InnoDB信息。
1、验证MysqL安装
在成功安装MysqL后,一些基础表会表初始化,在服务器启动后,你可以通过简单的测试来验证MysqL是否工作正常。
使用 MysqLadmin 工具来获取服务器状态:
使用 MysqLadmin 命令俩检查服务器的版本,在linux上该二进制文件位于 /usr/bin on linux ,在window上该二进制文件位于C:\MysqL\bin 。
[root@host]# MysqLadmin --version
linux上该命令将输出以下结果,该结果基于你的系统信息:
MysqLadmin Ver 8.23 distrib 5.0.9-0,for redhat-linux-gnu on i386
如果以上命令执行后未输入任何信息,说明你的MysqL未安装成功。
2、使用 MysqL Client(MysqL客户端) 执行简单的sql命令
你可以在 MysqL Client(MysqL客户端) 使用 MysqL 命令连接到MysqL服务器上,默认情况下MysqL服务器的密码为空,所以本实例不需要输入密码。
命令如下:
[root@host]# MysqL
以上命令执行后会输出 MysqL>提示符,这说明你已经成功连接到MysqL服务器上,你可以在 MysqL> 提示符执行sql命令:
MysqL> SHOW DATABASES; +----------+ | Database | +----------+ | MysqL | | test | +----------+ 2 rows in set (0.13 sec)
3、MysqL安装后需要做的
MysqL安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码:
[root@host]# MysqLadmin -u root password "new_password";
现在你可以通过以下命令来连接到MysqL服务器:
[root@host]# MysqL -u root -p
Enter password:*******
注意:在输入密码时,密码是不会显示了,你正确输入即可。
4、Linux系统启动时启动 MysqL
如果你需要在Linux系统启动时启动 MysqL 服务器,你需要在 /etc/rc.local 文件中添加以下命令:
/etc/init.d/MysqLd start
同样,你需要将 MysqLd 二进制文件添加到 /etc/init.d/ 目录中。
精彩专题分享:mysql不同版本安装教程 mysql5.7各版本安装教程
以上就是本文的全部内容,希望对大家的学习有所帮助。
Linux/UNIX和Window平台上安装Mysql_MySQL
所有平台的mysql下载地址为:mysql 下载. 挑选你需要的 mysql community server 版本及对应的平台。
一、Linux/UNIX上安装Mysql
Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址:
MySQL - MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。
MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器。
MySQL-devel - 库和包含文件,如果你想要编译其它MySQL客户端,例如Perl模块,则需要安装该RPM包。
MySQL-shared - 该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*),使用MySQL。
MySQL-bench - MySQL数据库服务器的基准和性能测试工具。
以下安装Mysql RMP的实例是在SuSE Linux系统上进行,当然该安装步骤也适合应用于其他支持RPM的Linux系统,如:Centos。
安装步骤如下:
使用root用户登陆你的Linux系统。
下载Mysql RPM包。
通过以下命令执行Mysql安装,rpm包为你下载的rpm包:
[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm
以上安装mysql服务器的过程会创建mysql用户,并创建一个mysql配置文件my.cnf。
你可以在/usr/bin和/usr/sbin中找到所有与MySQL相关的二进制文件。所有数据表和数据库将在/var/lib/mysql目录中创建。
以下是一些mysql可选包的安装过程,你可以根据自己的需要来安装:
[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm [root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm [root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm [root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm
二、Window上安装Mysql
Window上安装Mysql相对来说会较为简单,你只需要载 MySQL 下载中下载window版本的mysql安装包,并解压安装包。
双击 setup.exe 文件,接下来你只需要安装默认的配置点击"next"即可,默认情况下安装信息会在C:\mysql目录中。
接下来你可以通过"开始" =》在搜索框中输入 " cmd" 命令 =》 在命令提示符上切换到 C:\mysql\bin 目录,并输入一下命令:
mysqld.exe --console
如果安装成功以上命令将输出一些mysql启动及InnoDB信息。
1、验证Mysql安装
在成功安装Mysql后,一些基础表会表初始化,在服务器启动后,你可以通过简单的测试来验证Mysql是否工作正常。
使用 mysqladmin 工具来获取服务器状态:
使用 mysqladmin 命令俩检查服务器的版本,在linux上该二进制文件位于 /usr/bin on linux ,在window上该二进制文件位于C:\mysql\bin 。
[root@host]# mysqladmin --version
linux上该命令将输出以下结果,该结果基于你的系统信息:
mysqladmin Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386
如果以上命令执行后未输入任何信息,说明你的Mysql未安装成功。
2、使用 MySQL Client(Mysql客户端) 执行简单的SQL命令
你可以在 MySQL Client(Mysql客户端) 使用 mysql 命令连接到Mysql服务器上,默认情况下Mysql服务器的密码为空,所以本实例不需要输入密码。
命令如下:
[root@host]# mysql
以上命令执行后会输出 mysql>提示符,这说明你已经成功连接到Mysql服务器上,你可以在 mysql> 提示符执行SQL命令:
mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.13 sec)
3、Mysql安装后需要做的
Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码:
[root@host]# mysqladmin -u root password "new_password";
现在你可以通过以下命令来连接到Mysql服务器:
[root@host]# mysql -u root -p Enter password:*******
注意:在输入密码时,密码是不会显示了,你正确输入即可。
4、Linux系统启动时启动 MySQL
如果你需要在Linux系统启动时启动 MySQL 服务器,你需要在 /etc/rc.local 文件中添加以下命令:
/etc/init.d/mysqld start
同样,你需要将 mysqld 二进制文件添加到 /etc/init.d/ 目录中。
以上就是Linux/UNIX和Window平台上安装Mysql_MySQL的内容。
我们今天的关于处理UNIX,Linux和Windows的内存限制和地址空间和linux内存管理方式的分享就到这里,谢谢您的阅读,如果想了解更多关于java 获取 ip 地址 linux/unix/Windows、linux – Docker容器中的内存限制和CPU限制、Linux/UNIX和Window平台上安装Mysql、Linux/UNIX和Window平台上安装Mysql_MySQL的相关信息,可以在本站进行搜索。
本文标签: