%mem 内存使用率
virt 是虚拟内存
res是常驻内存
shr是共享内存

Linux监控工具介绍系列——smem

smem工具介绍

   
smem是Linux系统上的一款可以转移多样内存耗用报告的命令行工具。与存活工具不一样的是smem可以告诉实际应用的物理内存(PSS),那是一种更有意义的目标。可以衡量虚拟内存系统的库和应用程序所占有的内存数量。

鉴于半数以上的物理内存日常在八个应用程序之间共享,名为实际行使物理内存(RSS)的这些正式的内存耗用衡量目标会大大高估内存耗用状态。PSS那么些参数而是衡量了各种应用程序在各样共享内存区中的“公平分配”,给出了一个切合实际的权衡目标。

smem有诸多意义特色:

系统概况列表
按进程、映射和用户列表
按用户、映射或用户过滤
来自多个数据源的可配置列
可配置的输出单位和百分比
可配置的标题和总和
从/proc读取活动数据
从目录镜像或经过压缩的打包文件读取数据快照
面向嵌入式系统的轻型捕获工具
内置的图表生成功能

smem的种类需要

系统内核为2.6.27以上
Python版本必须为2.4或以上
依赖matplotlib库生成图表(可选的,自动检测)依赖matplotlib,是因为smem除了一般的文本信息报告外,smem 也可以生成条状或饼状图。

对应的英文原文如下:

smem is a
tool that can give numerous reports on memory usage on Linux systems.
Unlike existing tools, smem can report proportional set size (PSS),
which is a more meaningful representation of the amount of memory used
by libraries and applications in a virtual memory system.

Because large portions
of physical memory are typically shared among multiple applications, the
standard measure of memory usage known as resident set size (RSS) will
significantly overestimate memory usage. PSS instead measures each
application’s “fair share” of each shared area to give a realistic
measure.

smem has many
features:

system overview listing
listings by process, mapping, user
filtering by process, mapping, or user
configurable columns from multiple data sources
configurable output units and percentages
configurable headers and totals
reading live data from /proc
reading data snapshots from directory mirrors or compressed tarballs
lightweight capture tool for embedded systems
built-in chart generation

smem has
a few requirements:

a reasonably modern kernel (> 2.6.27 or so)
a reasonably recent version of Python (2.4 or so)
the matplotlib library for chart generation (optional, auto-detected)

Linux使用到了虚拟内存(virtual
memory),因而要准确的乘除一个进度实际行使的大体内存就不是那么简单。只掌握进度的虚拟内存大小也并不曾太大的用处,因为如故无法取获得实在分配的情理内存大小。

RSS(Resident set
size),使用top命令可以查询到,是最常用的内存目标,表示经过占用的大体内存大小。不过,将各进度的RSS值相加,寻常会当先整个连串的内存消耗,那是因为RSS中蕴涵了各进度间共享的内存。

PSS(Proportional set
size)所有应用某共享库的顺序均分该共享库占用的内存时,每个进度占用的内存。显明所有进度的PSS之和就是系统的内存使用量。它会更确切一些,它将共享内存的大大小小举行平均后,再分摊到各过程上去。

服务器排查工具,查看进程消耗内存意况统计。USS(Unique set size
)进度独自占用的内存,它是PSS中自己的一对,它只计算了经过独自占用的内存大小,不包含其余共享的部分。

      VSS – Virtual Set
Size 虚拟耗用内存(包涵共享库占用的内存)

      RSS – Resident
Set Size 实际行使物理内存(包含共享库占用的内存)

      PSS –
Proportional Set Size
实际接纳的情理内存(比例分红共享库占用的内存)

      USS – Unique Set
Size 进度独自占用的物理内存(不包括共享库占用的内存)

smem工具安装

 
首先去官方网址
下载对应的smem安装包,近日时髦的版本为smem-1.4.  下边设置是在RHEL
5.7上设置,不一致版本系统、以及差别安装格局都有一对差异。

   1: [[email protected] tmp]# tar -xzvf smem-1.4.tar.gz 

   2: smem-1.4/.hg_archival.txt

   3: smem-1.4/.hgtags

   4: smem-1.4/COPYING

   5: smem-1.4/smem

   6: smem-1.4/smem.8

   7: smem-1.4/smemcap.c

   8: [[email protected] tmp]# cd smem-1.4

   9: [[email protected] smem-1.4]# ls

  10: COPYING  smem  smem.8  smemcap.c

  11: [[email protected] smem-1.4]# cp /tmp/smem-1.4/smem  /usr/bin

  12: [[email protected] smem-1.4]# chmod +x /usr/bin/smem

smem工具使用

