磁盘相关信息
1. 磁盘文件的检查
df — 主要是用于检查文件系统磁盘占用情况 du — 检查磁盘空间占用情况,统计目录或者文件大小 —max-depth=1 fdisk — 用来磁盘分区,检查分区情况 lsblk — 用来列出所有可用块设备,还能显示他们的依赖关系。
# 1. 查看磁盘的使用情况df -h# 2. 统计目录或者文件大小du -hdu bin -h# 3. 查看块设备lsblklsblk -o +SERIAL # 带出磁盘序列,非磁盘的UUID (ll /dev/disk/by-uuid)# 4.fdisk 创建和维护分区表fdisk -l # 查看磁盘分区fdisk /dev/sda # 对磁盘进行分区
# 磁盘格式化,并进行挂载mkfs.ext4 /dev/sdb # 格式化新的磁盘mkdir /datamount /dev/sdb /data# 自动挂载ll /dev/disk/by-uuidvim /etc/fstabUUID=e0c1ef52-61b6-4f40-95f7-5160cc100288 /data1 ext4 defaults 0 0
top
#命令top# 参数:d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用 s 交互命令来改变之。p:通过指定监控进程 ID 来仅仅监控某个进程的状态。q:该选项将使 top 没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。S:指定累计模式。s:使 top 命令在安全模式中运行。这将去除交互命令所带来的潜在危险。i:使 top 不显示任何闲置或者僵死进程。c:显示整个命令行而不只是显示命令名。top -c -d 2 # 每隔2秒刷新下信息,并带出命令# 结果参数:PID:进程的IDUSER:进程所有者PR:进程的优先级别,越小越优先被执行NI:进程Nice值,代表这个进程的优先值VIRT:进程占用的虚拟内存RES:进程占用的物理内存SHR:进程使用的共享内存S:进程的状态。D表示不可中断的睡眠态,S表示休眠,R表示正在运行,Z表示僵死状态%CPU:进程占用CPU的使用%MEM:进程使用的物理内存和总内存的百分TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值COMMAND:启动该进程的命令名称
sar & mpstat
# sar(System ActivityReporter 系统活动情况报告);文件读写情况、系统调用、磁盘IO、CPU效率、内存、进程及IPC# 需要安装sysstat包【主要参数】:-o: 将监控的的信息以二进制方式保存到文件中-f: 从指定的文件读取报告-u:报告每个CPU的状态-P:报告某个CPU的状态-b:显示I/O和传递速率的统计信息-R: 显示内存状态-w: 显示交换分区的状态-q: 查看平均负载-d: 磁盘使用统计信息# 1. 查看CPU的使用率sar -u 1 5 # 每隔1秒,共收集5次# 2. 查看指定内核的使用情况sar -P 0 -u 1 5 # 查看0号CPU的每秒情况,共收集5次# 3. 查看进程的情况sar -q 1 5 # 查看进程的情况,每秒一次,共五次
# mpstat(Multiprocessor Statistics 实时监控工具);报告CPU的统计# mpstat 跟 star -u 功能类似mpstat -P ALL 1 5 # 统计CPU的情况,每秒1次,共5次sar -u 1 5 # 统计CPU的情况,每秒1次,共5次
vmstat
# vmstat可以展现指定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况## vmstatvmstat 1 3 # 每隔3秒执行一次采集## 结果参数r :表示运行队列(就是说多少个进程真的分配到 CPU),我测试的服务器目前 CPU 比较空闲,没什么程序在跑,当这个值超过了 CPU 数目,就会出现 CPU 瓶颈了。这个也和 top 的负载有关系,一般负载超过了 3 就比较高,超过了 5 就高,超过了 10 就不正常了,服务器的状态很危险。top 的负载类似每秒的运行队列。如果运行队列过大,表示你的 CPU 很繁忙,一般会造成 CPU 使用率很高。b:表示阻塞的进程,这个不多说,进程阻塞,大家懂的。swap:虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。free:空闲的物理内存的大小,我的机器内存总共 8G,剩余 3415M。buff:Linux/Unix 系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多Mcache:cache 直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)si:每秒从磁盘读入虚拟内存的大小,如果这个值大于 0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。so:每秒虚拟内存写入磁盘的大小,如果这个值大于 0,同上。bi:块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是 1024 byte,我本机上没什么 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(机器在做压力测试,性能表现不佳)。us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。sy:系统 CPU 时间,如果太高,表示系统调用时间长,例如是 IO 操作频繁。id:空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为 id 是空闲 CPU 使用率,us 是用户 CPU 使用率,sy是系统 CPU 使用率。wa:等待 IO CPU 时间。注意:wa 的值高时,说明 IO等 待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
iostat
# iostat 主要用于监控系统设备的io负载【主要参数】:-c: 显示CPU使用情况-d: 显示磁盘使用情况-N: 显示磁盘阵列(LVM) 信息-n: 显示NFS 使用情况-k: 以 KB 为单位显示-m: 以 M 为单位显示-t: 报告每秒向终端读取和写入的字符数和CPU的信息-V: 显示版本信息-x: 显示详细信息-p:[磁盘] 显示磁盘和分区的情况iostat -dmx# 使用间隔检索,每隔2秒显示一次,共5次iostat -d 2 5# 查看分区上的统计信息iostat -p sda 2 6# 显示指定硬盘信息iostat -d sda#查看TPS和吞吐量iostat -d -x -k 1 1
内存
# 参数 -h :Gb单位; -m :Mb单位; 默认Kb单位free -h# 参数说明:total : 总计物理内存的大小used : 已使用内存的大小free : 空闲内存的大小shared : 多个进程共享的内存总大小buff/cache : 磁盘缓存大小(当内存不足时此部分内存会自动释放,内存足够时不会释放)available : 可用内存大小 , 从应用程序的角度来说:available = free + buff/cache##如果cached过大接近total数就需要清除缓存了##缓存清除命令:如图echo 1 > /proc/sys/vm/drop_caches --释放网页缓存echo 2 > /proc/sys/vm/drop_caches --释放目录项和索引echo 3 > /proc/sys/vm/drop_caches --释放网页缓存,目录项和索引
# 查看进程PS -e -o "%C : %p : %z : %a"|sort -k5 -nr # 按内存从大到小排列ps -e -o "%C : %p : %z : %a"|sort -nr # 按CPU利用率从大到小排列
网络
# netstat 监控TCP/IP网络的工具,可以显示路由表、网络接口设备的状态信息【主要参数】:-a或--all:显示所有连线中的Socket;-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;-c或--continuous:持续列出网络状态;-C或--cache:显示路由器配置的快取信息;-e或--extend:显示网络其他相关信息;-F或--fib:显示FIB;-g或--groups:显示多重广播功能群组组员名单;-h或--help:在线帮助;-i或--interfaces:显示网络界面信息表单;-l或--listening:显示监控中的服务器的Socket;-M或--masquerade:显示伪装的网络连线;-n或--numeric:直接使用ip地址,而不通过域名服务器;-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;-o或--timers:显示计时器;-p或--programs:显示正在使用Socket的程序识别码和程序名称;-r或--route:显示Routing Table;-s或--statistice:显示网络工作信息统计表;-t或--tcp:显示TCP传输协议的连线状况;-u或--udp:显示UDP传输协议的连线状况;-v或--verbose:显示指令执行过程;-V或--version:显示版本信息;-w或--raw:显示RAW传输协议的连线状况;-x或--unix:此参数的效果和指定"-A unix"参数相同;--ip或--inet:此参数的效果和指定"-A inet"参数相同。netstat -tunlp # 列出所有处理监听状态的Tcp、Udp端口,加上程序名netstat -tanlp # 列出所有处理监听状态的TCP端口,加上程序名
pmap
# pmap用于报告进程的内存映射关系【主要参数】:-x:显示扩展格式;-d:显示设备格式;-q:不显示头尾行;-V:显示指定版本。
