linux监控

概览

参考

命令用处
topCPU的使用率、内存使用率、交换内存使用大小、高速缓存使用大小、缓冲区使用大小,进程PID、所使用命令
vmstat虚拟内存、内核线程、磁盘、系统进程、I/O 块、中断、CPU 活动
lsof显示所有打开的文件和进程。打开的文件包括磁盘文件、网络套接字、管道、设备和进程
tcpdump网络包分析器,捕捉或者过滤网络上指定接口上接收或者传输的TCP/IP包。
netstat监控进出网络的包和网络接口统计。可以用来监控网络性能
htop与top相似,特性更丰富【比top多了看内核线程的情况】这个略过
iotop显示实时磁盘I/O和进程的统计功能。用于查找大量使用磁盘读写的进程
iostat收集显示系统存储设备输入和输出状态,常用作追踪存储设备的性能。
iptrafiptraf,网络的IP流量监控,包括TCP标记、ICMP详细信息、TCP/UDP流量分离、TCP连接包和字节数.[类似于tcpdump不过有界面]
monit基于 Web 程序的自动监控和管理系统进程、程序、文件、目录、权限、校验文件系统。它监控的服务包括 Apache、MYSQL、Mail、FTP、Nginx 等等。系统状态是可以从命令行或者自己的网络接口来查看。
nethogs监视每个进程的网络带宽:sent、received
iftopiftop监控的是网络的使用情况,两台主机之间当前宽带的使用情况
Suricata网络安全监控
Arpwatch监视 Linux 网络的以太网的网络流量的地址解析,随着网络时间戳的变化监视以太网流量和产生日志的 IP 和 MAC 地址对,检测arp攻击

cpu、内存、io工具

top

image-20210315145246483

1234567
1系统时间已运行时间:up在线人数:uses系统1min、5min、15min的负载
2总进程数:total正在运行进程数正在睡眠的进程数停止的进程数僵尸进程数
3用户进程占cpu率:us系统占用cpu率:sy用户空间改变过优先级的进程cpu占用率:nicpu空闲率:id等待IO的CPU占用率:wa硬中断cpu占用率:hi软中断cpu占用率:si
4内存总量 total内存空闲量内存使用量缓存的内存
5交换区总量交换区空闲交换区使用量
编号标识含义
1PID进程号
2USER进程创建者
3PR (Priority)实时优先级
4NI (Nice)nice值
5VIRT (Virtual)进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
6RES (Restain)进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
7SHR (Share)共享内存大小,单位kb
8S (State)进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
9%CPU进程占用cpu百分比
10%MEM进程占用内存百分比
11TIME+进程运行时间
12COMMAND进程名称

概念

  • 系统负载(load average)

    load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

  • buffer/cache过高:

    buffer指Linux内存的Buffer cache,cache指Linux内存中的Page cache。在当前的内核中,page cache顾名思义就是针对内存页的缓存,说白了就是,如果有内存是以page进行分配管理的,都可以使用page cache作为其缓存来管理使用。

    当然,不是所有的内存都是以页(page)进行管理的,也有很多是针对块(block)进行管理的,这部分内存使用如果要用到cache功能,则都集中到buffer cache中来使用。

    清缓存必须保证cache中的数据跟对应文件中的数据一致,才能对cache进行释放。**所以伴随着cache清除的行为的,一般都是系统IO飙高。**因为内核要对比cache中的数据和对应硬盘文件上的数据是否一致,如果不一致需要写回,之后才能回收。

    手动清空的命令:

    echo 1 > /proc/sys/vm/drop_caches
    

    当然,这个文件可以设置的值分别为1、2、3。它们所表示的含义为:

    echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
    echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
    echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的缓存对象。
    
  • swap

    内存不够的时候,linux可以将一些不常用的内存swap到硬盘的固定区上,这样能留出内存来。当需要的时候可以再将这些内存在swap进内存。这块空间就是swap分区。

    linux系统能用的全部存储空间 是 内存 + swap的大小,也被成为virtual memory

  • res与virt

    参考

    virt:

    1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;
    2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
    3、VIRT = SWAP + RES
    

    res:

    1、进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap out量;
    2、包含其他进程的共享;
    3、如果申请10MB的内存,实际使用1MB,它只增长1MB,与VIRT相反;
    4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。
    5、RES = CODE + DATA
    

    堆、栈分配的内存,如果没有使用是不会占用实存的,只会记录到虚存。
    如果程序占用res比较多,说明程序申请内存多,实际使用的空间也多。
    如果程序占用virt比较多,说明程序申请来很多空间,但是没有使用。

其他

P:以占据CPU百分比排序

M:以占据内存百分比排序

T:以累积占用CPU时间排序

k:终止指定的进程。按下k键-->再输入要杀死的进程的pid-->按enter键-->(选择信号类型,以数字标示,默认15为杀死)本步可省略按enter键(常用为-9)

vmstat

参考

image-20210315164802204

man vmstat

Procs
    r: The number of processes waiting for run time.
    b: The number of processes in uninterruptible sleep.