翻看smem命令的有关赞助音讯

   1: [[email protected] tmp]# smem -h

   2: usage: smem [options]

   3:  

   4: options:

   5:   -h, --help            show this help message and exit

   6:   -H, --no-header       disable header line

   7:   -c COLUMNS, --columns=COLUMNS

   8:                         columns to show

   9:   -t, --totals          show totals

  10:   -R REALMEM, --realmem=REALMEM

  11:                         amount of physical RAM

  12:   -K KERNEL, --kernel=KERNEL

  13:                         path to kernel image

  14:   -m, --mappings        show mappings

  15:   -u, --users           show users

  16:   -w, --system          show whole system

  17:   -P PROCESSFILTER, --processfilter=PROCESSFILTER

  18:                         process filter regex

  19:   -M MAPFILTER, --mapfilter=MAPFILTER

  20:                         map filter regex

  21:   -U USERFILTER, --userfilter=USERFILTER

  22:                         user filter regex

  23:   -n, --numeric         numeric output

  24:   -s SORT, --sort=SORT  field to sort on

  25:   -r, --reverse         reverse sort

  26:   -p, --percent         show percentage

  27:   -k, --abbreviate      show unit suffixes

  28:   --pie=PIE             show pie graph

  29:   --bar=BAR             show bar graph

  30:   -S SOURCE, --source=SOURCE

  31:                         /proc data source

1:无参数时浮现所有进度的内存使用景况

2:参数-u
显示每个用户所耗用的内存总量

smem -u

澳门金沙国际 1

3: 参数-p
查看耗用内存情状的比重。

smem -p

澳门金沙国际 2

4: 参数-w
查看系统内存使用状态

   1: [[email protected] ~]# smem -w

   2: Area                           Used      Cache   Noncache 

   3: firmware/hardware                 0          0          0 

   4: kernel image                      0          0          0 

   5: kernel dynamic memory      22021892   21721584     300308 

   6: userspace memory            1899296     122424    1776872 

   7: free memory                  686340     686340          0 

   8: [[email protected] ~]# smem -w -p

   9: Area                           Used      Cache   Noncache 

  10: firmware/hardware             0.00%      0.00%      0.00% 

  11: kernel image                  0.00%      0.00%      0.00% 

  12: kernel dynamic memory        89.49%     88.27%      1.22% 

  13: userspace memory              7.73%      0.50%      7.23% 

  14: free memory                   2.78%      2.78%      0.00% 

5: 参数-R
REALMEM,REALMEM这么些值是指物理内存数量。此参数可以让smem在整整种类(-w)的出口中窥见固件/硬件所耗用的内存数量(比较上下即可发现,注意firmware/hardware)

   1: [[email protected] ~]# smem -R 24G -w

   2: Area                           Used      Cache   Noncache 

   3: firmware/hardware            558296          0     558296 

   4: kernel image                      0          0          0 

   5: kernel dynamic memory      22024108   21722972     301136 

   6: userspace memory            1907676     122436    1785240 

   7: free memory                  675744     675744          0 

6:参数-c
用来体现必要出示的列。

   1: [[email protected] ~]# smem -c "name user pss"

   2: Name                     User          PSS 

   3: mingetty                 root           18 

   4: mingetty                 root           18 

   5: mingetty                 root           18 

   6: mingetty                 root           18 

   7: mingetty                 root           18 

   8: bash                     root          911 

   9: sftp-server              root          939 

  10: cupsd                    root         1208 

  11: rsyslogd                 root         1403 

  12: smbd                     tibco        1474 

  13: hald                     haldaemon     1477 

  14: pickup                   postfix      1487 

  15: vmtoolsd                 root         2309 

  16: sshd                     root         2521 

  17: python                   root         5464 

  18: beremote                 root         7585 

  19: java                     weblogic    18454 

  20: java                     weblogic    31431 

  21: java                     weblogic    69389 

  22: java                     tomcat     339977 

  23: java                     tomcat     355037 

  24: java                     tomcat     421133 

  25: java                     weblogic   640531 

7: 参数-s
依照某一列(例如 rss)来排序.

澳门金沙国际 3

8: 参数-r
一般与参数-s结合使用,表示反转排序(从升序改为降序)

澳门金沙国际 4

9:参数-M
过滤相关进度。Show processes filtered by mapping

   1: [[email protected] tmp]# smem -M mysql

   2:   PID User     Command                         Swap      USS      PSS      RSS 

   3:  4172 mysql    /usr/sbin/mysqld --basedir=        0     3924     3924     3924 

   4: [[email protected] tmp]# smem -M mysql -p

   5:   PID User     Command                         Swap      USS      PSS      RSS 

   6:  4172 mysql    /usr/sbin/mysqld --basedir=    0.00%    0.38%    0.38%    0.38% 

   7: [[email protected] tmp]# 

