物理内存

企业linux分区方

 ̄綄美尐妖づ 提交于 2020-01-15 19:29:34
企业linux分区方案 方案1:针对网站集群架构中的某个节点服务器分区 该服务器上的数据有多份(其他节点也有)且数据不太重要,建议分区方案如下: /boot: 200MB swap: 物理内存的1.5倍,当内存大于或等于8GB时,配置为8-16GB即可 /: 剩余硬盘空间大小(/usr、/home、/var等分区和 “/” 公用一个分区,这相当于在windows系统中只有一个C盘,所有数据和文件都放在一起) 方案2: 针对数据库及存储角色的服务器分区 该服务器的业务有大量重要的数据,建议分区方案如下: /boot: 200MB /: 大小设置为50-200GB,只存放系统相关文件,网站等业务数据不放在这里。 swap: 物理内存的1.5倍,当内存大于或等于8GB时,配置为8-16GB即可 /data: 剩余硬盘空间大小,放数据库及存储服务等重要数据。当然,data的名称可以换成别的名字 注:本方案就是把重要数据单独分区,便于备份和管理 方案3: 针对大网站或门户级别企业的服务器进行分区 此分区方案更灵活,比较适合业务线比较多、需求不确定的大企业使用,建议分区如下: /boot: 200MB /: 大小设置为50-200GB,只存放系统相关文件,网站等业务数据不放在这里。 swap: 物理内存的1.5倍,当内存大于或等于8GB时,配置为8-16GB即可 剩余的磁盘空间保留,root

解决 Redis 只读不可写的问题

╄→гoц情女王★ 提交于 2020-01-15 02:29:53
本文转载: https://blog.csdn.net/han_cui/article/details/54767208?tdsourcetag=s_pcqq_aiomsg 解决 Redis 只读不可写的问题 在 Redis 终端上进行读写操作,发现只读不可写,GET 操作是正常的,SET 操作提示错误:(error)MISCONF Redis is configured to save RDB snapshots,but is currently not able to persist on disk. Commands that may modify the data set are disabled. 如图所示: 原因: Redis 在保存数据到硬盘时为了避免主进程假死,需要 Fork 一份主进程,然后在 Fork 进程内完成数据保存到硬盘的操作,如果主进程使用了 4 GB 的内存,Fork 子进程的时候需要额外的 4 GB,此时内存就不够了,Fork 失败,进而数据保存硬盘也失败了。 Linux 内核会根据参数 vm.overcommit_memory 参数的设置决定是否放行。 如果 vm.overcommit_memory = 1,直接放行。 vm.overcommit_memory = 0:则比较此次请求分配的虚拟内存大小和系统当前空闲的物理内存加上swap

Linux性能监控-内存-free命令

元气小坏坏 提交于 2020-01-15 01:41:31
1 简介 free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。 2 free 命令格式 free [参数] 参数说明 -b:以Byte为单位显示内存使用情况; -k:以KB为单位显示内存使用情况; -m:以MB为单位显示内存使用情况; -h: 以合适的单位显示内存使用情况 -o:不显示缓冲区调节列; -s<间隔秒数>:持续观察内存使用状况; -t:显示内存总和列; -V:显示版本信息。 3 命令使用 3.1 free -h 说明:以合适的单位显示内存使用情况 [root@localhost ~]# free -h total used free shared buff/cache available Mem: 15G 11G 212M 164M 4.0G 3.5G Swap: 3.9G 4.8M 3.9G 3.2 free -h -s 3 说明:有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数 [root@localhost ~]# free -h total used free shared buff/cache available Mem: 15G 11G 212M 164M 4.0G 3.5G Swap: 3.9G 4.8M 3.9G 输出简介 下面先解释一下输出的内容: Mem 行(第二行)是内存的使用情况。

Linux服务器性能评估

