【随笔】内存性能监测相关

  这里的讲到的"内存"包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一起作为虚拟内存为计算机提供了一个连贯的虚拟内存空间,好处是我们拥有的内存 "变多了",可以运行更多、更大的程序,坏处是把部分硬盘当内存用整体性能受到影响,硬盘读写速度要比内存慢几个数量级,并且 RAM 和 SWAP 之间的交换增加了系统的负担。



  在电脑中,所有程序都是在内存中运行的,当运行程序所需内存不足时,内存管理就会把一些不活跃的页给转移到虚拟内存中。

  虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存。而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

  在不同的系统中,都应用了虚拟内存技术。在windows中,称之为"虚拟内存",在linux中,称之为"交换空间"。

  Linux 内核读写虚拟内存是以 "页" 为单位操作的,在x86系统中,每个页大小是 4KB。把内存转移到硬盘交换空间(SWAP)和从交换空间读取到内存的时候都是按页来读写的。内存和 SWAP 的这种交换过程称为页面交换。

  在程序运行中,由于内核读取高速缓存内数据的速度要远远高于读取硬盘内的数据的速度,所以将会将一些关键数据保存到高速缓存中,当进程更改了高速缓存内的以页为单位的数据时,该页就被称之为"脏页"。内核将会在合适的时间把脏页的数据写到磁盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。



  这里介绍内核管理内存的两个关键进程kswapd和pdflush:

  kswapd

  作用是用于管理内存

  kswapd进程用来检查pages_hight和pages_low两个阀值,当系统可用内存低于pages_low时,便会唤醒kswapd守护进程,kswapd将开始扫描并试图释放页面,并且重复这一过程直至可用内存大于pages_hight为止。

  kswapd扫描时会检查3件事:

  1、如果页面没有没有被修改,这将页面放到可用内存列表里;

  2、如果页面被文件系统修改了,将把页面内容写入磁盘;

  3、如果页面被修改了,不过不是被文件系统修改,这将页面写入到交换空间。

  pdflush

  作用是用于同步文件相关的内存页面,把内存页面及时同步到硬盘上。

  比如打开一个文件,文件被导入到内存里,对文件做了修改后并保存后,内核并不马上保存文件到硬盘,由 pdflush 决定什么时候把相应页面写入硬盘,这由一个内核参数 vm.dirty_background_ratio 来控制。

  pdflush进程一般会被以下几种情况唤醒以回写脏页:

  1、定时机制:

    定时机制可定时唤醒pdflush内核进程,来回些脏页。可通过命令:

cat /proc/sys/vm/dirty_writeback_centisecs

    来查看定时周期,其单位为"1/100"秒。

  2、内存不足时:

    此时并不会将所有脏页写入到磁盘,而时每次大概写入1024个页面,知道空闲内存满足需求为止。

  3、当写操作时发现脏页超过一定比例

    当脏页所占系统内存比例超过"/proc/sys/vm/dirty_background_ratio"的时候,将会唤醒pdflush进程回写脏页,知道比例低于设定值。

  4、用户调用sync系统调用

    系统会唤醒pdflush进程知道所有脏页全部写入磁盘为止。



  有时候,通过top命令查看进程时会发现kswapd进程占用了大量的CPU资源,这个问题容易引起系统宕机,这是由于系统发现内存资源不足而唤醒kswapd进程以释放内存资源引起的,这时候只需要优化系统,释放占用太多内存的进程就可以了。

时间: 2024-11-10 07:24:39

【随笔】内存性能监测相关的相关文章

Linux中CPU与内存性能监测

在系统维护的过程中,随时可能有需要查看 CPU 使用率内存使用情况的需要,尤其是涉及到JVM,程序调优的情况,并根据相应信息分析系统状况的需要. top命令 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等.退出 top 的命令为 q (在 top 运行中敲 q 键一次). 可以直接使用top命令

Linux按照CPU、内存、磁盘IO、网络性能监测

