物理内存

Centos7 add delete Swap exchange partitions

拟墨画扇 提交于 2019-12-10 13:25:42
导读 Linux 将物理内存分为内存段,叫做页面。交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放对于页面的内存。物理内存和交换空间的总大小是可用的虚拟内存的总量。 Swap即:交换分区,类似于Windows的虚拟内存,但物理内存不足时,把部分硬盘空间当成虚拟内存使用,从而解决了物理内存容量不足。 优点:节省成本。 缺点:性能不足。 此方法不局限于 Centos 7, Linux系统 均可使用。 操作用户:root。 添加swap交换分区空间 使用dd命令创建swap交换分区文件/dev/mapper/centos-swap,大小为2G: $ dd if=/dev/zero of=/dev/mapper/centos-swap bs=1024 count=2048000 格式化swap分区: $ mkswap /dev/mapper/centos-swap 设置交换分区: $ mkswap -f /dev/mapper/centos-swap 激活swap分区: $ swapon /dev/mapper/centos-swap 设为开机自动启用: $ vim /etc/fstab 在该文件底部添加如下内容: /dev/mapper/centos-swap swap swap default 0 0 删除swap交换分区 停止正在使用的swap分区: $

Docker之Namespace与Cgroup

拜拜、爱过 提交于 2019-12-09 22:01:58
博文大纲: 一、Docker概述 二、Namespace概念 三、Cgroup基本概念与示例 一、Docker概述 1.Docker简介 Docker作为开源社区最火爆的项目,它是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”,docker的全部源代码都在https://github.com/docker 进行相关维护,其官网是: https://www.docker.com 。 Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。如图: 如图所示:鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。正如 Docker的设计宗旨一样:Buid、 Ship and Run Any App、 Anywhere,即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。 2.Docker和虚拟机的区别 作为一种轻量级的虚拟化方式,Docker与传统虚拟机相比具有显著的优势。如图: Docker之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟操作系统层,而Docker容器是直接在操作系统层面之上实现的虚拟化,如图: 3.Docker的使用场景

20191209 Linux就该这么学(6)

徘徊边缘 提交于 2019-12-09 20:20:00
6. 存储结构与磁盘划分 6.1 一切从“/”开始 Linux 系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用途。 FHS 是根据以往无数 Linux 系统用户和开发者的经验而总结出来的,是用户在 Linux 系统中存储文件时需要遵守的规则,用于指导我们应该把文件保存到什么位置,以及告诉用户应该在何处找到所需的文件。但是, FHS 对于用户来讲只能算是一种道德上的约束。 在 Linux 系统中另外还有一个重要的概念—路径。路径指的是如何定位到某个文件,分为绝对路径与相对路径。绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。 6.2 物理设备的命名规则 系统内核中的 udev 设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等; 一台主机上可以有多块硬盘,因此系统采用 a~p 来代表 16 块不同的硬盘(默认从 a 开始分配),而且硬盘的分区编号也很有讲究: 主分区或扩展分区的编号从 1 开始,到 4 结束; 逻辑分区从编号 5 开始 主分区、扩展分区和逻辑分区的概念 6.3 文件系统与数据资料 Linux系统支持数十种的文件系统,而最常见的文件系统如下所示: Ext3 :是一款日志文件系统

内存管理之程序内存分布

二次信任 提交于 2019-12-09 17:50:30
在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中。这个沙盘就是虚拟地址空间(virtual address space)。 1 32位虚拟内存布局 在32位模式下虚拟地址空间总是一个4GB的内存地址块。这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用。每一个进程拥有一套属于它自己的页表,但是还有一个隐情。只要虚拟地址被使用,那么它就会作用于这台机器上运行的所有软件,包括内核本身。因此一部分虚拟地址必须保留给内核使用: 图 1 这并不意味着内核使用了那么多的物理内存,仅表示它可支配这么大的地址空间,可根据内核需要,将其映射到物理内存。内核空间在页表中拥有较高的 特权级 (ring 2或以下),因此只要用户态的程序试图访问这些页,就会导致一个页错误(page fault),用户程序不可访问内核页。在Linux中,内核空间是持续存在的,并且在所有进程中都映射到同样的物理内存。内核代码和数据总是可寻址的,随时准备处理中断和系统调用。与此相反,用户模式地址空间的映射随进程切换的发生而不断变化: 图 2 图2中,蓝色区域表示映射到物理内存的虚拟地址,而白色区域表示未映射的部分。在上面的例子中,Firefox使用了相当多的虚拟地址空间,因为它是传说中的吃内存大户。地址空间中的各个条带对应于不同的内存段(memory segment),如