澳门金沙国际 5

10:参数-U
按用户过滤音讯

别的一些参数怎么样展现条状图或饼状图的成效,个人感觉那些参数的用处不大,首先服务器一般都未曾设置桌面系统,都是命令界面维护、管理。无法转移相关图片。其次服务器有桌面系统,也亟需安装相关看重包,非凡劳累。除非是为着转变报告须求。

    Read data from
capture tarball smem –source capture.tar.gz

    Show a bar chart
labeled by pid smem –bar pid -c “pss uss”

    Show a pie chart of
RSS labeled by name smem –pie name -s rss

正文永久更新链接地址:

smem工具介绍
smem是Linux系统上的一款可以变更三种内存耗用报告的命令行工具。与现有工具不雷同的是smem能够…

以下体系的超负荷施用会一贯促成高负载难题。

在Linux中,有过多下令或工具查看内存使用状态,今日大家来探望哪些查看进程消耗、占用的内存情状,Linux的内存管理和连锁概念要比Windows复杂一些。之前,咱们必要精通一下Linux系统下边关于内存的专用名词和专业术语概念:

top命令下按f键能够见到详细表明
* A: PID        = Process Id
* E: USER       = User Name
* H: PR         = Priority
* I: NI         = Nice value
* O: VIRT       = Virtual Image (kb)
* Q: RES        = Resident size (kb)
* T: SHR        = Shared Mem size (kb)
*澳门金沙国际, W: S          = Process Status
* K: %CPU       = CPU usage
* N: %MEM       = Memory usage (RES)
* M: TIME+      = CPU Time, hundredths
b: PPID       = Parent Process Pid
c: RUSER      = Real user name
d: UID        = User Id
f: GROUP      = Group Name
g: TTY        = Controlling Tty
j: P          = Last used cpu (SMP)
p: SWAP       = Swapped size (kb)
l: TIME       = CPU Time
r: CODE       = Code size (kb)
s: DATA       = Data+Stack size (kb)
u: nFLT       = Page Fault count
v: nDRT       = Dirty Pages count
y: WCHAN      = Sleeping in Function
z: Flags      = Task Flags <sched.h>
* X: COMMAND    = Command name/line

  • CPU
  • 内存(蕴含虚拟内存)
  • 磁盘IO

 

top命令下要翻开某个用户启动的进度:先输入u,然后输入用户名,再回车

sar工具——查看历史资源采纳状态

比方经过cron命令对sysstat举办周期性执行(/etc/cron.d/sysstat),服务器的周转景况数据就会被采集起来。借使cron没有运行,sysstat将无法收集历史总计结果。

要在sar中查看历史资源选拔状态,我们不可以不为文件提供与总计数据相符的门路。

举例来说,如若我们打算查看本月23号以来服务器的平分负载意况,可以运行以下命令:

$ sar -q -f /var/log/sa/sa23

一经大家打算查看当今日期的总计音信,则无需为其指令具体日子。

$ sar –q

 

VIRT:virtual memory usage。Virtual那几个词很神,一般解释是:virtual
adj.虚的, 实质的, [物]有效的,
事实上的。到底是虚的仍旧实的?让谷歌给Define之后,将就知道某些,就是那东西如故非物质的,可是有功用的,不发出在实际世界的,爆发在软
件世界的等等。那几个内存使用就是一个拔取占有的地址空间,只是要应用程序需求的,就全算在那边,而随便它确实用了从未。写程序怕出错,又无视占用的时
候,多开点内存也是很正规的。
RES:resident memory
usage。常驻内存。那一个值就是该应用程序真的接纳的内存,但还有三个小标题,一是稍稍东西可能位于沟通盘上了(SWAP),二是有点内存可能是共享的。
SHR:shared
memory。共享内存。就是说这一块内存空间有可能也被其余应用程序使用着;而Virt
- Shr如同就是那么些顺序所须求的还要没有共享的内存空间。
DATA:数据占用的内存。要是top没有显得,按f键可以显得出来。这一块是真正的该程序必要的数额空间,是真的在运作中要使用的。

Linux下的cron服务

以此体系服务是默许启动的。用来周期性的施行某种职分或等候处理某些事件的一个护理进度。crond进程每分钟会定期检查是还是不是有要执行的义务,要是有要实施的天职,则自动执行该任务。

Linux下的职务调度分为两类,系统职分调度和用户职责调度。

系统职务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,那一个就是系统职务调度的布置文件

澳门金沙国际 6

