物理内存

Linux学习(一)--基本概念

蓝咒 提交于 2020-04-05 23:38:58
一、Linux概述 Linux是一款全球性的免费的开源的操作系统平台,其特点是实现了多任务多用户处理,主要是依赖内核kernel shell,且占用资源少 (最小配置只要4Mb内存就能运行)。 百度百科概述 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。 它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。 Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。 Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。 严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核, 并且使用GNU工程各种工具和数据库的操作系统。 1.1由来 类UNIX的,与UNIX都是服务器系统。 1.2与UNIX的区别 Linux是免费开源的,UNIX是商业应用性软件操作系统,UNIX是与硬件进行捆绑销售的,UNIX是不开源的(部分开源,但是核心代码是不开源的) 1.3.版本

大页内存原理

时间秒杀一切 提交于 2020-03-18 17:06:27
什么是内存分页? 我们知道,CPU是通过寻址来访问内存的。32位CPU的寻址宽度是 0~0xFFFFFFFF ,16^8 计算后得到的大小是4G,也就是说可支持的物理内存最大是4G。 但在实践过程中,碰到了这样的问题,程序需要使用4G内存,而可用物理内存小于4G,导致程序不得不降低内存占用。 为了解决此类问题,现代CPU引入了 MMU(Memory Management Unit 内存管理单元)。 MMU 的核心思想是利用虚拟地址替代物理地址,即CPU寻址时使用虚址,由 MMU 负责将虚址映射为物理地址。 MMU的引入,解决了对物理内存的限制,对程序来说,就像自己在使用4G内存一样。 内存分页(Paging)是在使用MMU的基础上,提出的一种内存管理机制。它将虚拟地址和物理地址按固定大小(4K)分割成页(page)和页帧(page frame),并保证页与页帧的大小相同。 这种机制,从数据结构上,保证了访问内存的高效,并使OS能支持非连续性的内存分配。 在程序内存不够用时,还可以将不常用的物理内存页转移到其他存储设备上,比如磁盘,这就是大家耳熟能详的虚拟内存。 在上文中提到,虚拟地址与物理地址需要通过映射,才能使CPU正常工作。 而映射就需要存储映射表。在现代CPU架构中,映射关系通常被存储在物理内存上一个被称之为页表(page table)的地方。 如下图: 从这张图中

Linux查看CPU和内存使用情况

给你一囗甜甜゛ 提交于 2020-03-17 04:05:48
top命令   top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。   运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。    内容解释: 第一行(top):   15:24:36 系统当前时刻   14 days 系统启动后到现在的运作时间   3 users 当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目   load average 当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程 第二行(Tasks):   288 total 当前系统进程总数   1 running 当前运行中的进程数   287 sleeping 当前处于等待状态中的进程数   0 stoped 被停止的系统进程数   0 zombie 僵尸进程数 第三行(Cpus):   7.3% us 用户空间占用CPU百分比   2.0% sy

pidstat 命令简介

心不动则不痛 提交于 2020-03-16 06:45:25
pidstat pidstat命令指定采样周期和采样次数,命令形式为”pidstat [option] interval [count]”,以下pidstat输出以2秒为采样周期,输出10次cpu使用统计信息: 指令说明 pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。 使用pidstat进行问题定位时,以下命令常被用到: # 使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。 pidstat -u 1 # 使用-r选项,pidstat将显示各活动进程的内存使用统计: pidstat -r 1 # 使用-d选项,我们可以查看进程IO的统计信息: pidstat -d 1 -r 或是默认情况 minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数 majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时

free内存监控

跟風遠走 提交于 2020-03-11 21:49:42
语  法: free [-bkmotV][-s <间隔秒数>] 补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 参  数: -b  以Byte为单位显示内存使用情况。 -k  以KB为单位显示内存使用情况。 -m  以MB为单位显示内存使用情况。 -o  不显示缓冲区调节列。 -s<间隔秒数>  持续观察内存使用状况。 -t  显示内存总和列。 -V  显示版本信息。 Mem:表示物理内存统计 -/+ buffers/cached:表示物理内存的缓存统计 Swap:表示硬盘上交换分区的使用情况 第1行 Mem: total:表示物理内存总量。 used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free:未被分配的内存。 shared:共享内存,一般系统不会用到,这里也不讨论。 buffers:系统分配但未被使用的buffers 数量。 cached:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。 total = used + free 第2行 -/+ buffers/cached: used:也就是第一行中的used – buffers-cached 也是实际使用的内存总量。 free:未被使用的buffers

Redis内存使用优化与存储

眉间皱痕 提交于 2020-03-11 06:42:22
常用内存优化手段与参数   我们知道Redis实际上的内存管理成本非常高,即占用了过多的内存,所以我们讨论通过一系列的参数和手段来控制和节省内存。   首先最重要的一点是不要开启Redis的VM选项,即虚拟内存功能,这个本来是作为Redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本也非常的高,并且我们后续会分析此种持久化策略并不成熟,所以要关闭VM功能,请检查你的redis.conf文件中 vm-enabled 为 no。   其次最好设置下redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。   另外Redis为不同数据类型分别提供了一组参数来控制内存使用,我们在前面详细分析过Redis Hash是value内部为一个HashMap,如果该Map的成员数比较少,则会采用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,这个参数控制对应在redis.conf配置文件中下面2项: hash-max-zipmap-entries 64 hash-max-zipmap-value 512 hash-max-zipmap-entries  