Memory
    swpd: the amount of virtual memory used.
    free: the amount of idle memory.
    buff: the amount of memory used as buffers.
    cache: the amount of memory used as cache.
    inact: the amount of inactive memory. (-a option)
    active: the amount of active memory. (-a option)
Swap
    si: Amount of memory swapped in from disk (/s).
    so: Amount of memory swapped to disk (/s).
IO
    bi: Blocks received from a block device (blocks/s).
    bo: Blocks sent to a block device (blocks/s).
System
    in: The number of interrupts per second, including the clock.
    cs: The number of context switches per second.
CPU
    These are percentages of total CPU time.
    us: Time spent running non-kernel code. (user time, including nice time)
    sy: Time spent running kernel code. (system time)
    id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
    wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
    st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

示例

  1. us: user load

    编解码工作

  2. sy: system load

    dd if=/dev/urandom of=500MBfile bs=1M count=500

    For this, /dev/urandom[2] will supply random numbers, which will be generated by the kernel. This will lead to an increased load on the CPU (sy – system time).

  3. so(swap out): RAM瓶颈

    内存占满后,再打开文件

  4. bi(block input):

    高速的IO读。一个大文件,读并写入/dev/null

    dd if=bigfile.iso of=/dev/null bs=1M
    
  5. bo(block output)

    高速的IO写,大文件写如硬盘

    dd if=/dev/zero of=500MBfile bs=1M count=500 oflag=dsync
    
  6. wa(wait)

    数据库迁移过程中,所有的文件从文件系统中读取,CPU必须等待IO

lsof

基础

lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。参考

列的含义:

  • FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等:

    (1)cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
    (2)txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
    (3)lnn:library references (AIX);
    (4)er:FD information error (see NAME column);
    (5)jld:jail directory (FreeBSD);
    (6)ltx:shared library text (code and data);
    (7)mxx :hex memory-mapped type number xx.
    (8)m86:DOS Merge mapped file;
    (9)mem:memory-mapped file;
    (10)mmap:memory-mapped device;
    (11)pd:parent directory;
    (12)rtd:root directory;
    (13)tr:kernel trace file (OpenBSD);
    (14)v86  VP/ix mapped file;
    (15)0:表示标准输入
    (16)1:表示标准输出
    (17)2:表示标准错误
    一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等
    (1)u:表示该文件被打开并处于读取/写入模式
    (2)r:表示该文件被打开并处于只读模式
    (3)w:表示该文件被打开并处于
    (4)空格:表示该文件的状态模式为unknow,且没有锁定
    (5)-:表示该文件的状态模式为unknow,且被锁定
    同时在文件状态模式后面,还跟着相关的锁
    (1)N:for a Solaris NFS lock of unknown type;
    (2)r:for read lock on part of the file;
    (3)R:for a read lock on the entire file;
    (4)w:for a write lock on part of the file;(文件的部分写锁)
    (5)W:for a write lock on the entire file;(整个文件的写锁)
    (6)u:for a read and write lock of any length;
    (7)U:for a lock of unknown type;
    (8)x:for an SCO OpenServer Xenix lock on part      of the file;
    (9)X:for an SCO OpenServer Xenix lock on the      entire file;
    (10)space:if there is no lock.
    
  • TYPE:文件类型,如DIR、REG等,常见的文件类型:

    (1)DIR:表示目录
    (2)CHR:表示字符类型
    (3)BLK:块设备类型
    (4)UNIX: UNIX 域套接字
    (5)FIFO:先进先出 (FIFO) 队列
    (6)IPv4:网际协议 (IP) 套接字
    
  • DEVICE:指定磁盘的名称

  • SIZE:文件的大小

  • NODE:索引节点(文件在磁盘上的标识)

  • NAME:打开文件的确切名称

lsof命令参数

  • -a 列出打开文件存在的进程
  • -c<进程名> 列出指定进程所打开的文件
  • -g 列出GID号进程详情
  • -d<文件号> 列出占用该文件号的进程
  • +d<目录> 列出目录下被打开的文件
  • +D<目录> 递归列出目录下被打开的文件
  • -n<目录> 列出使用NFS的文件
  • -i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
  • -p<进程号> 列出指定进程号所打开的文件
  • -u 列出UID号进程详情
  • -h 显示帮助信息
  • -v 显示版本信息

示例

  • 查找某个文件相关的进程

    lsof /bin/bash

  • 列出某个用户打开的文件

    lsof -u username

  • 列出某个进程打开的文件

    lsof -c mysql

  • 通过进程号显示该进程打开的内容

    lsof -p 11969

  • 显示出所有网络链接

    lsof -i

  • 显示出所有tcp网络链接

    lsof -i tcp

  • 显示谁在使用某个端口

    lsof -i :3306

  • 显示链接在某主机上端口为:20、21相关的所有文件信息

    lsof -i @hostname:20,21 -r 3

iotop

iotop

IO列用户展示总的I/O使用率

iotop一般用于追踪进行高磁盘I/O读写的进程

iostat

image-20210316135835334