用户义务调度:用户定期要履行的行事,比如用户数据备份、定时邮件提醒等。用户能够使用
crontab 工具来定制自己的布署义务。所有用户定义的crontab
文件都被保留在 /var/spool/cron目录中。其文件名与用户名相同。

大体内存和虚拟内存

============================================

使用者权限文件

/etc/cron.deny 该文件中所列用户差距意利用crontab命令

/etc/cron.allow 该公文中所列用户同意使用crontab命令

/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名

 

top里面描述进度内存使用量的数据出自/proc/$pid/statm这一个文件。通过观望kernel的代码就能弄清楚SHR,VIRT和RES这一个数值的切实可行意思。

职务定义

用户所确立的crontab文件中,每一行都意味一项义务,每行的种种字段代表一项设置,它的格式共分为三个字段,前五段是光阴设定段,第六段是要执行的命令段,格式如下:

minute   hour   day   month   week   command

澳门金沙国际 7

物理内存:就是系统硬件提供的内存大小,是当真的内存,一般叫做内存条。也叫随机存取存储器(random
access memory,RAM)又称之为“随机存储器”,是与CPU直接沟通数据的其中存储器,也叫主存(内存)。

Linux通过一个称作 task_statm 的函数来回到经过的内存使用情况

top工具——实时呈现系统各进程的资源占用现象

看似于Windows的任务管理器。

该命令能够按CPU使用.内存使用和举办时间对职务进行排序;而且该命令的洋洋风味都足以经过交互式命令或者在个人定制文件中举办设定.

澳门金沙国际 8

 

int task_statm(struct mm_struct *mm, int *shared, int *text,
               int *data, int *resident)
{
        *shared = get_mm_counter(mm, file_rss);
        *text = (PAGE_ALIGN(mm->end_code) – (mm->start_code &
PAGE_MASK))
                                                           >>
PAGE_SHIFT;
        *data = mm->total_vm – mm->shared_vm;
        *resident = *shared + get_mm_counter(mm, anon_rss);
        return mm->total_vm;
}
地点的代码中shared就是page
cache里面其实运用了的物理内存的页数,text是代码所占用的页
数,data是总虚拟内存页数减去共享的虚构内存页数,resident是兼具在拔取的情理内存的页
数。最终回来的mm->total_vm是进程虚拟内存的寻址空间尺寸。

【统计新闻区】

虚拟内存:相对于物理内存,在Linux下还有一个虚拟内存的概念,虚拟内存就是为着满足物理内存的缺少而提议的方针,它是使用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被叫做沟通空间(Swap
Space)。Linux会在物理内存不足时,使用虚拟内存,内核会把暂时不要的内存块音信写到虚拟内存,这样大体内存就收获了释放,那块儿内存就可以用来此外目的,而急需用到那个内容的时候,这一个信息就会被再一次从虚拟内存读入物理内存。

函数get_mm_counter并不会做什么样划算,它的效益是有限支撑数值读取的原子性。

1. 职分队列新闻,同uptime命令执行结果。

此时此刻系统时间:17:24:11

系统连接运行时长:up 1 day, 6:30

签到系统的用户数:1 user

负载意况(1分钟,5分钟,15分钟):load average

注:load
average数据是每隔5分钟检查两遍活跃的进程数,然后按一定算法总括出的数值。固然那一个数除以逻辑CPU的多寡,结果超越5的时候就注解系统在过度运转了。

 

地点的数值最终会通过 procfs输出
到/proc/$pid/statm中去。他们与top突显的数值对应提到如下。

2. 任务Tasks

总进度数:total 122

运行态:running

休眠态:sleep

停止态:stoped

僵尸态:zombie

 

SHR: shared
RES: resident
VIRT: mm->total_vm
CODE: code
DATA: data

3. cpu状态音讯

us, 用户空间占据百分比

sy, 内核空间

ni, 改变过优先级的进度

id, 空闲CPU百分比

wa, IO等待占用CPU百分比

hi, 硬中断占用CPU百分比

si, 软中断占用CPU百分比

Linux的buffers与cached

=======================================

4. 内存状态

total, 物理内存总量

used, 使用中的内存

free, 空闲中

buffers, 缓存的内存量

运用中的内存总量(used)指的是现行系统基本控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数码。纳入基本管理的内存不见得都在应用中,还包蕴过去选拔过的今日可以被另行使用的内存,内核并不把那么些可被再度行使的内存交还到free中去,因而在linux上free内存会越来越少,但并非为此担心。

计算可用内存数,那里有个八九不离十的统计公式:第四行的free +
第四行的buffers + 第五行的cached

 

