物理内存

linux 段页式内存管理

三世轮回 提交于 2019-12-28 13:21:36
http://blog.chinaunix.net/uid-24227137-id-3723898.html 页是信息的物理单位,分页是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率从;或者说,分页是由于系统管理的需要,而不是用户的需求。短是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需求。 进程是如何使用内存的 对于任意一个普通的进程都会涉及到5种不同的数据段, 代码段:存放代码 数据段:存放程序静态分配的变量和全局变量 BSS:未初始化的全局变量 堆:用于存放进程运行中被动态分配的内存段,大小不固定。Malloc分配内存时,新分配的内存的添加到堆上(堆扩张),free释放内存时称为堆缩减。 栈:存放局部变量,函数调用时传入的参数和返回的参数都保存在栈中。 如图所示:数据段、bss、堆段通常是被连续存储的,内存位置上是连续的。而代码和栈往往会被独立存放。栈向下生长,堆向上生长。 进程内存空间 Linux中采用虚拟内存管理技术,用户看到和接触到的都是该虚拟地址,无法看到实际的物理内存地址。利用虚拟地址使得用户不能直接访问物理内存,进程间也各自互不干涉,起到保护的作用;另一方面,用户程序可使用比实际物理内存更大的地址空间。4G进程空间分为两个部分,1-3G为用户空间,4G为内核空间,用户通常情况不能访问内核空间

Linux查看CPU和内存使用情况

Deadly 提交于 2019-12-28 03:13:55
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

linux下的tomcat jvm内存 .

╄→尐↘猪︶ㄣ 提交于 2019-12-26 22:47:30
常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: Java heap space --------------------------------------------------------- 这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。 一、java.lang.OutOfMemoryError: PermGen space PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小 超过了jvm默认的大小(4M)那么就会产生此错误信息了。 解决方法:

Linux swap

只谈情不闲聊 提交于 2019-12-24 18:23:11
1.S wap 在 Linux 和UNIX系统上都有一个SWAP分区,该分区,例似于于Windows系统上的虚拟内存。 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,临时转移到SWAP上,供当前运行的程序提供物理内存空间,当程序需要再访问被转移到了SWAP空间上的数据时,再从SWAP中恢复到物理内存中。从此工作原理不难看出来,SWAP要有,但是尽量不要使用,使用了就会发生内存交换,必然影响系统性能。 2.Swappiness swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。linux的基本默认设置为60,具体如下: [root@ server1 ~]# cat /proc/sys/vm/swappiness 60 也就是说,你的内存在使用到100-60=40%的时候,就开始出现有交换分区的使用。大家知道,内存的速度会比磁盘快很多,这样子会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整。 临时调整的方法如下,我们调成10: [root@ server1 ~]# sysctl

java NIO(二)----直接缓冲区和非直接缓冲区

白昼怎懂夜的黑 提交于 2019-12-23 13:37:03
   上一篇文章 写了关于java NIO缓冲区的一些基本的概念,这篇主要记录一下直接缓冲区和非直接缓冲区的概念 非直接缓冲区   下面是非直接缓冲区的读取模型图:   非直接缓冲区读原理就是:当 应用程序 要在操作系统 os 中读取一个数据得时候,先向 OS 发起一个读数据得请求,然后 os 中得物理磁盘将数据读到物理内存中,再将数据从物理内存中 copy 到 JVM 的内存中,然后 应用程序 再从 JVM 内存中读取出来。   非直接缓冲区的写数据原理正好和读数据原理相反。   从非直接缓冲区的读写数据的过程是一个开销比较大的过程,无论是读数据还是写数据,都需要经过 copy ,比较麻烦。后面有了直接缓冲区,就是直接在操作系统的物理内存中,开辟一个缓冲区。此缓冲区直接对接 OS 和 应用程序 ,使得物理内存和JVM内存之间不再需要进行数据的 copy 操作了。 直接缓冲区   下面是直接缓冲区的读取模型图: 1.创建直接缓冲区 ByteBuffer byteBuffer = ByteBuffer . allocateDirect ( 1024 ) ;   以上代码创建了一个指定大小为1024字节的字节直接缓冲区,在创建缓冲区的时候,会在JVM内存之外开辟一块内存,在每次调用基础操作系统的一个本机I/O之前或者之后,JVM都会尽量避免将缓冲区的内容复制到中间缓冲区

【讲清楚,说明白!】磁盘管理

