虚拟内存

是否调整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。 其原因在于,系统中的物理内存越大, 对于内存的负荷可能也越大。

redis使用设置

筅森魡賤 提交于 2019-11-28 08:17:31
4.让redis在后台运行,修改redis.config cd redis-3.2.8 vim reids.conf #编辑redis.conf文件 (将daemonize no改为daemonize yes) 5.将redis加入到开机启动 vi /etc/rc.local #在里面添加内容: /root/redis-4.0.6/src/redis-server /root/redis-4.0.6/src/redis.conf (意思就是开机调用这段开启redis的命令) 6.查看server进程是否启动 ps -ef |grep redis 7.启动 redis-cli ,测试是否成功: ./redis-cli 输入以下测试内容,提示成功“ok” 附:redis.conf 的配置信息 1、daemonize 如果需要在后台运行,把该项改为yes 2、pidfile 配置多个pid的地址 默认在/var/run/redis.pid 3、bind 绑定ip,设置后只接受来自该ip的请求 4、port 监听端口,默认是6379 5、loglevel 分为4个等级:debug verbose notice warning 6、logfile 用于配置log文件地址 7、databases 设置数据库个数,默认使用的数据库为0 8、save 设置redis进行数据库镜像的频率。 9

操作系统

六眼飞鱼酱① 提交于 2019-11-28 08:15:25
文章目录 什么是操作系统 系统调度(分进程和线程) 进程的上下文切换 进程通信 管道 共享内存 信号量 消息队列 socket 死锁 内存管理 什么是内存 相对地址 绝对地址 逻辑地址 物理地址 线性地址 为什么要内存管理 虚拟内存 什么是缓存 缓存替换算法 内存管理方式 什么是操作系统 操作系统是管理和控制计算机硬件与软件资源的计算机程序。 操作系统主要有五大功能:处理机管理(CPU)、进程管理、内存管理、设备管理和文件系统管理。 系统调度(分进程和线程) 引起进程调度的原因有以下几类: (1)正在执行的进程执行完毕。 (2)执行中的进程自己调用阻塞原语将自己阻塞起来进入睡眠状态。 (3)执行中的进程调用了 P 原语操作,从而因资源不足而阻塞;或调用 V 原语操作激活了等待资源的进程队列。 (4)在分时系统中,当一进程用完一个时间片。 (5)就绪队列中某进程的优先级变得高于当前执行进程的优先级,也将引起进程调度。 进程的上下文切换 将CPU硬件状态从一个进程换到另一个进程的过程称为上下文切换,其实就是运行环境的切换。 进程运行时,其硬件状态保存在CPU上的寄存器中。寄存器有:程序计数器、程序状态寄存器、栈指针、通用寄存器、其他控制寄存器的值 进程不运行时,这些寄存器的值保存在进程控制块中;当操作系统要运行一个新的进程时,将进程控制块中相关值送到对应的寄存器中。 进程的内存布局

【转】linux 查看哪些进程用了swap

ε祈祈猫儿з 提交于 2019-11-28 07:11:45
转自: http://blog.csdn.net/xiangliangyu/article/details/8213127 如果系统的物理内存用光了,则会用到swap。系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。所以要高度重视。 free free -m 就能看出当前系统所使用的swap了。那么如何查看哪些进程使用了swap呢,这样好针对性的做出优化。 top Centos(6.0之前): top只能看到swap总使用量 网上很多人说top+f+p能显示出来swap。可是按完f查看的时候,man top里面swap的解释是: 并不是实际的使用swap。而是VIRT-RES得来的。用我蹩脚的英文翻译就是,虚拟内存中所使用过的swap部分 Centos(6.0之后): man top 这样就明显看出是取出的每个进程的swap,能很方便的查看哪些进程使用了swap。从中也能看到一个信息。那就是读取了/proc/#/status vmstat vmstat -n 1 也能查看到 仍旧无法查看到哪些进程使用了。但是能看到si、so Memory(内存): swpd: 使用虚拟内存大小 free: 可用内存大小 buff: 用作缓冲的内存大小 cache:

Redis 常见面试题