o: VIRT (Virtual Image) – 进程使用的总虚拟内存 (virtual memory)
大小,蕴涵进程的程序码、资料和共享程序库再加上被置换 (swap out)
的半空中。VIRT = SWAP + RES
p: SWAP (Swapped size) – 进度被换成的虚拟内存空间大小。
q: RES (Resident size) – 进度非被换成的实业内存大小。RES = CODE + DATA
r: CODE’ (Code size) – 进度的程序码在实体内存佔用空间大小,亦叫作 text
resident set (TRS)。
s: DATA (Data+Stack size) – 进程佔用实体内存中的非程序码部份大小,亦叫作
data resident set (DRS)。
t: SHR (Shared Mem size) –
进度使用的共享内存大小,即能够和其余进度共享的内存空间。
n: %MEM (Memory usage) –
进程佔用实体内存大小对系统总实体内存大小的比重,以百分比显示。

5. swap调换分区音讯

对于内存监控,在top里我们要时时监控第五行swap交流分区的used,倘诺那一个数值在时时刻刻的成形,表达基础在频频拓展内存和swap的数据交流,那是当真的内存不够用了。

在Linux中时时发现没事的内存很少,如同有所的内存都被消耗殆尽了,表面上看是内存不够用了,很多新手看到内存被“消耗殆尽”格外紧张,其实这一个是因为Linux系统将空闲的内存用来做磁盘文件数量的缓存。这些导致您的连串看起来处于内存极度热切的情景。不过实际不是这么。这一个不同于Windows的内存管理。Linux会利用空闲的内存来做cached
& buffers。

【各进度的景况监控】

PID — 进程id

USER — 进程所有者

PR — 进度优先级

NI — nice值。负值表示高优先级,正值表示低优先级

VIRT — 进度使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES — 进度使用的、未被换出的情理内存大小,单位kb。RES=CODE+DATA

SHR — 共享内存大小,单位kb

S — 进度情形。D=不可中断的睡眠情形 R=运行 S=睡眠 T=跟踪/为止Z=僵尸进度

%CPU — 上次翻新到今日的CPU时间占据百分比

%MEM — 进度使用的情理内存百分比

TIME+ — 进程使用的CPU时间总共,单位1/100秒

COMMAND — 进度名称(命令名/命令行)

澳门金沙国际 9

其他命令

top –c  展现完整命令

top -p 574  展现指定的进程信息

 

Linux中的swap与memory内存

memory就是机械的大体内存,读写速度低于cpu一个量级,但远超出磁盘。内存造价高于磁盘,并且断电丢失数据,不可以把持有数据和次序都保存在内存中。

当内存不足时,把不平日运行的次第暂时停放交流区中,即swap,当需求该进程时,再重新加载回内存。

 

swap

微机对内存分为大体内存与虚拟内存,虚拟内存则是杜撰出来的、使用磁盘代替内存。虚拟内存的产出,让机器内存不够的图景赢得一些缓解。当程序运行起来由操作系统夯实际虚拟内存到大体内存的更迭和加载(相应的页与段的虚拟内存管理)。那里的杜撰内存即所谓的swap。

 
当用户提交程序,然后暴发进程,在机械上运行。机器会判断当前大体内存是不是还有空闲允许进程调入内存运行,如若有那么则一向调入内存举办运作;纵然没有,那么会依据优先级选用一个经过挂起,把该进程沟通来swap中等待,然后把新的长河调入到内存中运行。依据那种换入和换出,完成了内存的轮回利用,让用户感到不到内存的限定。从那也可以观察swap扮演了一个十分关键的角色,就是暂存被换出的历程

内存与swap之间是根据内存页为单位来调换数据的,一般Linux中页的尺寸设置为4kb。而内存与磁盘则是比照来互换数据的。

当物理内存使用完或者达到自然比重之后,我们得以应用swap做临时的内存使用。当物理内存和swap都被运用完那么就会出错,out
of
memory。对于利用多大比重内存之后起初使用swap,在系统的布局文件中得以透过调整参数举办修改。

buffers是指用来给块设备做的缓冲大小(块设备的读写缓冲区),它只记录文件系统的metadata以及
tracking in-flight pages.

free命令——突显内存及buffer使用状态

free
命令显示系统利用和空闲的内存情状,包括物理内存、交互区内存(swap)和水源缓冲区内存。共享内存将被忽视

-b  以Byte为单位出示内存使用处境。 

-k  以KB为单位出示内存使用情状。 

-m  以MB为单位突显内存使用情形。

-g   以GB为单位出示内存使用情形。 

-o  不出示缓冲区调节列。 

-s<间隔秒数>  持续观看内存使用意况。 

-t  展现内存总和列。 