拜拜、爱过 提交于 2019-12-22 22:21:30
目录: (一)硬盘结构介绍 (二)如何对分区进行管理 (三)对文件系统的管理 (四)管理swap (一)硬盘结构介绍 (1.1)我们的硬盘拆开后是由盘片构成的,我们发现每个盘片上都会有一层层的圆圈,两个圆圈中间的部分我们称之为磁道,每一个盘片都会被分成一块一块的,每一块我们称之为扇区,每一个扇区的大小为512字节(512B)。每一个磁道由外到内分别是磁道0、磁道1、磁道2等,每一个磁道上也会分成扇区0、扇区1、扇区2等,例如我们的硬盘起始位置称为0磁道0扇区。组成硬盘的最小结构我们称为“扇区”,组成文件系统的最小单位我们称为“block”,所以扇区也是我们在划分分区时的最小单位。 (1.2)在我们的硬盘中是由很多扇区构成的,例如我们的第一个分区从2048扇区开始到6000扇区结束,接着我们对分区进行格式化,默认的文件系统block的大小是4k,也就是8个扇区,因此系统默认为8个扇区组成一个block。 (1.3)现在我们拥有一块硬盘,我们假设一共有10000个扇区,我么一共分成4个分区,其中sda1分区从2048扇区开始到4000扇区结束、sda2分区从4001扇区开始到6000扇区结束、sda3分区从6001扇区开始到8000扇区结束、sda4分区从8001扇区开始到10000扇区结束。为了记录我们系统中的分区划分的信息,在我们硬盘的第一个扇区中记录了各种各样的信息

Java常见内存溢出异常分析

时间秒杀一切 提交于 2019-12-20 15:43:39
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆内存分为了三部分,新生代,老年代,持久带,其中持久带实现了规范中规定的方法区,而内存模型中不同的部分都会出现相应的OOM错误,接下来我们就分开来讨论一下。 栈溢出(StackOverflowError) 栈溢出抛出java.lang.StackOverflowError错误,出现此种情况是因为方法运行的时候栈的深度超过了虚拟机容许的最大深度所致。 出现这种情况,一般情况下是程序错误所致的,比如写了一个死递归,就有可能造成此种情况。 下面我们通过一段代码来模拟一下此种情况的内存溢出。 Java代码 import java.util.*; import java.lang.*; public class OOMTest{ public void stackOverFlowMethod(){ stackOverFlowMethod(); } public static void main(String... args){ OOMTest oom = new OOMTest(); oom.stackOverFlowMethod(); } } 运行上面的代码,会抛出如下的异常: 引用 Exception

linux运维

五迷三道 提交于 2019-12-19 17:49:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、所有知识都有适用范围。比如牛顿第三定律,比如安装linux系统的时候swap分区最好事物理内存的两倍,但是如果物理内存事1G的话或许有用,如果物理内存事128G的话,分配256G的硬盘多浪费硬盘而且内存真要往硬盘中方256G的数据,系统慢的还能用吗? 2、组装机器参数 注意cpu,主板,内存之间的频率是否兼容,不兼容的话整体的频率以频率低的为准。 cpu的缓存和硬盘的缓存能大大提高性能。 来源: oschina 链接: https://my.oschina.net/u/1777956/blog/707986

无法在节点上执行物理内存检查

こ雲淡風輕ζ 提交于 2019-12-19 07:50:21
原文来自: http://mahilion.blog.163.com/blog/static/183087295201243112739831/ 安装Oracle 11g r2出现如下错误: //物理内存 物理内存 - 此先决条件将测试系统物理内存总量是否至少为 922MB (944128.0KB)。 预期值 : N/A 实际值 : N/A 错误列表: - //可用物理内存 PRVF-7531 : 无法在节点 "LENOVO-F4F9938F" 上执行物理内存检查 - Cause: 无法在指示的节点上执行物理内存检查。 - Action: 确保可以访问指定的节点并可以查看内存信息。 可用物理内存 - 此先决条件将测试系统可用物理内存是否至少为 50MB (51200.0KB)。 预期值 : N/A 实际值 : N/A 错误列表: - PRVF-7563 : 无法在节点 "LENOVO-F4F9938F" 上执行可用内存检查 - Cause: 无法在指示的节点上执行可用内存检查。 - Action: 确保可以访问指定的节点并可以查看内存信息。 //交换空间大小 交换空间大小 - 此先决条件将测试系统是否具有足够的总交换空间。 预期值 : N/A 实际值 : N/A 错误列表: - PRVF-7574 : 无法在节点 "LENOVO-F4F9938F" 上执行交换空间大小检查 -

Linux储存管理

 ̄綄美尐妖づ 提交于 2019-12-19 00:54:54
述 物理内存就是系统硬件提供的内存大小,是真正的内存。相对于物理内存,在Linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。 vmstat命令 一个查看虚拟内存(Virtual Memory Statistics)使用状况的工具。使用该命令可以对虚拟内存、进程、CPU活动进行监控。 vmstat vmstat 3 2 //每3秒采集一次,共两次。 第一个参数是采样的时间间隔数(Interval),单位是秒,第二个参数是采样的次数(Count)。 符号 意义 r 表示运行队列。 b 表示阻塞的进程 swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足。 buff 用来存储要输出的数据大小。 free 空闲的物理内存的大小。 cache 用来存储要读入的数据大小。 si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用。 so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。 bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte。 bo 块设备每秒发送的块数量。 in 每秒CPU的中断次数,包括时间中断。 cs 每秒上下文切换次数,例如我们调用系统函数