别等时光非礼了梦想. 提交于 2020-01-14 09:52:32
导语 总结有关服务器的各项性能指标,以及如何判断服务器的性能状况出现问题,性能指标代表的含义。同时也总结Linux服务器上有关工具的各项参数含义,以及日常需要注意的参数信息。 CPU使用率和负载 首先需要分清楚 CPU使用率和机器负载 不是相同的概念,如果 CPU使用率 ,但是不一定代表机器负载同样也高。所以关于 CPU使用率和负载 的区别: CPU使用率:显示的是程序在运行期间占用的CPU百分比; CPU负载:显示的是一段时间内正在使用和等待使用的CPU平均任务数; 查看CPU使用率和负载 对于查看负载可以使用uptime,w命令,同时top,vmstat工具也可以同时观察CPU使用率和负载情况。 查看CPU核数: grep "model name" /proc/cpuinfo | wc -l uptime命令: 命令返回信息中的load average就是关于系统的平均负载,里面的三个数字分别代表着1分钟、5分钟、15分钟内的系统平均负载。 top工具 (如果是多核CPU,1查看各个CPU详细信息) top工具的第一行后面的三个值,分别也是代表之前的 1、5、15 分钟内的平均负载; 第三行关于CPU使用率各项参数的含义: (us)user:CPU在低nice值(高优先级)用户态所占用的时间;(大部分CPU时间都在执行此类程序) (sy)sytem:CPU处于内核所占用的时间

Linux报swap空间占用过高,但物理内存还有空余

北战南征 提交于 2020-01-11 20:34:49
收到报警,swap空间占用过高,登录到系统查看内存使用详情,看到物理内存还有很多未使用 问题分析 Swap配置对性能的影响 分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。 通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,一般来说对于4G 以下的物理内存,配置2倍的swap,4G 以上配置1倍。 另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度

linux swap

时光总嘲笑我的痴心妄想 提交于 2020-01-11 10:45:28
kswapd0进程的作用:它是虚拟内存管理中,负责换页的,操作系统每过一定时间就会唤醒kswapd ,看看内存是否紧张,如果不紧张,则睡眠,在 kswapd 中,有2 个阀值,pages_hige 和 pages_low,当空闲内存页的数量低于 pages_low 的时候,kswapd进程就会扫描内存并且每次释放出32 个free pages,直到 free page 的数量到达pages_high。 分析结果是: physical mem 不足,引起 swap 频繁读写。 kswapd0 是系统的虚拟内存管理程序,如果物理内存不够用,系统就会唤醒 kswapd0 进程,由 kswapd0 分配磁盘交换空间作缓存,因而占用大量的 CPU 资源。 查看内存及swap使用率:发现还有空余的内存,但是已经开始用swap了。 调整linux内核尽量用内存,而不用swap 内存使用到多少开始使用swap? vm.swappiness 这个内核参数控制 /proc/sys/vm/swappiness 这个交换参数控制内核从物理内存移出进程,移到交换空间。该参数从0到100,当该参数=0,表示只要有可能就尽力避免交换进程移出物理内存;该参数=100,这告诉内核疯狂的将数据移出物理内存移到swap缓存中。 The defaultvalue I’ve seen on both enterprise

CPU高速缓存与内存屏障

你离开我真会死。 提交于 2020-01-10 00:25:35
1. CPU缓存 cpu高速缓存的由来 在CPU的全部取指令周期中(程序计算),至少需要访问一次存储器(也就是我们所说物理内存上的数据) 通常需要多次访问存储器的取操作数或者保存结果,CPU处理计算的速度明显受限于访问存储器的限制 因此解决方案就是利用局部性原理,在CPU与物理内存之间提供一个容量小并且速度快的存储器,称为高速缓存 高速缓存概述 缓存是分“段”(line)的,一个段对应一块存储空间,大小是 32(较早的 ARM、90 年代 /2000 年代早期的 x86 和 PowerPC)、64(较新的 ARM 和 x86)或 128(较新的 Power ISA 机器)字节 高速缓存包含物理内存部分数据副本 cpu读取数据时将会先检查高速缓存中的数据是否存在,存在就返回,不存在就读取物理内存数据 高速缓存和内存 高速缓存分为L1-L3 Cache L1 Cache: 一级缓存是CPU第一层高速缓存,分为指令缓存和数据缓存,一般服务器的CPU的L1缓存容量在32-4096kb,现在的L1 Cache都不能直接与内存直连传输数据 L2 Cache: 由于L1级别高速缓存容量的限制,为了再次提高CPU的运算速度,在CPU外部放置一个高速存储器,即二级缓存 L3 Cache: 现在的L3缓存都是内置的,主要是进一步降低内存延迟,提升处理器运算能力,一般是多核共享一个L3缓存