-V  彰显版本音讯。

澳门金沙国际 10

第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的分别。
那四个的分别在于运用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached
都是属于被利用,所以他的可用内存是330MB, 已用内存是3631MB,
其中包蕴,内核(OS)使用+Application(X,
oracle,etc)使用的+buffers+cached.

其三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached
是相当可用的,因为buffer/cached是为着升高文书读取的品质,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

当可用内存少于额定值的时候,就会开会进行沟通.

如何看额定值:命令:cat /proc/meminfo

 

【buffers和cached的区别】

磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),那三种Cache就是分别缓存逻辑和物理级数据的。

Page
cache实际上是针对性文件系统的,是文件的缓存,在文书层面上的多寡会缓存到page
cache。文件的逻辑层须求映射到实际的大体磁盘,那种映射关系由文件系统来形成。当page
cache的数目必要刷新时,page cache中的数据交到buffer cache,因为Buffer
Cache就是缓存磁盘块的。不过那种拍卖在2.6版本的木本之后就变的很简单了,没有真正意义上的cache操作。

Buffer
cache是对准磁盘块的缓存,也就是在尚未文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer
cache中,例如,文件系统的元数据都会缓存到buffer cache中。

简言之说来,page cache用来缓存文件数量,buffer
cache用来缓存磁盘数据。在有文件系统的图景下,对文件操作,那么数量会缓存到page
cache,假若直接运用dd等工具对磁盘举办读写,那么数量会缓存到buffer
cache。

故而大家看linux,只要永不swap的沟通空间,就不用操心自己的内存太少.若是平日swap用很多,可能你就要考虑加物理内存了.那也是linux看内存是还是不是够用的标准.

若是是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。

Buffers
are associated with a specific block device, and cover caching of
filesystem metadata as well as tracking in-flight pages. The cache only
contains parked file data. That is, the buffers remember what’s in
directories, what file permissions are, and keep track of what memory is
being written from or read to for a particular block device. The cache
only contains the contents of the files themselves.

【关于内存使用意况】

内存使用状态提示:服务器内存占用量较高的气象实际上非常健康。这是因为内存的读写速度及成效远超出服务器磁盘,由此操作系统倾向于将内存作为缓冲机制预先载入数据,从而增强数据读取速度。

无异于,内存使用比例也并不是什么样大难题(除非我们没有设置虚拟内存分区,但那也与内存本身非亲非故)。大家真的须求关爱的是虚拟内存使用比例,因为只有在服务器的情理内存被整个据为己有后、虚拟内存才会接任而上发挥作用。这一数字越低,就认证服务器的运行景况越好。假如虚拟内存使用率为0%,则表示大家的服务器可以统统接纳物理内存执行职责。

那么虚拟内存使用率达到多少才算过高?那取决大家温馨的觉得。一般的话,即使虚拟内存使用率一向不高、那么我们的服务器的周转状态如故相比较卓越的。要是大家发现虚拟内存使用率随时间不断进步(例如由1%到7%再到32%),那就代表服务器上的某些进程正在疯狂吞噬内存,大家须要立即进行调查以精晓具体情状(而不应当直接设置越来越多内存)。一旦服务器用尽了拥有物理内存与虚拟内存,那么整个系统的周转将变得极为缓慢,要求通过重启才能暂时苏醒正常。

iostat命令——当前磁盘IO使用处境

以下命令将以每秒一回的频率连续彰显十次磁盘使用率计算。请大家关注突显结果中的%util列:

$ iostat -x 1 10

澳门金沙国际 11

 

 

 

 

 

 

 

参考资料

 

  

cached是用作page
cache的内存,
文件系统的cache。你读写文件的时候,Linux内核为了增强读写质量与进度,会将文件在内存中展开缓存,那有的内存就是Cache
Memory(缓存内存)。就算你的程序运行截至后,Cache
Memory也不会自行释放。那就会导致您在Linux系统中先后往往读写文件后,你会发现可用物理内存会很少。其实那缓存内存(Cache
Memory)在您要求使用内存的时候会自动释放,所以您不要顾虑没有内存可用

 

Cached
is the size of the page cache. Buffers is the size of in-memory block
I/O buffers. Cached matters; Buffers is largely irrelevant.

 

Cached
is the size of the Linux page cache, minus the memory in the swap cache,
which is represented by SwapCached (thus the total page cache size is
Cached + SwapCached). Linux performs all file I/O through the page
cache. Writes are implemented as simply marking as dirty the
corresponding pages in the page cache; the flusher threads then
periodically write back to disk any dirty pages. Reads are implemented
by returning the data from the page cache; if the data is not yet in the
cache, it is first populated. On a modern Linux system, Cached can
easily be several gigabytes. It will shrink only in response to memory
pressure. The system will purge the page cache along with swapping data
out to disk to make available more memory as needed.

