GVKun编程网logo

处理UNIX,Linux和Windows的内存限制和地址空间(linux内存管理方式)

25

在这篇文章中,我们将带领您了解处理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内存管理方式)

处理UNIX,Linux和Windows的内存限制和地址空间(linux内存管理方式)

UNIX,Linux和Windows中单个进程的最大内存量是多少?怎么计算? 4 GB RAM的用户地址空间和内核地址空间是多少?

解决方法

4 GB RAM的用户地址空间和内核地址空间是多少?

一个过程的地址空间分为两部分,

用户空间:在标准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

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限制

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

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

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的相关信息,可以在本站进行搜索。

本文标签: