物理内存

是否调整swap大小依据

夙愿已清 提交于 2019-11-28 12:16:03
现象: 信息中心机房一台Linux服务器运行缓慢,系统服务出现间歇性停止响应,发现此服务器的物理内存是16G,而最初装机的时候,系统管理人员却只分配了2G的虚拟内存。查看内存的使用状况,物理内存并没有完全耗尽,但虚拟内存已经耗尽,整个系统CPU负载和磁盘IO都非常高。 问题: 是由于交换分区不足导致,那么解决方法就是:将虚拟内存通过虚拟文件的方式增加到8G,系统运行状况明显好转。其实虚拟内存并不是等到物理内存用尽了才使用的,是否尽量的使用或不使用swap,在内核空间有一个参数控制。 [root @server ~]# cat /proc/sys/vm/swappiness   60 swappiness=0 的时候表示最大限度使用物理内存,然后才是swap空间;swappiness=100 的时候表示积极的使用swap分区, 并且把内存上的数据及时的搬运到swap空间里面。 Linux系统设置多大的交换分区合适呢?为此,引用红帽官方文库里的一段文字进行浅析说明。 目前Red Hat(红帽官方)推荐交换分区的大小应当与系统物理内存的大小保持线性比例关系。 不过在小于2GB物理内存的系统中,交换分区大小应该设置为内存大小的两倍,如果内存大小多于2GB,交换分区大小应该是物理内存大小加上2GB。 其原因在于,系统中的物理内存越大, 对于内存的负荷可能也越大。

Learn The Architecture Memory Management 译文

瘦欲@ 提交于 2019-11-28 08:53:30
1、概述   本文档介绍了ARMv8-A架构内存管理的关键——内存地址转换,包括虚拟地址(VA)到物理地址(PA)的转换、地址转换表格式以及TLBs(Translation Lookaside Buffers)管理。   对于任何进行底层bootloader或者驱动代码开发的人员来说,这部分内容都是非常实用的,尤其是对进行MMU(Memory Management Unit)编码的人员。   本文档可以帮助你解到VA如何转换成PA的、识别不同的地址空间、地址转换时地址空间是如何映射的以及TLB相关的操作。 2、什么是内存管理?   内存管理描述了如何访问系统内存。每次操作系统或者应用程序尝试访问内存时,都是硬件负责进行内存管理的,对于应用程序而言,内存管理是一种动态分配内存区域的方式。 2.1、为什么需要内存管理?   因为操作系统和应用程序需要大量的内存来运行,同时,应用程序往往运行在虚拟地址空间,需要实际映射到物理地址空间。 3、虚拟地址和物理地址   使用虚拟地址的一个好处是,操作系统可以控制应用程序的内存布局,操作系统决定虚拟地址是否可见、是否允许访问。这种机制允许操作系统采取沙箱机制管理(即应用程序之间的隔离)应用程序,同时实现了对硬件的抽象。   还有一个好处是,物理内存上不连续的内存区域,在虚拟内存地址空间中可以是连续的。   对于应用程序开发人员而言

【转】交换分区SWAP

折月煮酒 提交于 2019-11-28 07:10:44
SWAP就是LINUX下的 虚拟内存 分区,它的作用是在 物理内存 使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用. 它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。 需要注意的是,虽然这个SWAP分区能够作为"虚拟"的内存,但它的速度比物理内存可是慢多了,因此如果需要更快的速度的话,并不能寄厚望于SWAP,最好的办法仍然是加大物理内存.SWAP分区只是临时的解决办法. qlinux下得分区推荐一个交换分区,一个根分区,其中交换分区如上所说作为redhat或者其它虚机所划分的内存不够时候来使用! 交换分区(swap)的合理值一般在内存的2 倍左右,可以适当加大。实际上具体还是以实际应用为准,swap为内存的2倍也不过是一种以讹传讹的说法。如果交换分区的使用都超过4GB以上了,可想而知服务器的性能应该差很多了。 Linux下可以创建两种类型的交换空间,一种是swap分区,一种是swap文件。前者适合有空闲的分区可以使用,后者适合于没有空的硬盘分区,硬盘的空间都已经分配完毕。 来源: https://www.cnblogs.com/eleclsc/p/11398041.html

Linux 下 top 命令的使用详解

可紊 提交于 2019-11-28 06:10:41
前言: top 指令用于查看当前CPU负载, 内存占用. 或让其一直打印到固定文件内, 用于以后查看 版本: 本次 top 的版本为version 3.3.10, 系统版本为centos 7.4 使用: 只显示某一进程的信息: top -p 进程ID 每两次屏幕刷新的时间间隔: -d 秒 刷新多少次退出显示:-n 次 将日志输出到文件:-b 后台一直运行: nohup top -p 16071 -b -n 22000 -d 5 > long_500.log & 内容详解: 第一部分: 第一行: 10:43:27 系统当前时间。 up 150 days, 18:29 系统运行了多长时间 3 users 此时有三个用户在线 load average: 5.40, 7.57, 6.88 系统负载 (服务器是8核,负载还算正常) 第二行:Tasks:分别表示总进程数、正在运行的、睡眠、停止、僵尸进程 第三行:%Cpu(s): 前两个分别表示用户空间程序占用CPU百分比、内核空间占用CPU百分比。 第四行:KIB Mem:(以下数值单位为KB) 24506932 total 物理内存总量 5148240 free 空闲物理内存总量 10289020 used 正在使用的物理内存总量 15104k buffers 用作内核缓存物理内存总量 第五行:KIB Swap: 也就是系统运行时

进程地址空间分布

北城余情 提交于 2019-11-28 05:36:47
转载请注明出处:http://blog.csdn.net/wangxiaolong_china 对于一个进程,其空间分布如下图所示: C程序一般分为: 1. 程序段 :程序段为程序代码在内存中的映射.一个程序可以在内存中多有个副本. 2. 初始化过的数据 :在程序运行值初已经对变量进行初始化的 3. 未初始化过的数据 :在程序运行初未对变量进行初始化的数据 4.栈 (stack) :存储局部,临时变量,在程序块开始时自动分配内存,结束时自动释放内存.存储函数的返回指针. 5.堆 (heap) :存储动态内存分配,需要程序员手工分配,手工释放. 多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中,这个沙盘就是虚拟地址空间(virtual address space),在32位模式下,它总是一个4GB的内存地址块。这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用。每个进程都拥有一套属于它自己的页表,但是还有一个隐情,只要虚拟地址被使能,那么它将会作用于这台机器上运行的所有软件,包括内核本身,因此,有一部分虚拟地址必须保留给内核使用。进程内存空间分布如下图所示: 但是这并不意味着内核使用了这么多的物理内存,仅表示它可以支配这么大的地址空间。可根据内核需要,将其映射到物理内存。内核空间在页表中拥有较高的特权级(ring2或以下),因此

虚拟空间,malloc

假装没事ソ 提交于 2019-11-28 05:36:28
一,内存空间分布图 所以,mmap其实和堆一样,实际上可以说他们都是动态内存分配,但是严格来说mmap区域并不属于堆区,反而和堆区会争用虚拟地址空间。 这里要提到一个很重要的概念,内存的延迟分配,只有在真正访问一个地址的时候才建立这个地址的物理映射,这是Linux内存管理的基本思想。Linux内核在用户申请内存的时候,只是给它分配了一个线性区(也就是虚拟内存),并没有分配实际物理内存;只有当用户使用这块内存的时候,内核才会分配具体的物理页面给用户,这时候才占用宝贵的物理内存。内核释放物理页面是通过释放先行区,找到其对应的物理页面,将其全部释放的过程。 二,malloc 原理和内存碎片 下面以一个例子来说明内存分配的原理: 情况一、malloc小于128k的内存,使用brk分配内存,将_edata往高地址推(只分配虚拟空间,不对应物理内存(因此没有初始化),第一次读/写数据时,引起内核缺页中断,内核才分配对应的物理内存,然后虚拟地址空间建立映射关系),如下图: 1、 进程启动的时候,其(虚拟)内存空间的初始布局如图1所示。 其中, mmap内存映射文件是在堆和栈的中间 (例如libc-2.2.93.so,其它数据文件等),为了简单起见,省略了内存映射文件。 _edata指针(glibc里面定义)指向数据段的最高地址。 2、 进程调用A=malloc(30K)以后,内存空间如图2:

centos安装

夙愿已清 提交于 2019-11-28 04:57:44
阅读目录(Content) 一、安装Centos 1.1 选择安装选项 1.2 选择语言 1.3 软件选择 1.4 磁盘分区 1.5 关闭kdump 1.6 启用网络 1.7 开始安装-配置密码 二、centos6 与 centos7的区别 回到顶部(go to top) 一、安装Centos 1.1 选择安装选项 1.2 选择语言    1.3 软件选择   对于初学者- GUI的服务器,同时把“开发工具”相关的软件包也安装上 1.4 磁盘分区 (1)-先选择我要配置 (2)选择标准分区 (3)分区 设备类型选择默认的标准分区,文件系统类型为xfs,Centos7支持brtfs,生产环境不建议选择,btrfs文件系统目 前技术尚未成熟,只是作为一种前瞻技术。 boot 分区 : 是引导分区,作用:系统启动,在boot分区存放着grub,内核文件等,一般200M就够。 swap 交换分区 : 内存扩展分区 交换分区 给多大? 以前内存比较小的时候,都是1.5到2倍的物理内存。          现在物理内存比较大一般最多:8G到16G,如果系统使用到了swap分区,就直接添加物理内存或排查一下服务器有没有被黑。 / 根 : 所有文件的根 绝对路径的开始标志 sda :表示第一块磁盘 1.5 关闭kdump   这个基本没啥用 1.6 启用网络 默认网络是关闭的,可以配置成手动地址。

jvm参数

▼魔方 西西 提交于 2019-11-28 03:43:30
--Xmx2048m: 设置JVM最大可用内存为2048M,超出了这个设置值,就会抛出OutOfMemory 异常 --Xms2048m: 设置JVM初始分配的内存的大小为2048M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。 -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 -XX:PermSize: 设置非堆内存初始值,默认是物理内存的1/64; XX:MaxPermSize: 设置最大非堆内存的大小,默认是物理内存的1/4,该参数常见错误java.lang.OutOfMemoryError: PermGen space 来源: https://www.cnblogs.com/gavinYang/p/11197740.html

Linux基础命令:vmstat

依然范特西╮ 提交于 2019-11-28 01:37:01
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方式。因为 vmstat 本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果。在学习vmstat命令前,我们先了解一下Linux系统中关于物理内存和虚拟内存相关信息。 物理内存和虚拟内存区别: 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。 物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。 作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。

深入浅出计算机组成原理学习笔记:理解内存(上)-虚拟内存和内存保护是什么?(第40讲)

半城伤御伤魂 提交于 2019-11-28 01:14:47
一、简单页表 1、页表的概念 想要把虚拟内存地址,映射到物理内存地址,最直观的办法,就是来建一张映射表。这个映射表,能够实现虚拟内存里面的页,到物理内存里面的页的一一映射。 这个映射表,在计算机里面,就叫作 页表 (PageTable)。 页表这个地址转换的办法,会把一个内存地址分成 页号(Directory)和 偏移量(Offset)两个部分。这么说太理论了,我以一个32位的内存地址为例,帮你理解这个概念。 1、其实,前面的高位,就是内存地址的页号。后面的低位,就是内存地址里面的偏移量。 2、做地址转换的页表,只需要保留虚拟内存地址的页号和物理内存地址的页号之间的映射关系就可以了。 3、同一个页里面的内存,在物理层面是连续的。以一个页的大小是4K比特(4KiB)为例,我们需要20位的高位,12位的低位。 2、内存地址转换,的三个步骤: 总结一下,对于一个内存地址转换,其实就是这样三个步骤: 1. 把虚拟内存地址,切分成页号和偏移量的组合; 2. 从页表里面,查询出虚拟页号,对应的物理页号; 3. 直接拿物理页号,加上前面的偏移量,就得到了物理内存地址。 3、一个页表需要多大的空间 不知道你算出的数字是多少?32位的内存地址空间,页表一共需要记录2^20个到物理页号的映射关系。这个存储关系,就好比一个2^20大小的数组。 一个页号是完整的32位的4字节(Byte)