Buffers
are in-memory block I/O buffers. They are relatively short-lived. Prior
to Linux kernel version 2.4, Linux had separate page and buffer caches.
Since 2.4, the page and buffer cache are unified and Buffers is raw disk
blocks not represented in the page cache—i.e., not file data. The
Buffers metric is thus of minimal importance. On most systems, Buffers
is often only tens of megabytes.

 

 

Linux共享内存

 

共享内存是进度间通讯中最不难易行的措施之一。共享内存允许多少个或越多进度访问同一块内存,就不啻
malloc()
函数向不一致进度重返了指向同一个物理内存区域的指针。当一个历程改变了那块地点中的内容的时候,其余进度都会发觉到那个。其实所谓共享内存,就是四个进度间协同地利用同样段物理内存空间,它是由此将一如既往段物理内存映射到分歧进度的虚构空间来兑现的。由于映射到分化进度的杜撰空间中,不一致进度可以直接运用,不必要像新闻队列那样举办复制,所以共享内存的频率很高。共享内存可以经过mmap()映射普通文书编制来兑现,也可以System
V共享内存机制来兑现,System
V是因此炫耀特殊文件系统shm中的文件贯彻进程间的共享内存通讯,也就是说每个共享内存区域对应非凡文件系统shm中的一个文书。

 

 

其余,大家还非得领悟RSS、PSS、USS等相关概念:

 

     VSS

Virtual Set Size 虚拟耗用内存(包蕴共享库占用的内存)

     

RSS –
Resident Set Size 实际运用物理内存(包蕴共享库占用的内存)

     

PSS –
Proportional Set Size
实际利用的情理内存(比例分配共享库占用的内存)

     

USS –
Unique Set Size 进度独自占用的物理内存(不分包共享库占用的内存)

 

RSS(Resident
set
size),使用top命令可以查询到,是最常用的内存目的,表示经过占用的大体内存大小。不过,将各进程的RSS值相加,平常会高于整个系统的内存消耗,那是因为RSS中隐含了各进度间共享的内存。

 

PSS(Proportional
set
size)所有应用某共享库的次序均分该共享库占用的内存时,每个进度占用的内存。分明所有进度的PSS之和就是系统的内存使用量。它会更精确一些,它将共享内存的分寸举行平均后,再分摊到各进度上去。

 

USS(Unique
set size
)进度独自占用的内存,它是PSS中温馨的一些,它只总计了经过独自占用的内存大小,不包罗其余共享的有些。

     

          

故而下边介绍的指令,有些查看进程的虚拟内存使用,有些是翻开进度的RSS或实际物理内存。在描述的时候,大家会标注那么些音讯。

 

 

 

top命令查看

 

履行top命令后,执行SHIFT
+F ,可以采纳按某列排序,例如选取n后,就会按字段%MEM排序

 

澳门金沙国际 12

 

 

当然也足以运用shift+m
或大写键M
让top命令按字段%MEM来排序,当然你也得以按VIRT(虚拟内存)、SWAP(过程使用的SWAP空间)、RES(实际行使物理内存,当然那里由于涉及共享内存缘故,你看到的实在内存相当大)

 

 

%MEM
— Memory usage (RES)

 

     A task’s currently
used share of available physical memory

     

VIRT
— virtual memory 

   

    The  total  amount  of virtual memory
used by the task. 
It includes all code, data and shared libraries plus pages that
have been swapped out. (Note: you can define the STATSIZE=1 environment
variable and the VIRT will be calculated from the /proc/#/state VmSize
field.)

 

    VIRT = SWAP +
RES

 

SWAP  —  Swapped size
(kb)

 

   The swapped out
portion of a task’s
total virtual memory image.

 

RES  —  Resident size
(kb)

       

    RES = CODE +
DATA.

 

         

 

是或不是有人会认为奇怪,为何%MEM这一列的值加起来会高于100吧?
这些是因为此处计算的时候蕴涵了共享内存的原故,别的由于共享内存的原故,你看到进度使用VIRT或RES都丰硕高。由于多数的大体内存平时在三个应用程序之间共享,名为实际运用物理内存(RSS,对应top命令里面的RES)的这一个专业的内存耗用衡量目的会大大高估内存耗用状态。

 

澳门金沙国际 13

 

 

 

ps命令查看

 

 

 

使用ps命令找出占用内存资源最多的20个经过(数量可以随意设置)

 

 

# ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -20

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