目录[-] Linux性能监测:CPU篇 Linux性能监测:内存篇 Linux性能监测:磁盘IO篇 Linux性能监测:网络篇 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上的优化就适合眼下正在运行的系统,不同的系统.不同的硬件.不同的应用优化的重点也不同. 优化的方法也不同.优化的参数也不同.性能监测是系统优化过程中重要的一环,如果没有监测

Linux按照CPU、内存、磁盘IO、网络性能监测【转载】

本文转载地址:https://my.oschina.net/chape/blog/159640 Linux按照CPU.内存.磁盘IO.网络性能监测 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上的优化就适合眼下正在运行的系统,不同的系统.不同的硬件.不同的应用优化的重点也不同. 优化的方法也不同.优化的参数也不同.性能监测是系统优化过程中重要的

Linux性能监测:内存篇

在操作系统里,虚拟内存被分成页,在 x86 系统上每个页大小是 4KB.Linux 内核读写虚拟内存是以 "页" 为单位操作的,把内存转移到硬盘交换空间(SWAP)和从交换空间读取到内存的时候都是按页来读写的.虚拟内存管理是 Linux 内核里面最复杂的部分. 这里的讲到的 "内存" 包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一起作为虚拟内存为计算机提供了一个连

Android内存性能优化(内部资料总结)

刚入门的童鞋肯能都会有一个疑问,Java不是有虚拟机了么,内存会自动化管理,我们就不必要手动的释放资源了,反正系统会给我们完成.其实Java中没有指针的概念,但是指针的使用方式依然存在,一味的依赖系统的gc,很容易就造成了内存的浪费.   Java基于垃圾回收的内存机制 Java的内存管理机制会自动回收无用对象所占用的内存,减轻手工管理内存的负担 1.C/C++: 从申请.使用.释放都需要手工管理 2.Java:无用的对象的内存会被自动回收 什么样的对象是无用的对象 1.Java通过引用来操作一

Linux 性能监测工具总结

前言: Linux系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工具来判断究竟是哪一部分(内存.CPU.硬盘--)出了问题.在Linux系统中,所有的运行参数保存在虚拟目录/proc中,换句话说,我们使用的性能监控工具取到的数据值实际上就是源自于这个目录,当涉及到系统高估时,我们就可以修改/proc目录中的相关参数了,当然有些是不能乱改的.下面就让我们了解一下这些常用的性能监控工具. 1.uptimeuptime命令用于查看服务器运行了多长时间以及有多少个用户登录,快速

Linux性能监测(转载)

Linux性能监测 1.Linux性能监测:监测目的与工具介绍 看了某某教程.读了某某手册,按照要求改改某些设置.系统设定.内核参数就认为做到系统优化的想法很傻很天真:)系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上的优化就适合眼下正在运行的系统,不同的系统.不同的硬件.不同的应用优化的重点也不同.优化的方法也不同.优化的参数也不同.性能监测是系

Linux主机性能监测

Linux主机作为服务器,在很多高并发的场景下,需要对系统参数进行优化来提升主机性能.而确认主机的性能瓶颈点在哪里就非常重要了,这里主要在以下几个方面进行说明: 1.CPU 2.内存 3.磁盘 4.网络 下面就这几个方面借助网友的经验,简单的总结一下.内容主要来自http://www.vpsee.com/ CPU的监测 在确定是否需要对系统进行优化时,我们首先需要确认系统CPU目前的负载状态.我们可以使用 vmstat命令来查看当前系统的负载. vmstat 工具提供了一种低开销的系统性能观察方

Android内存性能优化(内部资料总结) eoe转载

刚入门的童鞋肯能都会有一个疑问,Java不是有虚拟机了么,内存会自动化管理,我们就不必要手动的释放资源了,反正系统会给我们完成.其实Java中没有指针的概念,但是指针的使用方式依然存在,一味的依赖系统的gc,很容易就造成了内存的浪费. Java基于垃圾回收的内存机制 Java的内存管理机制会自动回收无用对象所占用的内存,减轻手工管理内存的负担 1.C/C++: 从申请.使用.释放都需要手工管理 2.Java:无用的对象的内存会被自动回收 什么样的对象是无用的对象 1.Java通过引用来操作一个具