内存映射

白昼怎懂夜的黑 提交于 2020-01-08 15:00:53
内存映射 内存映射是在进程的虚拟地址空间中创建一个映射 内存映射分类 内存映射分为两类: 文件映射:把文件的一个区间映射到进程的虚拟地址空间,数据源为设备上的文件。 匿名映射:把物理内存映射到进程的虚拟地址空间,没有数据源。 在进程的虚拟地址空间中,代码段和数据段属于文件映射,堆、栈属于匿名映射。 内存映射的原理 mmap()会返回一个指针,它指向进程虚拟地址空间中的一个地址,这样以后,进程无需再调用read或write对文件进行读写,而只需要通过ptr就能够操作 文件。但是ptr所指向的是一个逻辑地址,要操作其中的数据,必须通过MMU将逻辑地址转换成物理地址,如图1中过程2所示。这个过程与内存映射无关。 建立内存映射并没有实际拷贝数据,这时,MMU在地址映射表中是无法找到与ptr相对应的物理地址的,也就是MMU失败,将产生一个缺页中断,缺 页中断的中断响应函数会在swap中寻找相对应的页面,如果找不到(也就是该文件从来没有被读入内存的情况),则会通过mmap()建立的映射关系,从硬 盘上将文件读取到物理内存中,如图1中过程3所示。这个过程与内存映射无关。 如果在拷贝数据时,发现物理内存不够用,则会通过虚拟内存机制(swap)将暂时不用的物理页面交换到硬盘上,如图1中过程4所示。这个过程也与内存映射无关。 内存映射和读写文件的效率 read文件时

Linux 虚拟内存和物理内存的理解

血红的双手。 提交于 2020-01-07 12:11:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 首先,让我们看下虚拟内存: 第一层理解 1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分配情况,哪些地址有数据,哪些地址无数据,哪些可读,哪些可写,都可以通过这个链表记录 3. 每个进程已经分配的内存空间,都与对应的磁盘空间映射 Linux 使用虚拟地址空间,大大增加了进程的寻址空间, 由低地址到高地址分别为 : 只读段: 该部分空间 只能读,不可写 ;(包括: 代码段、rodata 段(C常量字符串和#define定义的常量) ) 数据段: 保存 全局变量、静态变量 的空间; 堆 : 就是平时所说的动态内存, malloc/new 大部分都来源于此。其中堆顶的位置可通过函数 brk 和 sbrk 进行动态调整。 文件映射区域 : 如 动态库、共享内存 等映射物理空间的内存,一般是 mmap 函数所分配的虚拟地址空间 。 栈: 用于维护函数调用的上下文空间,一般为 8M ,可通过 ulimit –s 查看。 内核虚拟空间: 用户代码不可见的内存区域,由内核管理

vmalloc与mmap

别说谁变了你拦得住时间么 提交于 2020-01-07 11:17:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> vmalloc与mmap    mmap()系统调用是在用户进程与内核之间共享内存区域的常用方法。我们最近有个程序,需要应用进程能够读取内核驱动获取的数据,经过简单的调研,决定采用mmap方式。实现起来不难,在驱动中注册一个字符设备,实现该设备的mmap()方法即可。但这其中有一点小曲折。   在实现设备的mmap()方法时,需要将物理内存映射到应用程序通过mmap()系统调用传下来的vma中。vma代表的是进程的一段虚拟地址空间。在第一版里,考虑的不全面,利用alloc_pages()将整个内存段申请为一段连续的物理地址空间。然后通过remap_pfn_range()函数将这段连续的物理内存映射到vma中。经过长时间的测试,没有发现问题。直到今天,在部署一个老集群时,遇到了问题。这个集群中有很多老机器,内存只有十多个G,而且长时间运行后产生了大量的内存碎片。从而导致,我们无法获得足够的连续物理内存。没办法,只好重新调整驱动中分配内存的方式,改用vmalloc获取地址空间。   在kernel里,通常有3种申请内存的方式:vmalloc, kmalloc, alloc_pages。kmalloc与alloc_pages类似,均是申请连续的地址空间。而vmalloc则可以申请一段不连续的物理地址空间