磁盘相关信息

1. 磁盘文件的检查

df — 主要是用于检查文件系统磁盘占用情况 du — 检查磁盘空间占用情况,统计目录或者文件大小 —max-depth=1 fdisk — 用来磁盘分区,检查分区情况 lsblk — 用来列出所有可用块设备,还能显示他们的依赖关系。

  1. # 1. 查看磁盘的使用情况
  2. df -h
  3. # 2. 统计目录或者文件大小
  4. du -h
  5. du bin -h
  6. # 3. 查看块设备
  7. lsblk
  8. lsblk -o +SERIAL # 带出磁盘序列,非磁盘的UUID (ll /dev/disk/by-uuid)
  9. # 4.fdisk 创建和维护分区表
  10. fdisk -l # 查看磁盘分区
  11. fdisk /dev/sda # 对磁盘进行分区
  1. # 磁盘格式化,并进行挂载
  2. mkfs.ext4 /dev/sdb # 格式化新的磁盘
  3. mkdir /data
  4. mount /dev/sdb /data
  5. # 自动挂载
  6. ll /dev/disk/by-uuid
  7. vim /etc/fstab
  8. UUID=e0c1ef52-61b6-4f40-95f7-5160cc100288 /data1 ext4 defaults 0 0

top

  1. #命令
  2. top
  3. # 参数:
  4. d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用 s 交互命令来改变之。
  5. p:通过指定监控进程 ID 来仅仅监控某个进程的状态。
  6. q:该选项将使 top 没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
  7. S:指定累计模式。
  8. s:使 top 命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
  9. i:使 top 不显示任何闲置或者僵死进程。
  10. c:显示整个命令行而不只是显示命令名。
  11. top -c -d 2 # 每隔2秒刷新下信息,并带出命令
  12. # 结果参数:
  13. PID:进程的ID
  14. USER:进程所有者
  15. PR:进程的优先级别,越小越优先被执行
  16. NI:进程Nice值,代表这个进程的优先值
  17. VIRT:进程占用的虚拟内存
  18. RES:进程占用的物理内存
  19. SHR:进程使用的共享内存
  20. S:进程的状态。D表示不可中断的睡眠态,S表示休眠,R表示正在运行,Z表示僵死状态
  21. %CPU:进程占用CPU的使用
  22. %MEM:进程使用的物理内存和总内存的百分
  23. TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值
  24. COMMAND:启动该进程的命令名称

sar & mpstat

  1. # sar(System ActivityReporter 系统活动情况报告);文件读写情况、系统调用、磁盘IO、CPU效率、内存、进程及IPC
  2. # 需要安装sysstat包
  3. 【主要参数】:
  4. -o: 将监控的的信息以二进制方式保存到文件中
  5. -f: 从指定的文件读取报告
  6. -u:报告每个CPU的状态
  7. -P:报告某个CPU的状态
  8. -b:显示I/O和传递速率的统计信息
  9. -R: 显示内存状态
  10. -w: 显示交换分区的状态
  11. -q: 查看平均负载
  12. -d: 磁盘使用统计信息
  13. # 1. 查看CPU的使用率
  14. sar -u 1 5 # 每隔1秒,共收集5次
  15. # 2. 查看指定内核的使用情况
  16. sar -P 0 -u 1 5 # 查看0号CPU的每秒情况,共收集5次
  17. # 3. 查看进程的情况
  18. sar -q 1 5 # 查看进程的情况,每秒一次,共五次
  1. # mpstat(Multiprocessor Statistics 实时监控工具);报告CPU的统计
  2. # mpstat 跟 star -u 功能类似
  3. mpstat -P ALL 1 5 # 统计CPU的情况,每秒1次,共5次
  4. sar -u 1 5 # 统计CPU的情况,每秒1次,共5次

vmstat

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

image.png