混江龙づ霸主 提交于 2019-11-28 04:56:20
使用Redis有哪些好处? 速度快 基于内存,避免了磁盘I/O的瓶颈。 单进程单线程,减少了线程上下文切换的开销 利用队列技术将并行访问变为串行访问,消除了传统数据库并发访问控制锁的开销。 Redis全程使用hash结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。 支持丰富的数据类型:支持string、list、set、sorted set、hash。 支持事务操作,保证操作原子性。 丰富的特性:可用于缓存、消息,按key设置过期时间,过期后将会自动删除。 redis相比memcached有哪些优势? (简单了解一下memcached) memcached所有的值均是简单的字符串,而redis支持更为丰富的数据类型。 redis的速度比memcached快很多。 redis可以支持持久化其数据。 redis常见性能问题和解决方案: 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内。 Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。 Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大

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)

虚拟内存

扶醉桌前 提交于 2019-11-27 16:08:28
首先先了解下计算机的存储结构: 虚拟内存是借助二级存储空间来扩大一级存储空间的机制。 DRAM是VM系统(虚拟存储器系统)在主存中的缓存,他在主存中用在缓存虚拟页。 SRAM是CPU和主存之间的高速缓冲,CPU从主存中取指。 CPU先在SRAM中查找,如果不命中,则在DRAM中查找,如果再次查找失败,则通过页面置换,从磁盘中读取数据。由于IO操作开销很大,所以DRAM命中失败的开销更大。当CPU需要从磁盘中查找DRAM未命中的数据时,需要借助MMU(内存管理单元)来获取数据在磁盘中的位置,MMU完成物理地址到虚拟地址的转换,数据在磁盘中的地址就是虚拟地址。 数据一般按页存储,一个页面一般是4~8KB。 虚拟地址(VA),假设其范围是[0,1,2......N-1],N=2^n,N的单位为字节,那么这个虚拟地址就叫做一个n位地址空间。32/64位操作系统具有的虚拟内存空间大小分别是2^32和2^64。 虚拟存储器(VM)就是一个存储在磁盘上的N个连续字节大小的单元。每个字节都是一个唯一的虚拟内存地址。操作系统将VM分割成虚拟页大小的块。 物理存储器被分割成物理页(PP),大小也为字节。 虚拟页(VP)有三种状态: 1)未分配虚拟页:在页表中不存在对该虚拟页的记录; 2)已缓存虚拟页:在页表中有记录,且在物理存储器中已经分配了页面; 3)未缓存虚拟页:在页表中有记录

Android 高质量开发之崩溃优化

痴心易碎 提交于 2019-11-27 10:05:53
做了很久的面试专题,不知道对各位需要面试和有跳槽想法的小伙伴有没有帮助,今天收集一篇关于崩溃优化方面的文章,面试方面的收集,后续我还会持续更新如果觉得有用可以点个关注 前言 开发人员碰到 APP 崩溃(闪退)什么办?不少人会说根据 Log,找到闪退的代码,捕获异常,“消化”掉了所有 Java 崩溃。至于程序是否会出现其他异常表现,那是上帝要管的事情。是的,这种方法对于紧急情况下不失为一种解决办法,但闪退的真相是什么?是否从根源上解决问题呢? 一、崩溃 崩溃率是衡量一个应用质量高低的基本指标,那么,该怎样客观地衡量崩溃这个指标,以及又该如何看待和崩溃相关的稳定性。 Android 的两种崩溃: Java 崩溃 Native 崩溃 简单来说,Java 崩溃就是在 Java 代码中,出现了未捕获异常,导致程序异常退出。那 Native 崩溃一般都是因为在 Native 代码中访问非法地址,也可能是地址对齐出现了问题,或者发生了程序主动 Abort,这些都会产生相应的 Signal 信号,导致程序异常退出。 1.1 崩溃的收集 “崩溃”就是程序出现异常,而一个产品的崩溃率,跟我们如何捕获、处理这些异常有比较大的关系。对于很多中小型公司来说,可以选择一些第三方的服务。目前各种平台也是百花齐放,包括阿里的友盟、腾讯的Bugly、网易云捕、Google 的 Firebase 等等。要懂得借力!