Linux系统基础性能运维

1. 任务查看器top命令 - 系统负载,进程占用CPU

使用top命令,查看当前系统的使用信息和负载,查看linux中各个进程的信息,可以看出每个进程cpu的使用情况,内存的占用情况等等一些有价值的信息。

1.1. 系统区域

  • 第一行综合负载信息

    • 21:23:08 是上一次统计时间,每个一段时间会自动更新一次,比如 3 秒钟。
    • up 28 min,表示系统自从上一次启动之后的运行时间,由于我是在虚拟机里进行测试,时间比较短,这里是28分钟。线上生产环境的机器往往都是以 days 为单位。比如 up 120 days
    • load average:系统最近1分钟,5分钟 和 15分钟的平均负载;三个负载信息分别表示:1分钟、5分钟、15分钟内系统的平均负荷。判断系统负荷是否过重,必须理解load average的真正含义。
      • 当CPU的系统负荷为0,意味CPU负载0
      • 系统负荷为0.5,意味着CPU占用50%
      • 系统负荷为1.7,意味着CPU已经满负荷工作100%,后面等着上70%工作任务。
    • 第一行综合信息通过 uptime 获取到。
  • 第二行是进程信息

    • total:表示已经启动的进程总数。
    • running:正在运行的进程数。
    • sleeping: 正在休眠的进程数。
    • stoped:停止运行的进程数。
    • zombile:僵尸进程总数(TODO 进一步解释)
  • 第三行是CPU信息

    • us:用户空间占用CPU百分比
    • sy:系统内核空间占用CPU百分比
    • ni:用户进程空间内改变过优先级的进程占用CPU百分比
    • id:空闲CPU百分比。
    • wa:等待输入输出的CPU时间百分比
    • hi:硬中断的时间百分比
    • si:软中断的时间百分比
    • st:运行虚拟机所消耗的真实CPU时间百分比,如果没有虚拟机运行该值为0.
  • 第四行是内存信息,以字节为单位,total = free used buff/cache

    • total,可用物理内存的总的空间大小。
    • free,可用物理内存的剩余空间大小。
    • used,已经使用的物理内存的空间大小。
    • buff/cache,表示 buff 和 cache 之和,他们都是系统所使用的内存,buff 是内核使用的内存空间大小,用于速度不对等时数据传输的缓冲区,cache 是 Page Cache 和 Slab 使用的内存,用户缓存数据结果。在其他程序需要内存时,这部分空间会被释放。
      Avail Mem ,在不进行交换的情况下, 有空多少空闲内存可使用使用的估算值, 3.14内核以上才有。
  • 第五行是内存交换空间信息

    • total,交换内存空间大小,一般大于物理内存空间。
    • free,空闲的交换空间大小。
    • used,已经使用的交换空间大小。

1.2. 进程信息区域

第二个区域为进程信息,另外也可以通过 top -H pid 查看一个进程中的线程信息。

  • PID:进程ID。
  • USER:启动进程锁使用的用户名。
  • PR:进程的优先级,由系统内核动态调整,值越低,优先级越高,越容易获得CPU资源。
  • NI:进程的 NICE 值,对于普通进程,RP值是在NI基础之上加 20,该值可以由用户调节,比如使用命令 renice -10 -p 。
  • VIRT:进程所占用的虚拟内存大小,以 KB为单位。
  • RES:进程所用的,未被换出物理内存的大小,以KB为单位。
  • SHR:进程所占用的共享内存的大小,以KB为单位。
  • S: 表示进程的运行状态,S 代表睡眠状态,其余的值还有 D:不可中断的随眠状态,R:运行中,T:跟踪/停止,Z:僵尸状态。
  • %CPU:进程当前占用的CPU资源比例。
  • %MEM:进程当前占用内存资源比例。
  • TIME :进程总计使用的CPU时间。
  • COMMAND:启动进程的程序或命令。

1.3. top交互态命令

  • h 用于帮助信息
  • 0 将0参数的隐藏;
  • 1,2,3 用于显示cpu视图或num节点状态;
  • ltm: 切换负载、任务、内存信息的显示
  • c: 触发命令详细执行
  • ds: 设置显示的刷新间隔
    当按下ds时,你将被提示输入一个值(以秒为单位),它会以设置的值作为刷新间隔。如果你这里输入了1,top将会每秒刷新。

1.4. top常用命令

2. ps命令

  • 这里给出定期查看系统进程脚本

3. cat /proc/pid/status


linux查看某个进程内存占用情况以及/proc/pid/status解释

pid 是你关心的进程pid,例如nginx进程 。其中的
VmRss --> Rss
VmSize --> VSZ

三种方法可以互相对照, 结果是一样的。

  • /proc/pid/status解释

4. Sysstat

pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

sysstat 工具包中除了pidstat,还包含iostat、mpstat、sa 等工具。

  • 在Debian/Ubuntu系统中可以使用下面的命令来安装

  • CentOS/Fedora/RHEL版本的linux中则使用下面的命令:

4.1. 使用pidstat查看总体统计

