物理内存

虚拟内存管理

独自空忆成欢 提交于 2020-03-05 08:54:54
1、什么是虚拟内存 虚拟内存是计算机系统内存管理的一种技术。它使的应用程序认为他拥有连续的可用内存( 一个连续完整的地址空间 ),而实际上,他通常是被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。 注意:虚拟内存不只是“用磁盘空间来扩展物理内存”的意思--这只是扩充内存级别以使其包含磁盘驱动器而已,把内存扩展到磁盘只是使用虚拟内存技术的一个结果,他的作用可以通过覆盖或者把处于不活动状态的程序以及他们的数据交换到磁盘上等方式实现。 2、为什么会有虚拟内存 许多年以前,当人们还在使用DOS或更古老的操作系统的时候,计算机内存还非常小,一般都是以K为单位进行计算的,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图像界面的想起还有用户需求的不断增大,应用程序的规模也随之膨胀起来。终于一个难题出现在程序员面前,那就是应用程序太大以至于内存容不下该程序,通常解决的办法是把程序分割成许多覆盖快的片段。覆盖块0首先运行,结束时他将调用另一个覆盖块。虽然覆盖块的交换是由os完成的,但是必须先有程序员吧程序先进行分割,这是一个费时费力的工作,而且相当枯燥。虚拟存储器就应运而生。 3、物理地址、虚拟地址、逻辑地址区别 32位系统的地址总线是32位的, 64位 CPU是指 CPU 内部的通用寄存器的宽度为 64 比特

JVM参数详解

半腔热情 提交于 2020-03-03 10:38:38
内存参数 参数 含义 默认值 示例 说明 -Xms 初始堆大小 物理内存的1/64(<1GB) -Xms1g 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. -Xmx 最大堆大小 物理内存的1/4(<1GB) -Xmx1g 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 -Xmn 年轻代大小 -Xmn512m 注意 :此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小. 增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 -XX:NewRatio 年轻代与年老代的比值 -XX:NewRatio=1 -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。 -XX:SurvivorRatio Eden区与Survivor区的大小比值 默认8:1:1 设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10 -Xss 每个线程的堆栈大小

虚拟地址和物理地址及其映射

你离开我真会死。 提交于 2020-03-02 17:42:41
前一段时间在面试总监的时候,总监问了我这样的一个问题:你个我说说物理内存和虚拟内存到底是怎么一回事? 其实之前我看过这个问题,据我理解的,当时是这么回答的“进程在运行的时候,操作系统都为其分配一个4GB的地址空间,即所谓的虚拟地址空间,一般情况下,当我们的程序很大的时候,实际的物理内存根本不能满足我们的需求的时候,这个时候操作系统就会借助磁盘空间来做虚拟的内存空间,把当前进程不需要的数据放在磁盘上,等到用到的时候,在利用调度算法把所需要的数据从磁盘空间上调度到内存,虚拟内存就是为了扩大内存的容量,每当我们要运行一个程序的时候经过编译以后形成的仅仅是逻辑上的空间,根本不是可以直接运行的内存空间,所以它还存在一个地址映射的概念。”当时感觉回答的很是笼统,只见总监在最后说了一句,你下去还是把这一块的内容在好好看看,所以今天就好好的把这个概念理一理。 首先我从最基本的概念说起,什么是物理内存的概念,虚拟内存的概念? 物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了。而在CPU中的概念,物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间

性能排查 -- vmstat 使用

吃可爱长大的小学妹 提交于 2020-03-02 15:24:08
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。 一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如: root@ubuntu:~# vmstat 2 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0 2表示每个两秒采集一次服务器状态,1表示只采集一次。 实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如: root@ubuntu:~# vmstat 2 procs -----------memory---------- --

jvm内存设置

匆匆过客 提交于 2020-03-01 06:57:17
Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommendedthat you exit and restart MyEclipse with new virtual machine memoryparamters to increase this memory. Failure to do so can result indata loss. The recommended Eclipse memory parameters are: eclipse.exe -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 1.参数的含义-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M-vmargs 说明后面是VM的参数,所以后面的其实都是JVM的参数了-Xms128m JVM初始分配的堆内存-Xmx512m JVM最大允许分配的堆内存,按需分配-XX:PermSize=64M JVM初始分配的非堆内存-XX

MySQL参数优化建议

