linux性能分析

free

通过读取/proc/meminfo文件中信息,显示系统中空闲物理内存总量,已使用的内存总量,swap空间,内核使用的缓存和缓冲

使用

格式

free -[b|k|m]

显示


内存使用率(MEMUsedPerc)=100(MemTotal-MemFree-Buffers-Cached)/MemTotal*

内存相关

关于内存的几个常见问题:

  1. 空闲空间少
    其实linux中空闲的物理空间经常是很少的,和linux使用内存的思路有关
    linux会尽量提高内存使用率,经常会把磁盘上的内容缓存到内存,用来加速
    当内存不足时,linux就会释放缓存部分,让给真正需要的程序使用

  2. buffer 和 cache
    buffer 缓存的是磁盘文件的元数据,例如文件属性、目录结构等等
    cache 缓存的是真正的文件内容

  3. 关注要点
    MemTotal:总内存大小
    MemFree: 空闲内存大小
    Buffers和Cached:磁盘缓存的大小

  4. 如何判断内存真正不足
    内存不足主要有2个明显的表现
    (1)持续的内存换入换出
    (2)较多的主缺页中断
    主缺页中断的概念:

缺页中断包含主/次缺页中断
次缺页中断,是在内存中可以找到目标页
主缺页中断,是在内存中找不到,需要到磁盘中找
所以较多的主缺页中断意味着较多的访问磁盘

vmstat

vmstat显示进程,内存,分页,块IO,中断,CPU活动的信息

虚拟内存知识

在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。
分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。
当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。

使用

参数

    vmstat 1 2    1s刷新一次,循环两次
    vmstat 2    输出两次
    -d  磁盘模式,显示磁盘
    -p dev    指定分区显示 -p后跟设备名称          

使用样例

  1. vmstat
    输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1108572   2356 1506880    0    0    92    13  148  654  3  1 95  1  0
字段说明:
Procs(进程):
    r: 运行队列中进程数量
    b: 等待IO的进程数量
Memory(内存):
    swpd: 使用虚拟内存大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
    free: 可用内存大小
    buff: 用作缓冲的内存大小
    cache: 用作缓存的内存大小
Swap:
    si: 每秒从磁盘写到虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
    so: 每秒写入磁盘的虚拟内存大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
IO:
    bi: 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte。
    bo: 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
系统:
    in: 每秒中断数,包括时钟中断。
    cs: 每秒上下文切换数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
CPU(以百分比表示):
    us: 用户进程执行时间,us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序。
    sy: 系统进程执行时间,sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
    id: 空闲时间(包括IO等待时间)
    wa: 等待IO时间,wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。

需要关注指标:

  • r 运行的进程比较多,系统繁忙
  • bo 磁盘写的数据量大
  • us 持续大于50,服务器高峰可以接受
  • wa IO等待,持续大于30,说明IO等待严重
  • id 持续小于50,服务器高峰可以接受
  1. vmstat -d
    输出:
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda    39921   4296 2489785  868514  21660   1994  523688 2201496      0    383
sr0        0      0       0       0      0      0       0       0      0      0
dm-0   28600      0 2030513  696826   4843      0  110008 2207246      0    244
dm-1     271      0    2168    2171      0      0       0       0      0      1
loop0      0      0       0       0      0      0       0       0      0      0
loop1      0      0       0       0      0      0       0       0      0      0
loop2      0      0       0       0      0      0       0       0      0      0
dm-2   10615      0  442345  203700  17397      0  409528  649147      0    167

字段说明:

 1. reads:
    total,读取总量
    metged,合并后分组的读
    sectors,成功读取的扇区
    ms,读取所花费的时间(ms)
 2. writes 写入
 3. IO
    cur 正在进行的IO
    sec IO花费的秒数
  1. vmstat -m(SLAB)
    输出:
Cache                             Num  Total   Size  Pages
nf_conntrack_ffff8800c0996300      0      0    312     26
nf_conntrack_ffff8800b6ae0000      0      0    312     26
fuse_inode                         21     21    768     21
nf_conntrack_ffff8800c0990000      0      0    312     26
nf_conntrack_ffffffff819a09c0      546    546    312     26
kvm_vcpu                           0      0  16064      2
  1. vmstat -s
    显示各种事件计数器和内存统计信息

常见问题分析

CPU问题现象:

  1. 如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU.
  2. 如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢.
  3. 如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺.

解决办法:

当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat/ps aux/ top /prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些SQL语句不合理等等都会造成这样的现象.

内存问题现象:

内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.

解决办法:

  1. 调节应用或者服务使得对内存和cache的使用更加有效.
  2. 增加系统的内存.
  3. 关于内存的使用情况还可以结ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.一般情况下,如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容