pidstat 是sysstat软件套件的一部分,sysstat包含很多监控linux系统状态的工具,它能够从大多数linux发行版的软件源中获得。

使用pidstat不加任何参数等价于加上-p参数,但是只有正在活动的任务会被显示出来。

  • PID 被监控的任务的进程号
  • %usr 当在用户层执行(应用程序)时这个任务的cpu使用率,和 nice 优先级无关。注意这个字段计算的cpu时间不包括在虚拟处理器中花去的时间。
  • %system 这个任务在系统层使用时的cpu使用率。
  • %guest 任务花费在虚拟机上的cpu使用率(运行在虚拟处理器)。
  • %CPU 任务总的cpu使用率。在SMP环境(多处理器)中,如果在命令行中输入-I参数的话,cpu使用率会除以你的cpu数量。
  • CPU 正在运行这个任务的处理器编号。
  • Command 这个任务的命令名称。

4.2. I/O 统计数据

通过使用-d参数来得到I/O的统计数据。比如:

IO 输出会显示一些内的条目:

  • kB_rd/s 任务从硬盘上的读取速度(kb)
  • kB_wr/s 任务向硬盘中的写入速度(kb)
  • kB_ccwr/s 任务写入磁盘被取消的速率(kb)

4.3. 内存使用和页面失败

使用-r标记你能够得到内存使用情况的数据。

  • 重要的条目:

    • minflt/s 从内存中加载数据时每秒出现的小的错误的数目,这些不要求从磁盘载入内存页面。
    • majflt/s 从内存中加载数据时每秒出现的较大错误的数目,这些要求从磁盘载入内存页面。
    • VSZ 虚拟容量:整个进程的虚拟内存使用(kb)
    • RSS 长期内存使用:任务的不可交换物理内存的使用量(kb)

4.4. 举例

  1. 你可以通过使用下面的命令来监测内存使用

    这会给你5份关于page faults的统计数据结果,间隔2秒。这将会更容易的定位出现问题的进程。

  2. 显示所有mysql服务器的子进程

  3. 将所有的统计数据结合到一个便于阅读的单一报告中,U表示用户,r表示内存,d表示IO使用:

5. 查看磁盘、文件和文件夹大小

当磁盘大小超过标准时会有报警提示,使用df和du命令可能发现问题的所在。

df:可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。
du:可以查看文件及文件夹的大小。

  • df查看个挂入点的情况:

  • 磁盘的空间报警以后,想查找哪个目录哪个文件占了最多的空间,可以是用du命令:

6. 查看内存占用情况

7. 网络情况

7.1. iftop

iftop命令可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等,详细的将会在后面的使用参数中说明。

7.1.1. 安装iftop命令

7.1.2. iftop运行命令参考界面如下图:

  • 不进行DNS反解析:iftop -n -i eth0
  • =>代表发送数据
  • <=代表接收数据
  • TX:发送
  • RX:接受
  • TOTAL:全部的流量
  • cum:目前累积流量
  • peak:峰值流量
  • rates:平均值,2秒,10秒,40秒的平均流量
  • t 切换显示状态,接受、发送数据
  • p 显示端口

7.1.3. iftop常用命令参数

进入iftop画面后的一些操作命令(注意大小写)

7.2. nethogs

7.2.1. nethogs命令安装

nethogs工具可以帮助我们很方便的查看当前系统中的进程使用网络的情况,这有助于我们找到当前系统中的网络瓶颈。nethogs命令需要首先安装,我们首先来下载

nethogs工具,执行命令:wget https://github.com/raboof/nethogs/archive/vXX.XX.XX.tar.gz

因此,我们尽量不要使用该版本的nethogs。

在下载下nethogs工具后,我们首先安装nethogs工具的依赖包,执行命令:

yum install -y libpcap libpcap-devel

之后,我们将该压缩包解压,如下所示:

该源码包不需要进行预编译过程,执行编译和安装即可,我们执行命令:

make && make install

即可完成nethogs工具的安装。

7.2.2. nethogs命令使用

nethogs安装完成后,nethogs命令会出现在/usr/local/sbin/目录下,我们直接执行命令:

nethogs

即可查看当前使用网络的进程,该命令执行结果如下所示:

从上图中可以看出,我们可以借助nethogs工具,查看当前系统中所有使用网络的进程了,借此可以分析当前系统中的网络瓶颈。

8. 基础性能排障实例

  1. 先用top命令看linux系统总体的cpu使用情况
    如果有异常,用pidstat -p查看细粒度的各个进程的cpu使用情况;否则,转向下一步。

  2. pidstat -r命令查看linux系统总体的内存使用情况
    如果有异常,用pidstat -r -p 1290查看细粒度的各个进程的内存使用情况;否则,转向下一步。

  3. pidstat -d命令查看linux系统总体的IO使用情况
    如果有异常,用pidstat -r -p 1290查看细粒度的各个进程的IO使用情况;否则,转向下一步。

  4. iftop命令查看linux系统总体的网络使用情况
    如果有异常,用nethogs查看细粒度的各个进程的网络带宽使用情况。

赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注