Linux 内存监控

耗尽温柔 提交于 2019-12-09 15:40:59
Linux 内存监控 1、按照内存使用方式排序   top 之后使用 shift + m 那么top按照内存使用从大到小进行排列,使用 shift + P 表示按照CPU进行排序。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 29498 bigfish 20 0 1118m 438m 30m S 1 11.3 81:59.96 eclipse 27772 bigfish 20 0 1706m 216m 61m S 3 5.6 79:18.04 QQ.exe 29369 bigfish 20 0 610m 138m 44m S 1 3.6 25:19.26 maxthon PR :进程优先级 NI :进程当前nice调整值 VIRT : 进程使用的虚拟内存数 RES : 进程使用的物理内存 SHR : 允许与其他进程共享的内存数(比如一些动态库) TIME+ : CPU时间 2、top查看指定进程   top -p pid -d 1 使用-p选项指定pid,使用-d表示刷新间隔 3、pamp查看指定进程   pmap会将进程中使用到的每个动态库等内存依次显示,最有有一个total表示使用的虚拟内存总数。   看不到物理内存使用数。   pmap 7385 |grep total total 1228664K 4

系统卡死看内存一直占满(used)过高的误解

喜欢而已 提交于 2019-12-09 12:43:12
最近个人负责的系统总是卡死,查日志有内存溢出的情况,网上搜索总结下: 1、第一种情况,装日志文件的空间满了,怎么点都不会打日志,就以为系统挂了,可用df -h看看具体使用情况。 2、第二种就是内存不断的增加,某时刻要执行的功能需要的内存很多,但是系统无法一下释放那么多空间就会内存溢出。 最初自己的处理办法就是万能重启。 后来用echo 3 > /proc/sys/vm/drop_caches 这个方法释放了内存,但是这个方法的影响还在学习补充中。 刚开始以为used过多就会有问题,其实不然,网上找了点资料学习了下。 资料: 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方 面,区别于 Windows的内存管理。主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。 Linux 的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为 cache 和 buffers ,以此提高数据访问性能。 Linux 优先使用物理内存,当物理内存还有空闲时,linux是不会施放内存的,即时占用内存的程序已经被关闭了(这部分内存就用来做缓存了)。也就是说,即时你有2G的内存,用过一段时间后,也会被占满

Linux操作系统 内存管理、用户操作和文件操作

﹥>﹥吖頭↗ 提交于 2019-12-08 05:16:21
内存管理、用户操作和文件操作 预备知识: 1、Linux系统的内存分为物理内存和虚拟内存。 物理内存 是指安装在计算机当中的主存储器; 虚拟内存 是 一段 虚拟的逻辑上连续的储存空间, 虚拟内存是由多个内存碎片组成,只有 正在使用的 虚拟内存被存放在 内存 上,对于暂时不使用的虚拟内存空间其实是储存在 外存 中。虚拟内存空间地址和实际的物理内存空间地址存在某种逻辑上的关系,如果虚拟内存空间地址的内容将被使用,通过逻辑关系可以计算出此部分内容对应的实际物理内存空间,然后将内容加载到内存中。虚拟内存在 一定程度上 独立于物理内存。 2、计算机的物理 内存空间有限(虚拟内存只要运行部分占用物理内存空间) 而且不同PC的 物理内存是不一样(通过虚拟内存空间,进程中代码的访存操作的地址全部是这个内存空间的地址) ,所以进程使用的是 虚拟内存空间 。 3、内存的最小粒度是页,进程虚拟地址空间和内存的映射也是以页为单位。页(面)的大小称为页面的大小,大小应该为2的幂。页号P=A/L;A表示逻辑地址空间中的地址(虚拟内存空间地址),L表示页面大小。 4、物理块:将内存的物理地址空间划分为若干块,称为物理块,物理块与页(面)一一对应。 5、页表储存在物理内存中,由操作系统维护。CPU中有一个 页表寄存器 ,里面存放着当前进程页表的 起始地址和页表长度

Struts2上传文件学习笔记

对着背影说爱祢 提交于 2019-12-07 20:55:17
问题一:中文乱码 在使用Struts2实现文件上传时,若上传文件名为中文,则会在项目的发布目录中看上传文件名显示为乱码。解决办法很简单: 在struts.xml配置文件中配置: <constant name="struts.i18n.encoding" value="gbk/gb2312 ">即可。 问题二:上传过大时抛出 org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException 异常 解决办法:在struts.xml配置文件中: <constant name="struts.multipart.maxSize" value="100000000 " >;若这时还不行,需重写struts.properties文件:将 strtuts.multipart.maxSize = 50097152 改为 struts.multipart.maxSize= 1000000000 ; 以 上两种方法试后,在我的demo中还是抛错,JVM内存溢出。这时就得对JVM内存进行调优。我们知道JVM默认可使用内存上限为64M;也就是说当我们要上传的文件超过64M后,那么错误也就接踵而来。 可以通过设置其最大和最小值来实现.设置的方法主要是几个. 1.可以在windows 更改系统环境变量 加上JAVA_OPTS=

malloc的原理

霸气de小男生 提交于 2019-12-07 07:44:20
任何一个用过或学过C的人对malloc都不会陌生。大家都知道malloc可以分配一 段连续的内存空间,并且在不再使用时可以通过free释放掉。但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至把malloc当做操作系统 所提供的系统调用或C的关键字。实际上,malloc只是C的标准库中提供的一个普通函数,而且实现malloc的 基本 思想并不复杂,任何一个对C和操作系统有些许了解的程序员都可以很容易理解。 这篇文章通过实现一个简单的malloc来描述malloc背后的机制。当然与现有C的标准库实现(例如glibc)相比,我们实现的malloc 并不是特别高效,但是这个实现比目前真实的malloc实现要简单很多,因此易于理解。重要的是,这个实现和真实实现在基本原理上是一致的。 这篇文章将首先介绍一些所需的基本知识,如操作系统对进程的内存管理以及相关的系统调用,然后逐步实现一个简单的malloc。为了简单起见,这篇文章将只考虑x86_64体系结构,操作系统为Linux。 1 什么是malloc 2 预备知识 2.2.1 内存排布 2.2.2 Heap内存模型 2.2.3 brk与sbrk 2.2.4 资源限制与rlimit 2.1.1 虚拟内存地址与物理内存地址 2.1.2 页与地址构成 2.1.3 内存页与磁盘页 2.1 Linux内存管理 2.2 Linux进程级内存管理

CSAPP第七章概念

不羁的心 提交于 2019-12-06 23:22:23
CSAPP第七章概念 1.虚拟地址数=2^(虚拟地址位数) 最大可能的虚拟空间=虚拟地址数-1 2. 使用虚拟寻址,CPU需要将虚拟地址转换成物理地址,这样才能访问真实的物理内存 concepts:1)VM on disk,PM (DRAM cache) 2)page--cache blocks 3.page tables :an array of PTEs(page table entry) that map VP to PP 虚拟内存空间被组织为一个存放在硬盘上的M个连续的字节大小的单元组成的数组,每个字节都有一个唯一的虚拟地址 页数=虚拟地址数/页大小,每个页都需要一个PTE 操作系统通过将虚拟内存分割为大小固定的块来作为硬盘和内存之间的传输单位,这个块被称为虚拟页(Virtual Page, VP),每个虚拟页的大小为 P=2^p 字节。物理内存也会按照这种方法分割为物理页(Physical Page, PP),大小也为 P 字节。 CPU在获得虚拟地址之后,需要通过MMU将虚拟地址翻译为物理地址。而在翻译的过程中还需要借助页表 VP1,VP2,VP7,VP4被缓存到物理内存中(cached),VP3,VP6已被分配但尚未缓存到物理内存(uncached),VP0和VP5尚未分配(unallocated) 4.page hit MMU根据虚拟地址在页表中寻址到PTE4