喜你入骨 提交于 2020-03-01 00:18:00
MySQL提供了两种存储引擎:MyISAM和 InnoDB,MySQL4和5使用默认的MyISAM存储引擎。从MYSQL5.5开始,MySQL已将默认存储引擎从MyISAM更改为InnoDB。 MyISAM没有提供事务支持,而InnoDB提供了事务支持。 建议设置 default-storage-engine=InnoDB ,强烈建议不要再使用MyISAM引擎。 调整 innodb_buffer_pool_size 的大小,如果是单实例且绝大多数是InnoDB引擎表的话,可考虑设置为物理内存的50% -70%左右。 设置 innodb_file_per_table = 1 ,使用独立表空间。 调整 innodb_data_file_path = ibdata1:1G:autoextend,不要用默认的10M,在高并发场景下,性能会有很大提升。 设置 innodb_log_file_size= 256M,设置innodb_log_files_in_group=2,基本可以满足大多数应用场景。 调整 max_connection (最大连接数)、 max_connection_error (最大错误数)设置,根据业务量大小进行设置。 另外, open_files_limit、innodb_open_files、table_open_cache、table_definition

autocare使用命令

我的未来我决定 提交于 2020-02-29 16:51:51
Linux 查看目录占用大小 du -h --max-depth=1 du -sh * 删除当前目录所有文件 rm -rf * 可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu free -th Mem:表示物理内存统计 -/+ buffers/cached:表示物理内存的缓存统计 MySQL log_queries_not_using_indexes ==> ON 未走索引的语句以及相关情况均会被记录在慢查询日志当中 long_query_time ==> 1s 执行时间较长的语句也会被记录在慢查询日志 gunicorn独角兽 (mysite) [root@instance-xu9puhyr ProjectCRM]# pstree -ap|grep gunicorn (mysite) [root@instance-xu9puhyr ProjectCRM]# kill -9 进程号 重启 :kill -HUP 进程号 来源: https://www.cnblogs.com/lee-xingxing/p/10958547.html

虚拟内存

孤人 提交于 2020-02-28 12:46:12
手动设置虚拟内存 在默认状态下,是让系统管理虚拟内存的,但是系统默认设置的管理方式通常比较保守,在自动调节时会造成页面文件不连续,而降低读写效率,工作效率就显得不高,于是经常会出现“内存不足”这样的提示,下面就让我们自已动手来设置它吧。 ①用右键点击桌面上的“我的电脑”图标,在出现的右键菜单中选“属性”选项打开“系统属性”窗口。在窗口中点击“高级”选项卡,出现高级设置的对话框 ②点击“性能”区域的“设置”按钮,在出现的“性能选项”窗口中选择“高级”选项卡,打开其对话框。 ③在该对话框中可看到关于虚拟内存的区域,点击“更改”按钮进入“虚拟内存”的设置窗口。选择一个有较大空闲容量的分区,勾选“自定义大小”前的复选框,将具体数值填入“初始大小”、“最大值”栏中,而后依次点击“设置→确定”按钮即可,最后重新启动计算机使虚拟内存设置生效。 转自:百度知道 http://baike.baidu.com/view/976.htm 虚拟内存是计算机系统 内存管理 的一种技术。它使得 应用程序 认为它拥有连续的可用的 内存 (一个连续完整的 地址空间 ),而实际上,它通常是被分隔成多个 物理内存 碎片,还有部分暂时存储在外部 磁盘存储器 上,在需要时进行 数据交换 。 目录 简介 作用 虚拟内存不足的原因 1、感染病毒 2、虚拟内存设置不当 3、系统空间不足 4、因为SYSTEM用户权限设置不当

Linux SWAP交换分区大小设置

浪子不回头ぞ 提交于 2020-02-26 03:24:45
当Linux系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。 以前几乎所有Linux 系统管理的书上都推荐设置交换分区大小为内存的2倍。这些建议到了现在就是那么适用了,现在的服务器动不动就是 16GB/32GB甚至256GB 内存,难道相应的交换分区也要扩大到 32GB/64GB/512GB? 那么swap分区到底设置成多大才最优? 首先看下Redhat官方的文档中关于swap分区大小设置的建议 物理内存-------建议的交换空间---------如果开启休眠功能建议的交换空间 ⩽ 2GB-----------内存的2倍----------------内存的3倍 2GB – 8GB----等于内存大小-------------内存的2倍 8GB – 64GB---至少4G--------------------内存的1.5倍 64GB------------至少4G--------------------不建议使用休眠 因此,一般来说可以按照如下规则设置swap大小: 4G以内的物理内存,SWAP 设置为内存的2倍,不超过4G。 4-8G的物理内存,SWAP 等于内存大小。 8

CentOS的Redis内存分配策略配置

本小妞迷上赌 提交于 2020-02-26 01:24:34
  安装了一主两从节点,启动之后发现有一个警告: 大概是说overcommit_memory设置成了0,在低内存环境下后台保存可能会失败,设置成1重启可解决。 然后,不太懂这个配置的含义,google一把: overcommit_memory参数说明 : 设置内存分配策略(可选,根据服务器的实际情况进行设置) /proc/sys/vm/overcommit_memory 可选值:0、1、2。 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存 注意:redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为8G,这个时候也要同样分配8G的内存给child,如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)。 这里又涉及到Overcommit和OOM。 什么是Overcommit和OOM 在Unix中,当一个用户进程使用malloc()函数申请内存时