oracle   32147 11.0 51.2 13252080 12666320 ?   Rs   Aug24 163:16 ora_s000_SCM2

oracle   32149 14.2 50.9 13250344 12594264 ?   Ss   Aug24 210:41 ora_s001_SCM2

oracle   32153  4.2 49.6 13250820 12279432 ?   Ss   Aug24  62:27 ora_s003_SCM2

oracle   32155  2.5 48.6 13250268 12040732 ?   Ss   Aug24  38:21 ora_s004_SCM2

oracle   32157  1.2 44.5 13250296 11011708 ?   Ss   Aug24  18:31 ora_s005_SCM2

oracle   32151  2.7 39.7 13350436 9829944 ?    Ss   Aug24  41:18 ora_s002_SCM2

oracle   32159  0.5 38.9 13250704 9625764 ?    Ss   Aug24   8:18 ora_s006_SCM2

oracle   32161  0.2 26.3 13250668 6507244 ?    Ss   Aug24   3:38 ora_s007_SCM2

oracle   32129  0.0 25.5 13299084 6324644 ?    Ss   Aug24   1:25 ora_dbw0_SCM2

oracle   32181  0.0 15.8 13250152 3913260 ?    Ss   Aug24   0:56 ora_s017_SCM2

oracle   32145  2.7 15.3 13255256 3786456 ?    Ss   Aug24  40:11 ora_d000_SCM2

oracle   32127  0.0 15.2 13248996 3762860 ?    Ss   Aug24   0:05 ora_mman_SCM2

oracle   32163  0.0 14.2 13250108 3525160 ?    Ss   Aug24   1:04 ora_s008_SCM2

oracle   32165  0.0  8.1 13250172 2007704 ?    Ss   Aug24   0:37 ora_s009_SCM2

oracle   32169  0.0  6.6 13250060 1656864 ?    Ss   Aug24   0:08 ora_s011_SCM2

oracle   32177  0.0  6.0 13250148 1498760 ?    Ss   Aug24   0:12 ora_s015_SCM2

oracle   32187  0.0  5.1 13250084 1267384 ?    Ss   Aug24   0:06 ora_s020_SCM2

oracle   32179  0.0  5.1 13250584 1280156 ?    Ss   Aug24   0:05 ora_s016_SCM2

oracle   32167  0.0  5.0 13250060 1248668 ?    Ss   Aug24   0:08 ora_s010_SCM2

oracle   32175  0.0  3.4 13250596 857380 ?     Ss   Aug24   0:03 ora_s014_SCM2

 

 

#ps
-eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less

 

翻看进程占用的实际物理内存(与smem看到实际物理内存大小有出入,这里解释一下:SIZE:
进程使用的地址空间, 即便进度映射了100M的内存,
进程的地方空间将告诉为100M内存. 事实上,
这几个尺寸不是一个顺序实际应用的内存数.
所以那里看到的内存跟smem看到的大大小小有出入)

 

ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |cut -d "" -f2 | cut -d "-" -f1

 

澳门金沙国际 14

 

 

ps
aux  | awk
‘{print $6/1024 ” MB\t\t” $11}’  | sort -n

 

 

 

 

smem命令查看

 

 

至于smem命令,那里不做牵线,直接参考链接Linux监控工具介绍序列——smem

 

 

#smem
-rs pss

 

澳门金沙国际 15

** 

** 

** 

** 

pmap命令查看

 

 

#
ps -ef | grep tomcat

#
pmap 32341

 

澳门金沙国际 16

 

# pmap -x  32341

 

The
-x option can be used to provide information about the memory allocation
and mapping types per mapping. The amount of resident, non-shared
anonymous, and locked memory is shown for each mapping。

 

澳门金沙国际 17

 

 

 

 

python脚本查看

 

 

网上有个python脚本统计程序或进度的内存使用状态,地址位于

 

python
ps_mem.py

 

澳门金沙国际 18

 

 

[root@mylnx03 ~]# python ps_mem.py -h

Usage: ps_mem [OPTION]...

Show program core memory usage

 

  -h, -help                   Show this help

  -p <pid>[,pid2,...pidN]     Only show memory usage PIDs in the specified list

  -s, --split-args            Show and separate by, all command line arguments

  -t, --total                 Show only the total value

  -d, --discriminate-by-pid   Show by process rather than by program

  -S, --swap                  Show swap information

  -w <N>                      Measure and show process memory every N seconds

[root@mylnx03 ~]# python ps_mem.py  -p 32341

 Private  +   Shared  =  RAM used       Program

 

411.2 MiB + 184.0 KiB = 411.4 MiB       java

---------------------------------

                        411.4 MiB

=================================

 

参考资料:

 

 

相关文章