Linux系统和性能监控(6)

原文Linux System and Performance Monitoring,作者Darren Hoch。

6.0 I/O监控相关

磁盘IO子系统是Linux系统中最慢的一部分。这主要是因为磁盘距离CPU较远以及磁盘工作的时候需要机械操作(磁盘转动及机械臂运动)。如果访问磁盘像访问内存一样只需要花费分钟和秒级别的时间,这就是7天和7分钟的差异。因此,Linux内核尽量减少磁盘读写量是及其必要的。下面几段描述了内核从磁盘读数据到内存和写回的几种方式。

6.1 读写数据——内存页

Linux内核是按页来读写磁盘的。一般Linux系统上默认的页大小是4KB,系统读写磁盘块的时候是以4KB为单位进行的。你可以通过time命令verbose模式的Page Size来查看你系统上的页大小。

image

6.2 大小缺页

正如大部分Unix系统一样,Linux使用的是虚拟地址,然后将虚拟地址映射到物理内存空间。映射的操作是用时建立的,即当一个进程启动时,内核只会将那些使用到的虚拟地址映射到实存中。当一个应用启动的时候,内核会依次查找CPU缓存和物理内存,如果都没有找到所需的数据,内核会触发一个大缺页(major page fault, MPF)中断。一个MPF中断会要求磁盘子系统从磁盘检索所需的页并将它们缓存到内存中。

一旦内存页(磁盘数据)被映射到了缓存中 …

more ...

Linux系统和性能监控(5)

原文Linux System and Performance Monitoring,作者Darren Hoch。

5.0 虚拟内存相关

虚拟内存使用磁盘作为内存的扩展,这样可用的“内存”就更多了。在内存不够时,内核会把最近没有使用的内存块写到磁盘上去。当这部分内存再次被访问时,会把这部分内容再从磁盘读取到物理内存中。这些操作对用户是完全透明的,Linux上的应用程序只是看到有大量的内存可用,但是不知道这些“内存”有部分是存储在磁盘上的。毫无疑问,读写磁盘比读写真正的内存要慢得多(顺序读写大概比内存慢1000倍),因此程序读写内存的时候,如果使用了大量的虚存,程序运行就慢了。磁盘作为虚存使用的那部分叫做交换空间/分区(swap space)。

5.1 虚存页

虚存是按页进行划分的,X86架构上的虚存页大小是4KB。内核进行虚存读写的时候,是按页进行的。内核在某些时候会将内存页写到交换空间和文件系统中。

5.2 内存同步(原文:kernel memory paging)

内存同步是一个常见的操作,不要和内存交换 …

more ...

Linux系统和性能监控(4)

原文Linux System and Performance Monitoring,作者Darren Hoch。

4.0 CPU性能监控

CPU性能表现如何一般从三个方面来衡量:运行队列、利用率和上下文切换。正如前文所提及的,性能表现的好坏和基线数据(或预期)是密不可分的。对大部分系统而言,一些基本的性能预期如下:

  • 运行队列——每个处理器运行队列中不应该超过1-3个线程。例如,一个双核的系统中,运行队列长度不应该超过6。(译注:即一个系统的load average值不应该大于核数的4倍。)
  • CPU利用率——假如CPU被充分利用了,那么必须达到以下的占比划分:
  • User Time占65%-70%
  • System Time占30%-35%
  • Idle占0%-5%
  • 上下文切换——上下文切换的次数和CPU利用率相关。假设CPU利用率达到了上述的占比划分,大量的上下文切换也是可以接受的。

Linux系统有很多工具可以用来统计这些指标。我们将首先来看vmstat和top。

4.1 vmstat工具的使用

vmstat带来的额外性能开销很小,因此,在一个高负载系统上一直运行该工具是可行的 …

more ...

Linux系统和性能监控(3)

原文Linux System and Performance Monitoring,作者Darren Hoch。

3.0 CPU简介

CPU的利用率很大程度取决于运行什么类型的任务。内核调度器服务于两种任务:线程(单或多)和中断。调度器赋予不同任务以不同的优先级,下面是各个任务的优先级排序:

  • 中断——设备通知内核完成了某个操作。比如网卡发送了一个网络包或者某个硬件驱动产生了一个IO请求。
  • 内核进程——所有的内核进程以此优先级运行。
  • 用户进程——即通常所说的用户态。所有的软件应用以用户态运行。在内核调度机制中,用户态优先级最低。

为了便于理解内核如何管理和调度这些任务,下面将介绍一些重点概念:上下文切换、运行队列及利用率。

3.1 上下文切换

大部分现代处理器只能同时运行一个单线程进程或者一个线程。N路超线程或N核处理器则可以同时运行N个线程。其实Linux内核把多核处理器中的每一个核看成一个独立的处理器,例如一个单处理器双核的系统在Linux内核看来就是一个双处理器的系统。

一个标准的Linux内核支持“同时”运行50-50000个线程,如果只有一个CPU,内核必须公平地调度这些线程。每一个线程会被分配一个CPU时间片,一旦线程用完了该时间片或者被更高优先级的任务(比如硬件中断)抢占,线程就会被放回运行队列中,而更高优先级的任务将占用CPU。这种线程之间的切换被称作为上下文切换 …

more ...

Linux系统和性能监控(2)

原文Linux System and Performance Monitoring,作者Darren Hoch。

2.0 安装监控工具

大部分Unix系统发布的时候会自带一系列的监控工具,这些监控工具自Unix诞生起就已经成为系统的一部分了。Linux把这些监控工具作为系统的一部分或者附件发行。基本上,所有的Linux发行版本都有包含这些工具的安装包。尽管类似的开源和第三方的监控工具也不少,这篇文章主要还是介绍这些内建工具的使用。

本文将介绍如何应用下列工具来监控系统性能:

Tool Description Base Repository
vmstat all purpose performance tool yes yes
mpstat provide statistics per CPU no yes
sar all purpose performance monitoring tool no yes
iostat provides disk statistics no yes …
more ...

Linux系统和性能监控(1)

原文Linux System and Performance Monitoring,作者Darren Hoch。

1.0 性能监控介绍

性能调优是一个寻找系统瓶颈并调节操作系统以消除这些瓶颈的过程。许多系统管理员认为性能调优就像按菜谱做菜一样:简单设置几个系统参数就可以解决一个问题。其实不是这样的,性能调优是在调节操作系统的各个子系统,以期在他们之间取得一种平衡,达到所需的最佳性能。这些子系统包括:CPU、内存、 IO、网络。

这些子系统之间高度依赖,其中任意一个子系统出现使用瓶颈都很可能导致其他子系统出现问题。比如:

  • 大量的内存读入请求会塞满内存队列
  • 大量的网络吞吐能够耗尽CPU资源
  • 为了保持内存队列空闲可能会耗尽CPU资源
  • 大量内存到磁盘写请求可能耗尽CPU和IO资源

为了调优一个系统,首先必须定位到瓶颈在哪里。有时候看起来是某个子系统出现了问题,但实际可能是另外一个子系统过载引起的。

1.1 判断应用的类型

为了理解从哪里开始调优性能,最重要的是先分析和理解一个系统的表现。应用一般被分为两类:

  • IO型:IO型应用会消耗大量的内存及其下的存储系统,这是因为IO型的应用会(在内存中)处理大量的数据。IO型的应用一般来说不会消耗太多的CPU和网络资源(除非存储系统是构建在网络之上的)。IO型的应用一般只使用CPU来产生一个IO请求然后就进入睡眠状态了。数据库通常被认为是一个的IO型应用。
  • CPU型:顾名思义 …
more ...