iostat

  1. # iostat 主要用于监控系统设备的io负载
  2. 【主要参数】:
  3. -c 显示CPU使用情况
  4. -d 显示磁盘使用情况
  5. -N 显示磁盘阵列(LVM) 信息
  6. -n 显示NFS 使用情况
  7. -k KB 为单位显示
  8. -m M 为单位显示
  9. -t 报告每秒向终端读取和写入的字符数和CPU的信息
  10. -V 显示版本信息
  11. -x 显示详细信息
  12. -p:[磁盘] 显示磁盘和分区的情况
  13. iostat -dmx
  14. # 使用间隔检索,每隔2秒显示一次,共5次
  15. iostat -d 2 5
  16. # 查看分区上的统计信息
  17. iostat -p sda 2 6
  18. # 显示指定硬盘信息
  19. iostat -d sda
  20. #查看TPS和吞吐量
  21. iostat -d -x -k 1 1

内存

  1. # 参数 -h :Gb单位; -m :Mb单位; 默认Kb单位
  2. free -h
  3. # 参数说明:
  4. total : 总计物理内存的大小
  5. used : 已使用内存的大小
  6. free : 空闲内存的大小
  7. shared : 多个进程共享的内存总大小
  8. buff/cache : 磁盘缓存大小(当内存不足时此部分内存会自动释放,内存足够时不会释放)
  9. available : 可用内存大小 从应用程序的角度来说:available = free + buff/cache
  10. ##如果cached过大接近total数就需要清除缓存了
  11. ##缓存清除命令:如图
  12. echo 1 > /proc/sys/vm/drop_caches --释放网页缓存
  13. echo 2 > /proc/sys/vm/drop_caches --释放目录项和索引
  14. echo 3 > /proc/sys/vm/drop_caches --释放网页缓存,目录项和索引
  1. # 查看进程
  2. PS -e -o "%C : %p : %z : %a"|sort -k5 -nr # 按内存从大到小排列
  3. ps -e -o "%C : %p : %z : %a"|sort -nr # 按CPU利用率从大到小排列

网络

  1. # netstat 监控TCP/IP网络的工具,可以显示路由表、网络接口设备的状态信息
  2. 【主要参数】:
  3. -a或--all:显示所有连线中的Socket
  4. -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
  5. -c或--continuous:持续列出网络状态;
  6. -C或--cache:显示路由器配置的快取信息;
  7. -e或--extend:显示网络其他相关信息;
  8. -F或--fib:显示FIB
  9. -g或--groups:显示多重广播功能群组组员名单;
  10. -h或--help:在线帮助;
  11. -i或--interfaces:显示网络界面信息表单;
  12. -l或--listening:显示监控中的服务器的Socket
  13. -M或--masquerade:显示伪装的网络连线;
  14. -n或--numeric:直接使用ip地址,而不通过域名服务器;
  15. -N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
  16. -o或--timers:显示计时器;
  17. -p或--programs:显示正在使用Socket的程序识别码和程序名称;
  18. -r或--route:显示Routing Table
  19. -s或--statistice:显示网络工作信息统计表;
  20. -t或--tcp:显示TCP传输协议的连线状况;
  21. -u或--udp:显示UDP传输协议的连线状况;
  22. -v或--verbose:显示指令执行过程;
  23. -V或--version:显示版本信息;
  24. -w或--raw:显示RAW传输协议的连线状况;
  25. -x或--unix:此参数的效果和指定"-A unix"参数相同;
  26. --ip或--inet:此参数的效果和指定"-A inet"参数相同。
  27. netstat -tunlp # 列出所有处理监听状态的Tcp、Udp端口,加上程序名
  28. netstat -tanlp # 列出所有处理监听状态的TCP端口,加上程序名

pmap

  1. # pmap用于报告进程的内存映射关系
  2. 【主要参数】:
  3. -x:显示扩展格式;
  4. -d:显示设备格式;
  5. -q:不显示头尾行;
  6. -V:显示指定版本。