Linux内存分配机制

不羁岁月 提交于 2020-03-07 14:07:34
原文:https://blog.csdn.net/gfgdsg/article/details/42709943 Linux 的虚拟内存管理有几个关键概念: 1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址; 2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址; 3、如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。 基于以上认识,进行了如下分析: 一、Linux 虚拟地址空间如何分布? Linux 使用虚拟地址空间,大大增加了进程的寻址空间,由低地址到高地址分别为: 1、只读段:该部分空间只能读,不可写;(包括:代码段、rodata 段(C常量字符串和#define定义的常量) ) 2、数据段:保存全局变量、静态变量的空间; 3、堆 :就是平时所说的动态内存, malloc/new 大部分都来源于此。其中堆顶的位置可通过函数 brk 和 sbrk 进行动态调整。 4、文件映射区域 :如动态库、共享内存等映射物理空间的内存,一般是 mmap 函数所分配的虚拟地址空间。 5、栈:用于维护函数调用的上下文空间,一般为 8M ,可通过 ulimit –s 查看。 6、内核虚拟空间

Linux 的性能调优的思路

删除回忆录丶 提交于 2020-03-06 17:39:59
原文: https://mp.weixin.qq.com/s/wjQhl5y1bmPGsOKY4CHuEw Linux操作系统是一个开源平台,在这个平台下有无数的开源软件支撑,我们常见的apache、tomcat、mysql等。最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应用最优的性能。 因此,谈到性能问题,主要实现的是Linux操作系统和应用程序的最佳结合。 01性能问题综述 系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。 Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速度慢等现象,而遇到这些问题,就有人会抱怨Linux系统不好,其实这些都是表面现象。 操作系统完成一个任务时,与系统自身设置、网络拓朴结构、路由设备、路由策略、接入设备、物理线路等多个方面都密切相关,任何一个环节出现问题,都会影响整个系统的性能。 因此当Linux应用出现问题时,应当从应用程序、操作系统、服务器硬件、网络环境等方面综合排查,定位问题出现在哪个部分,然后集中解决。 在应用程序、操作系统、服务器硬件、网络环境等方面,影响性能最大的是应用程序和操作系统两个方面,因为这两个方面出现的问题不易察觉,隐蔽性很强。而硬件、网络方面只要出现问题,一般都能马上定位。 下面主要讲解操作系统方面的性能调优思路

又能扯皮了!没内存了还能看片?

拥有回忆 提交于 2020-03-06 15:35:58
虚拟内存 尽管基址寄存器和变址寄存器用来创建地址空间的抽象,但是这有一个其他的问题需要解决: 管理软件的膨胀(managing bloatware) 。虽然内存的大小增长迅速,但是软件的大小增长的要比内存还要快。在 1980 年的时候,许多大学用一台 4 MB 的 VAX 计算机运行分时操作系统,供十几个用户同时运行。现在微软公司推荐的 64 位 Windows 8 系统至少需要 2 GB 内存,而许多多媒体的潮流则进一步推动了对内存的需求。 这一发展的结果是,需要运行的程序往往大到内存无法容纳,而且必然需要系统能够支持多个程序同时运行,即使内存可以满足其中单独一个程序的需求,但是从总体上来看内存仍然满足不了日益增长的软件的需求(感觉和xxx和xxx 的矛盾很相似)。而交换技术并不是一个很有效的方案,在一些中小应用程序尚可使用交换,如果应用程序过大,难道还要每次交换几 GB 的内存?这显然是不合适的,一个典型的 SATA 磁盘的峰值传输速度高达几百兆/秒,这意味着需要好几秒才能换出或者换入一个 1 GB 的程序。 SATA(Serial ATA)硬盘,又称串口硬盘,是未来 PC 机硬盘的趋势,已基本取代了传统的 PATA 硬盘。 那么还有没有一种有效的方式来应对呢?有,那就是使用 虚拟内存(virtual memory) ,虚拟内存的基本思想是,每个程序都有自己的地址空间

JVM学习:如何使用visualGC调优Eclipse启动过程。

旧街凉风 提交于 2020-03-06 00:19:29
转载自品略网: http://www.pinlue.com/article/2020/03/0422/199981849836.html 最近在学习JVM,了解了一些关于JVM的内存分配和垃圾回收的知识,其中有有一个实战是优化Eclipse的启动,从类加载时间、JIT编译时间、垃圾收集时间三个方面做了优化,简单、综合性强,可以加深对JVM的理解,所以这里对其进行验证。 硬件和操作系统环境: Java版本(HotSpot虚拟机): Eclipse相关信息: 原始的启动配置: 最大永久代空间是256M,初始堆40M,最大512M 启动后的GC信息,使用jvisualvm工具查看: 使用eclipse插件来对eclipse启动计时。 优化类加载速度: 使用jstat -class ID查看类加载,原始情况如下: 考虑到不需要再加载的时候进行字节码验证,因此通过参数-Xverify:none禁止掉字节码验证过程。优化后的类加载时间变为,大概降低为原来的一半时间: 优化编译时间: 编译时间是指虚拟机的JIT(just in time compiler)编译器编译热点代码的耗时,虚拟机解释执行字节码速度慢,通过虚拟机内置的运行时编译器,将热点代码即时编译为本地代码,以提高运行速度。 -Xint参数禁止编译器运作,强制虚拟机对字节码采用纯解释方式执行。 当虚拟机运行在-client模式的时候