zoukankan      html  css  js  c++  java
  • 系统分析常用命令

    分析系统资源用到的命令


    dstat  需要安装:yum -y install dstat
    dstat 3 10        报表输出的时间间隔为3秒钟,并且报表中输出10个结果
    dstat --help

    Dstat options:
      -c, --cpu              enable cpu stats
         -C 0,3,total           include cpu0, cpu3 and total
      -d, --disk             enable disk stats
         -D total,hda           include hda and total
      -g, --page             enable page stats
      -i, --int              enable interrupt stats
         -I 5,eth2              include int5 and interrupt used by eth2
      -l, --load             enable load stats
      -m, --mem              enable memory stats
      -n, --net              enable network stats
         -N eth1,total          include eth1 and total
      -p, --proc             enable process stats
      -r, --io               enable io stats (I/O requests completed)
      -s, --swap             enable swap stats
         -S swap1,total         include swap1 and total
      -t, --time             enable time/date output
      -T, --epoch            enable time counter (seconds since epoch)
      -y, --sys              enable system stats

      --aio                  enable aio stats
      --fs, --filesystem     enable fs stats
      --ipc                  enable ipc stats
      --lock                 enable lock stats
      --raw                  enable raw stats
      --socket               enable socket stats
      --tcp                  enable tcp stats
      --udp                  enable udp stats
      --unix                 enable unix stats
      --vm                   enable vm stats

      --plugin-name          enable plugins by plugin name (see manual)
      --list                 list all available plugins

      -a, --all              equals -cdngy (default)
      -f, --full             automatically expand -C, -D, -I, -N and -S lists
      -v, --vmstat           equals -pmgdsc -D total

      --bw, --blackonwhite   change colors for white background terminal
      --float                force float values on screen
      --integer              force integer values on screen
      --nocolor              disable colors (implies --noupdate)
      --noheaders            disable repetitive headers
      --noupdate             disable intermediate updates
      --output file          write CSV output to file
     
    uptime
    18:30:05 up 20 days,  7:33,  1 user,  load average: 0.00, 0.00, 0.00
    显示系统已经运行了多长时间,它依次显示下列信息:当前时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。

    vmstat
    展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况
    vmstat 1 1
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     0  0      0 2428204 293072 898592    0    0     0     2    3    5  0  0 99  1  0
    r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
    b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
    swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
    free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
    buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
    cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
    si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
    so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
    bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
    bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
    in 每秒CPU的中断次数,包括时间中断
    cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
    us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
    sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
    id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
    wt 等待IO CPU时间。

    iostat

    iostat用于输出CPU和磁盘I/O相关的统计信息.
    -c 仅显示CPU统计信息.与-d选项互斥.
    -d 仅显示磁盘统计信息.与-c选项互斥.
    -k 以K为单位显示每秒的磁盘请求数,默认单位块.
    -p device | ALL
      与-x选项互斥,用于显示块设备及系统分区的统计信息.也可以在-p后指定一个设备名,如:
      # iostat -p hda
      或显示所有设备
      # iostat -p ALL
     -t    在输出数据时,打印搜集数据的时间.
     -V    打印版本号和帮助信息.
     -x    输出扩展信息.

    Blk_read
    读入块的当总数.

    Blk_wrtn
    写入块的总数.

    kB_read/s
    每秒从驱动器读入的数据量,单位为K.

    kB_wrtn/s
    每秒向驱动器写入的数据量,单位为K.

    kB_read
    读入的数据总量,单位为K.

    kB_wrtn
    写入的数据总量,单位为K.

    rrqm/s
    将读入请求合并后,每秒发送到设备的读入请求数.

    wrqm/s
    将写入请求合并后,每秒发送到设备的写入请求数.

    r/s
    每秒发送到设备的读入请求数.

    w/s
    每秒发送到设备的写入请求数.

    rsec/s
    每秒从设备读入的扇区数.

    wsec/s
    每秒向设备写入的扇区数.

    rkB/s
    每秒从设备读入的数据量,单位为K.

    wkB/s
    每秒向设备写入的数据量,单位为K.

    avgrq-sz
    发送到设备的请求的平均大小,单位是扇区.

    avgqu-sz
    发送到设备的请求的平均队列长度.

    await
    I/O请求平均执行时间.包括发送请求和执行的时间.单位是毫秒.

    svctm
    发送到设备的I/O请求的平均执行时间.单位是毫秒.

    %util
    在I/O请求发送到设备期间,占用CPU时间的百分比.用于显示设备的带宽利用率.
    当这个值接近100%时,表示设备带宽已经占满.


    lscpu
    查看cpu信息

    lspci
    lspci 是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具。
    -v
    使得 lspci 以冗余模式显示所有设备的详细信息。
    -vv
    使得 lspci 以过冗余模式显示更详细的信息 (事实上是 PCI 设备能给出的所有东西)。这些数据的确切意义没有在此手册页中解释,如果你想知道更多,请参照 /usr/include/linux/pci.h 或者 PCI 规范。
    -n
    以数字形式显示 PCI 生产厂商和设备号,而不是在 PCI ID 数据库中查找它们。
    -x
    以十六进制显示 PCI 配置空间 (configuration space) 的前64个字节映像 (标准头部信息)。此参数对调试驱动和 lspci 本身很有用。
    -xxx
    以十六进制显示所有 PCI 配置空间的映像。此选项只有 root 可用,并且很多 PCI 设备在你试图读取配置空间的未定义部分时会崩溃 (此操作可能不违反PCI标准,但是它至少非常愚蠢)。
    -b
    以总线为中心进行查看。显示所有 IRQ 号和记忆体地址,就像 PCI 总线上的卡看到的一样,而不是核心看到的内容。
    -t
    以树形方式显示包含所有总线、桥、设备和它们的连接的图表。
    -s [[<bus>]:][<slot>][.[<func>]]
    仅显示指定总线、插槽上的设备或设备上的功能块信息。设备地址的任何部分都可以忽略,或以「*」代替 (意味著所有值)。所有数字都是十六进制。例如:「0:」指的是在0号总线上的所有设备;「0」指的是在任意总线上0号设备的所有功能块;「0.3」选择 了所有总线上0号设备的第三个功能块;「.4」则是只列出每一设备上的第四个功能块。
    -d [<vendor>]:[<device>]
    只显示指定生产厂商和设备 ID 的设备。 这两个 ID 都以十六进制表示,可以忽略或者以「*」代替 (意味著所有值)。
    -i <file>
    使用 <file> 作为 PCI ID 数据库而不是使用预设的 /usr/share/hwdata/pci.ids。
    -p <dir>
    使用 <dir> 作为包含 PCI 总线信息的目录而不是使用预设的目录 /proc/bus/pci。
    -m
    以机器可读的方式转储 PCI 设备数据 (支持两种模式:普通和冗余),便於稿本解析。
    -M
    使用总线映射模式,这种模式对总线进行全面地扫描以查明总线上的所有设备,包括配置错误的桥之后的设备。请注意,此操作只应在调试时使 用,并可能造成系统崩溃 (只在设备有错误的时候,但是不幸的是它们存在),此命令只有 root 可以使用。同时,在不直接接触硬体的 PCI 访问模式中使用 -M 参数没有意义,因为显示的结果 (排除 lspci 中的 bug 的影响) 与普通的列表模式相同。
    --version
    显示 lspci 的版本。这个选项应当单独使用。
    PCILIB 选项 PCILIB OPTIONS
    PCI 工具使用 PCILIB (一种可移植的库,提供平台独立的函数来访问 PCI 配置空间)来和PCI卡交互。下面的选项用来控制库参数,特别是所用访问模式的指定。预设情况下,PCILIB 使用第一种可用的访问模式,不会显示任何调试信息。每一个开关选项都列出了一组它所支持的硬件/软软件列表。
    -P <dir>
    使用 linux 2.1 风格的配置,直接访问目录 <dir> 而非 /proc/bus/pci 目录。(只能在linux 2.1或以上版本中使用)
    -H1
    通过 Intel 架构 1 来实现直接硬体访问。(只能用於 i386 及其相容机)
    -H2
    通过Intel 架构2来实现直接硬体访问。警告:此模式只能寻址任何总线上的前16个设备,并且在很多情况下相当不可靠。(只能用於 i386 及其相容机)
    -S
    使用 PCI 系统调用访问。(只能用於 Alpha 和 Ultra-Sparc 上的 Linux)
    -F <file>
    从所给的包含 lspci -x命令输出的档案中获取相关信息。这在分析使用者提交的错误报告时很有用,因为你可以用任何方式来显示硬体配置信息而无需为了获取更多信息打扰使用者。(可用於所有系统)
    -G
    增加库的调试等级。(可用於所有系统)

    lsof
    lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以,lsof的功能很强大。一般root用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,但是普通用户执行会显示“permission denied”。因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

    常用的参数列表:
    lsof  filename 显示打开指定文件的所有进程
    lsof -a 表示两个参数都必须满足时才显示结果
    lsof -c string   显示COMMAND列中包含指定字符的进程所有打开的文件
    lsof -u username  显示所属user进程打开的文件
    lsof -g gid 显示归属gid的进程情况
    lsof +d /DIR/ 显示目录下被进程打开的文件
    lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
    lsof -d FD 显示指定文件描述符的进程
    lsof -n 不将IP转换为hostname,缺省是不加上-n参数
    lsof -i 用以显示符合条件的进程情况
    lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
                46 --> IPv4 or IPv6
                protocol --> TCP or UDP
                hostname --> Internet host name
                hostaddr --> IPv4地址
                service --> /etc/service中的 service name (可以不只一个)
                port --> 端口号 (可以不只一个)           
    netstat
    命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

    常见参数

    -a (all)显示所有选项,默认不显示LISTEN相关
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字。
    -l 仅列出有在 Listen (监听) 的服務状态

    -p 显示建立相关链接的程序名
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计
    -c 每隔一个固定时间,执行该netstat命令。

    提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到




  • 相关阅读:
    暂时转换
    内置函数⼆
    day13内置函数⼀
    day12⽣成器和⽣成器表达式
    20181031作业
    20181030函数2
    20181029函数1
    20181026
    20181025
    20181024
  • 原文地址:https://www.cnblogs.com/zclzhao/p/5031777.html
Copyright © 2011-2022 走看看