iostat是一个用于收集显示系统存储设备输入和输出状态统计的简单工具。这个工具常常用来追踪存储设备的性能问题,其中存储设备包括设备、本地磁盘,以及诸如使用NFS等的远端磁盘。

iotop是看哪个进程的io、iostat是看哪个磁盘的io。

tps: 每秒钟发送到的I/O请求数.

iostat uses files mentioned below to create the reports:

  • /proc/stat Contains the system statistics.
  • /proc/uptime Contains the system uptime.
  • /proc/diskstats Contains the disks statistics.
  • /sys Contains the statistics for block devices.
  • /proc/self/mountstats Contains the statistics for network filesystems.
  • /dev/disk Contains the persistent device names.

小结

cpu内存io
top总cpu+进程cpu总内存+进程内存
vmstat总cpu总内存总io
iotop总磁盘io+进程磁盘io
iostat总的cpu各磁盘的io
lsof 各进程打开文件的情况

选择:

top + iotop 基本可以看全 cpu、内存、io的总情况+各进程情况。

lsof比较特殊,可以看文件的打开情况,文件包括网络

网络

tcpdump

参考

用途

tcpdump在tcp协议第一卷中有过详细的描述,它用来捕获、分析网络数据,通常协助分析网络问题以及安全监控。它可以多对个协议进行抓包:ARP、ICMP、UDP、TCP等

tcp报文解析

具体参考tcp协议,这里只对flag进行简单说明:

valueFlag TypeDescription
SSYNConnection Start
FFINConnection Finish
PPUSHData Push
RRESETConnection reset
.ACKAcknowledgment

示例

  • 查看可用的网卡

    sudo tcpdump -D

  • 查看所用网卡的包,个数5个

    sudo tcpdump -i any -c 5

    -i = --interface,any指的是所有网卡,也可以指定某个网卡

    -c (count),指的是5个包

  • ip与端口的方式

    sudo tcpdump -i any -c5 -nn

  • 只抓某种协议的包

    sudo tcpdump -i any -c5 icmp

  • 指定某个ip与port的包

    host = src + dst

    sudo tcpdump -i any -c5 -nn host 54.204.39.132

    sudo tcpdump -i any -c5 -nn src 54.204.39.132

    sudo tcpdump -i any -c5 -nn dst 54.204.39.132

    sudo tcpdump -i any -c5 -nn port 80

    sudo tcpdump -i any -c5 -nn host 54.204.39.132 and port 80

  • 查看抓包的详细数据

    sudo tcpdump -i any -c10 -nn -A port 80

    -A是以ASCII码的形式查看,包中数据的内容,-X是按hex二进制的方式。

    这种比较适合抓http的包

    sudo tcpdump -i any -nn -A port 80

  • 将抓到的包写到文件中

    sudo tcpdump -i any -c10 -nn -w webserver.pcap port 80

netstat

用途

查看机器创建的连接,以及连接的状态

示例

  • 列出所有连接,包括listening与non listening

    netstat -a

  • 列出所有tcp连接、upd连接

    netstat -at

    netstat -au

  • 列出所有listening状态的连接

    netstat -l

  • 列出各种协议的统计数据:s

    netstat -s

  • 列出tcp协议、upd协议的统计数据

    netstat -st

    netstat -su

  • 显示使用网络的进程:p

    netstat -p

    netstat -tp | grep ssh

  • 不使用dns解析:n

    这个与tcpdump一样,就是直接显示ip

    netstat -an

  • 连续查看

    watch -n 1 netstat -ant

  • 查看路由表

    netstat -r

  • 网卡相关

    netstat -i

    netstat -ie = ifconfig

nethogs

用途

以上两个工具都是以连接为视角的,tcpdump是抓包,netstat是看状态与统计。nethogs是以进程为视角,监视每个进程的网络带宽:sent、received。

参数也比较简单,如下图:

image-20210316163240146

Program是哪个进程, DEV是哪个网关。

iftop

image-20210316171021081

iftop -i any -n

参数含义与tcpudump的类似,-i表示interface -n表示不要dns

用于监控连接的带宽

TX:发送流量

RX:接收流量

TOTAL:总流量

Cumm:运行iftop到目前时间的总流量

peak:流量峰值

rates:分别表示过去 2s 10s 40s 的平均流量,每条连接后边3个数字也是这个意思。

小结

工具功能
tcpdump网络抓包工具,可以分析哪个连接发送的内容
netstat当前各网络连接的状态
nethogs进程的网络带宽
iftop连接带宽

总结

指标

根据梳理的这些内容,大体可以明白这些

cpu指标:总占用率、us、sy、wa等指标

memory指标:total = free + userd + cache/buffer;virt、res

disk指标:硬盘的读写带宽

net指标:连接状态、带宽

ps: io = disk + char + net

​ memory中溢写到disk 是swap (so、si)

​ disk直接写到disk是(bo、bi)

分类

  • 进程视角

    若以某个进程为视角,top + iotop + nethogs

  • 指标视角

    只看memory: vmstat

    只看disk: iostat

    只看net:netstat

  • 专业工具

    文件:lsof

    抓包:tcpdump

# Linux 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×