精华内容
下载资源
问答
  • Linux 内存参数详解

    千次阅读 2018-02-11 11:16:45
    【查看内存参数详解】Linux free -m 详细说明free 命令相对于top 提供了更简洁的查看系统内存使用情况:$ free total used free shared buffers cachedMem: ...

    【查看内存参数详解】Linux free -m 详细说明

    free 命令相对于top 提供了更简洁的查看系统内存使用情况:
    $ free

                                          total            used         free      shared       buffers       cached
    Mem:                          255268       238332     16936       0              85540       126384
    -/+ buffers/cache:                           26408      228860
    Swap:                         265000            0          265000
     
     
    其中的相关说明:  
    Mem:表示物理内存统计
    -/+ buffers/cached:表示物理内存的缓存统计
    Swap:表示硬盘上交换分区的使用情况(这里我们不去关心
    系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。

    我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
    total1:    表示物理内存总量。
    used1:     表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
    free1:     未被分配的内存。
    shared1:   共享内存,一般系统不会用到,这里也不讨论。
    buffers1: 系统分配但未被使用的buffers 数量。
    cached1:   系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
    used2:     实际使用的buffers 与cache 总量,也是实际使用的内存总量。
    free2:     未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
     
    可以整理出如下等式:
    total1 = used1 + free1
    total1 = used2 + free2
    used1   = buffers1 + cached1 + used2
    free2   = buffers1 + cached1 + free1
     
    buffer 与cache 的区别
    A buffer is something that has yet to be "written" to disk.
    A cache is something that has been "read" from the disk and stored for later use.
      更详细的解释参考:Difference Between Buffer and Cache
    对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣, 请参考:What is Shared Memory?
     
    cache 和 buffer的区别
    Cache: 高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周 期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提 高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。
    Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
     
    Free中的buffer和cache(它们都是占用内存)
    buffer: 作为buffer cache的内存,是设备的读写缓冲区
    cache: 作为page cache的内存, 文件系统的cache如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。
     
    Buffer和Cache的区别
        缓存(cached)把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
        缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定 期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的MP3,但U盘的 灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。

    修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。
    两者都是RAM中的数据。简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。
    buffer是由各种进程分配的,被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。
    cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提供系统性能。

    Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经常要跟一帮人吵着说Pagefile的大小,以及如何分配这个问题,在linux大家就不用再吵什么swap大小的问题,我个人认为,swap设个512M已经足够了,如果你问说512M的SWAP不够用怎么办?只能说大哥你还是加内存吧,要不就检查你的应用,是不是真的出现了memory leak.

    在Linux下查看内存我们一般用command free
    [root@nonamelinux ~]# free
                      total           used       free     shared    buffers     cached
    Mem:    386024      377116     8908       0           21280     155468
    -/+ buffers/cache:     200368    185656
    Swap:    393552            0          393552


    下面是对这些数值的解释:
    第二行(mem):
    total:总计物理内存的大小。
    used:已使用多大。
    free:可用有多少。
    Shared:多个进程共享的内存总额。
    Buffers/cached:磁盘缓存的大小。
    第三行(-/+ buffers/cached):
    used:已使用多大。
    free:可用有多少。
    第四行就不多解释了。


    区别
    第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。
    这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用+Application(X,Oracle,etc)使用的+buffers+cached.
    第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
    所以从应用程序的角度来说,可用内存=系统free( memory+buffers+cached.)
    如上例:
    185656=8908+21280+155468
    接下来解释什么时候内存会被交换,以及按什么方交换。
    当可用内存少于额定值的时候,就会开会进行交换.
    如何看额定值(RHEL4.0):
    #cat /proc/meminfo
    交换将通过三个途径来减少系统中使用的物理页面的个数: 
    1.减少缓冲与页面cache的大小,
    2.将系统V类型的内存页面交换出去, 
    3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
    事实上,少量地使用swap是不是影响到系统性能的。

    展开全文
  • 使用tomcat部署一些负载比较大的业务系统,会占用很大的内存,这时候就需要优化一下tomcat的...详细步骤请参考文章 《Tomcat优化:内存参数详解及如何配置》:链接https://www.huadaninfo.com/hdedu/981563.html ...

    使用tomcat部署一些负载比较大的业务系统,会占用很大的内存,这时候就需要优化一下tomcat的内存参数,那么具体该怎么设置呢?
    首先我们要先了解一些参数,比如-Xms:java Heap、-Xmx:java heap、-XX:MaxNewSize等等。
    然后再进行相应的配置
    详细步骤请参考文章 《Tomcat优化:内存参数详解及如何配置》:链接https://www.huadaninfo.com/hdedu/981563.html

    展开全文
  • JVM内存参数详解以及配置调优

    千次阅读 2015-03-12 23:11:19
    JVM内存参数详解以及配置调优 基本概念: PermGen space:全称是Permanent Generation space。就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域 Heap space:存放Instance。GC...
    JVM内存参数详解以及配置调优


    基本概念:
    PermGen space:全称是Permanent Generation space。就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域
    Heap space:存放Instance。GC(Garbage Collection)应该不会对PermGen space进行清理
    所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误
    Java Heap分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象。


    JVM有2个GC线程。
    第一个线程负责回收Heap的Young区。
    第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。


    为什么一些程序频繁发生GC?有如下原因:
    程序内调用了System.gc()或Runtime.gc()。
    一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
    Java的Heap太小,一般默认的Heap值都很小。
    频繁实例化对象,Release对象。此时尽量保存并重用对象,例如使用StringBuffer()和String()。
    如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态。许多Server端的Java程序每次GC后最好能有65%的剩余空间。


    建议Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3。一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。


    增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
    Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。


    Stack的设定
    每个线程都有他自己的Stack。
    -Xss 每个线程的Stack大小 
    Stack的大小限制着线程的数量。如果Stack过大就会导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。


    硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
    如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用。


    4种GC
    1、第一种为单线程GC,也是默认的GC。,该GC适用于单CPU机器。
    2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
    3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
    4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。


    JVM参数配置 
    1: heap size 
    a: -Xmx<n> 
    指定 jvm 的最大 heap 大小 , 如 :-Xmx=2g 


    b: -Xms<n> 
    指定 jvm 的最小 heap 大小 , 如 :-Xms=2g , 高并发应用, 建议和-Xmx一样, 防止因为内存收缩/突然增大带来的性能影响。 


    c: -Xmn<n> 
    指定 jvm 中 New Generation 的大小 , 如 :-Xmn256m。 这个参数很影响性能, 如果你的程序需要比较多的临时内存, 建议设置到512M, 如果用的少, 尽量降低这个数值, 一般来说128/256足以使用了。 


    d: -XX:PermSize=<n> 
    指定 jvm 中 Perm Generation 的最小值 , 如 :-XX:PermSize=32m。 这个参数需要看你的实际情况,。 可以通过jmap 命令看看到底需要多少。 


    e: -XX:MaxPermSize=<n> 
    指定 Perm Generation 的最大值 , 如 :-XX:MaxPermSize=64m 


    f: -Xss<n> 
    指定线程桟大小 , 如 :-Xss128k, 一般来说,webx框架下的应用需要256K。 如果你的程序有大规模的递归行为,请考虑设置到512K/1M。 这个需要全面的测试才能知道。 不过,256K已经很大了。 这个参数对性能的影响比较大的。 


    g: -XX:NewRatio=<n> 
    指定 jvm 中 Old Generation heap size 与 New Generation 的比例 , 在使用 CMS GC 的情况下此参数失效 , 如 :-XX:NewRatio=2 


    h: -XX:SurvivorRatio=<n> 
    指 定 New Generation 中 Eden Space 与一个 Survivor Space 的 heap size 比例 ,-XX:SurvivorRatio=8, 那么在总共 New Generation 为 10m 的情况下 ,Eden Space 为 8m 


    i: -XX:MinHeapFreeRatio=<n> 
    指定 jvm heap 在使用率小于 n 的情况下 ,heap 进行收缩 ,Xmx==Xms 的情况下无效 , 如 :-XX:MinHeapFreeRatio=30 


    j: -XX:MaxHeapFreeRatio=<n> 
    指定 jvm heap 在使用率大于 n 的情况下 ,heap 进行扩张 ,Xmx==Xms 的情况下无效 , 如 :-XX:MaxHeapFreeRatio=70 


    k: -XX:LargePageSizeInBytes=<n> 
    指定 Java heap 的分页页面大小 , 如 :-XX:LargePageSizeInBytes=128m 


    2: garbage collector 


    a: -XX:+UseParallelGC 
    指 定在 New Generation 使用 parallel collector, 并行收集 , 暂停 app threads, 同时启动多个垃圾回收 thread, 不能和 CMS gc 一起使用 . 系统吨吐量优先 , 但是会有较长长时间的 app pause, 后台系统任务可以使用此 gc 


    b: -XX:ParallelGCThreads=<n> 
    指定 parallel collection 时启动的 thread 个数 , 默认是物理 processor 的个数 , 


    c: -XX:+UseParallelOldGC 
    指定在 Old Generation 使用 parallel collector 


    d: -XX:+UseParNewGC 
    指定在 New Generation 使用 parallel collector, 是 UseParallelGC 的 gc 的升级版本 , 有更好的性能或者优点 , 可以和 CMS gc 一起使用


    e: -XX:+CMSParallelRemarkEnabled 
    在使用 UseParNewGC 的情况下 , 尽量减少 mark 的时间 


    f: -XX:+UseConcMarkSweepGC 
    指 定在 Old Generation 使用 concurrent cmark sweep gc,gc thread 和 app thread 并行 ( 在 init-mark 和 remark 时 pause app thread). app pause 时间较短 , 适合交互性强的系统 , 如 web server 


    g: -XX:+UseCMSCompactAtFullCollection 
    在使用 concurrent gc 的情况下 , 防止 memory fragmention, 对 live object 进行整理 , 使 memory 碎片减少 


    h: -XX:CMSInitiatingOccupancyFraction=<n> 
    指示在 old generation 在使用了 n% 的比例后 , 启动 concurrent collector, 默认值是 68, 如 :-XX:CMSInitiatingOccupancyFraction=70 


    i: -XX:+UseCMSInitiatingOccupancyOnly 
    指示只有在 old generation 在使用了初始化的比例后 concurrent collector 启动收集 


    3:others 


    a: -XX:MaxTenuringThreshold=<n> 
    指 定一个 object 在经历了 n 次 young gc 后转移到 old generation 区 , 在 linux64 的 java6 下默认值是 15, 此参数对于 throughput collector 无效 , 如 :-XX:MaxTenuringThreshold=31 


    b: -XX:+DisableExplicitGC 
    禁止 java 程序中的 full gc, 如 System.gc() 的调用. 最好加上么, 防止程序在代码里误用了。对性能造成冲击。 


    c: -XX:+UseFastAccessorMethods 
    get,set 方法转成本地代码 


    d: -XX:+PrintGCDetails 
    打应垃圾收集的情况如 : 
    [GC 15610.466: [ParNew: 229689K->20221K(235968K), 0.0194460 secs] 1159829K->953935K(2070976K), 0.0196420 secs] 


    e: -XX:+PrintGCTimeStamps 
    打应垃圾收集的时间情况 , 如 : 
    [Times: user=0.09 sys=0.00, real=0.02 secs] 


    f: -XX:+PrintGCApplicationStoppedTime 
    打应垃圾收集时 , 系统的停顿时间 , 如 : 
    Total time for which application threads were stopped: 0.0225920 seconds 


    JVM参数设置大全 
    http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp 


    JVM参数设置大全压缩版 
    http://blogs.sun.com/watt/resource/jvm-options-list.html

    展开全文
  • JVM 内存参数详解

    2020-11-24 15:49:38
    GC调优参数 -Xmx 最大堆大小(堆内存) -Xms 初始堆大小(堆内存) -XX:pARallelGcThreads=20 配置并行收集器的线程数 -XX:+UseConcMarkSweepGC CMS为基于标记清除算法实现的多线程老年代垃圾回收器 -XX:+...

    GC调优参数
    -vmargs 说明后面是VM的参数

    • -Xmx 最大堆大小(堆内存)
    • -Xms 初始堆大小(堆内存)
    • -XX:pARallelGcThreads=20 配置并行收集器的线程数
    • -XX:+UseConcMarkSweepGC CMS为基于标记清除算法实现的多线程老年代垃圾回收器
    • -XX:+PrintGCDetails 打印详细的GC日志
    • -XX:+UseParNewGC Parallel是并行的意思,ParNew收集器是Serial收集器的多线程版本,使用这个参数后会在新生代进行并行回收,老年代任旧使用串行回收。
    • -XX:+DisableExplicitGC 禁用GC手动释放(比如:System.gc())
    展开全文
  • Linux top VIRT RES SHR SWAP DATA内存参数详解  其实很早之前就想开博客,写一写码农几年自己积攒下来的知识与见解。看过很多文章有过很多感触,有些收获很值得梳理一下认真思考反思的。今天就先从基本的top...
  • Linux top VIRT RES SHR SWAP DATA内存参数详解 转载:http://blog.csdn.net/u011547375/article/details/9851455  其实很早之前就想开博客,写一写码农几年自己积攒下来的知识与见解。看过很多文章有过很多...
  • JVM内存参数详解以及配置调优(二)-JVM堆参数配置 JVM参数配置  1: heap size  a: -Xmx  指定 jvm 的最大 heap 大小 , 如 :-Xmx=2g  b: -Xms  指定 jvm 的最小 heap 大小 , 如 :-Xms=2g , 高并发...
  • 系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。 典型设置: ...
  • YARN 内存参数详解

    2018-09-28 16:20:00
    这两个参数是管理员用来设置用户能够设置的每个任务可申请的最小和最大内存资源。具体每个任务到底申请多少,由各个应用程序单独设置,如果是mapreduce程序,可以map task申请的资源可通过mapreduce.map.memory.mb...
  • JVM内存参数详解以及配置调优(四)-输出日志文件 在进行JVM内存分析时,可以将一些日志文件进行输出,帮助我们进行性能诊断,在JVM的启动参数中添加需要的参数即可: -verbose:gc 输出一些GC信息 -XX:+...
  • JBOSS内存参数详解

    2014-11-05 11:07:00
    JAVA_OPTS="$JAVA_OPTS -server-Xms1024m -Xmx1024m -Xss512k-XX:PermSize=128m -XX:...-server:一定要作为第一个参数,在多个CPU时性能佳 -Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些 -X...
  • JVM内存参数详解以及配置调优(三)-garbage collector  在JVM启动时,在必要的时候,配置相关的GC参数,帮助进行性能诊断和分析: a: -XX:+UseParallelGC  指 定在 New Generation 使用 parallel ...
  • JVM内存参数详解以及配置调优(一) 基本概念: PermGen space:全称是Permanent Generation space。就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域 Heap space:存放...
  • adb shell 内存参数详解

    千次阅读 2018-02-02 11:08:31
    实际使用物理内存(包含共享库占用的内存)是单个进程实际占用的内存大小,对于单个共享库,尽管无论多少个进程使用,实际该共享库只会被装入内存一次。 PSS - Proportional Set Size 实际使用的物理内存(比例分配...
  • 内存容量 cpu使用率 网络 使用/优化不当 redis性能出现问题的表象有哪些 连接超时 延时过高 查看redis的某些参数和其含义 info 连接redis以后,输入info,info命令输出的数据可分为10个类别,分别是: server ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,173
精华内容 1,269
关键字:

内存参数详解